我使用英特尔卓越的TBB流程图库成功构建了一个应用程序原型。它似乎工作得很好,但现在我需要将代码重构为生产就绪版本。
以前,我已经为这个特定的域工作了一些更大,更“过度开发”的框架(工作在图像处理中,以前的应用程序使用了ITK / VTK)。然而,对于这个应用程序,我试图采用更低级别和更集中的方法。
目前,我只是在main()
中汇总我的整个图表,这显然是不可持续的。我想允许管道迭代运行,以便我可以从每个阶段获取输出数据并显示它以进行调试/分析。
到目前为止,我的想法是将应用程序的每个逻辑“阶段”抽象为一个接受&tbb::flow::graph
作为构造函数参数的类,并在内部存储对其控制的图节点的引用。我可以让包装器类在输出处分配一个额外的tbb::flow::broadcast_node
,然后在其后分配一个异步节点来触发事件。
这是一个明智的设计理念吗?一般来说,其他人如何将TBB流程图概念整合到其应用程序的结构中?对于TBB库的这个特定部分,示例和文档非常少。
答案 0 :(得分:1)
与任何设计一样,我认为没有明确的正确或错误的方法。我不知道你的代码是否足够好,但是通过逻辑阶段破解代码可能是一个好主意。
当谈到像TBB这样的框架时,你必须做出的设计决定是你是否应该隐藏界面背后的所有框架方面。优点是您可以稍后将实现替换为另一个实现(例如,通过OpenMP替换TBB)。另一方面,在所有情况下可能不需要引入附加层。特别是,如果您不可能更换TBB。
您在问题中描述的设计设计是如何构建框架相关部分。它在很大程度上取决于您正在实施的具体算法。例如,如果它包括在一个图像上应用单独的转换,则每个转换步骤创建一个类可能是一个很好的方法。
此外,将所有内容包装在函数或类中可能是有意义的。如果您正在实现的操作将一个图像作为输入并生成一个图像作为输出,则可以隐藏在隐藏实现细节的接口后面(在这种情况下为TBB)。