2017-07-29 57 views
0

我已经成功地使用英特尔的真棒TBB流程图库建立了一个应用程序原型。它似乎工作得很好,但现在我需要将代码重构为生产就绪版本。手动管理和更新英特尔®TBB流程图?

此前,我曾为这个特定的领域(工作是在图像处理和以前的应用程序已经使用ITK/VTK)一些更大和更“过度开发”的框架。然而,对于这个应用程序,我试图采取更低层次,更集中的方法。

目前,我只是将我的整个图表汇编在main()这显然是不可持续的。我希望允许管道迭代运行,以便我可以从每个阶段获取输出数据并将其显示用于调试/分析目的。

到目前为止,我的想法是将应用程序的每个逻辑“阶段”抽象为一个类,该类接受&tbb::flow::graph作为构造函数参数,并在内部存储对其控制的图节点的引用。我可以让包装类在输出处分配一个额外的tbb::flow::broadcast_node,并在此之后分配一个异步节点来引发事件。

这是一个明智的设计理念吗?一般来说,其他人如何将TBB流程图概念集成到其应用程序的结构中? TBB库的这个特定部分的示例和文档相当少。

回答

1

与任何设计一样,我认为没有一个明确的正确或错误的方法来做到这一点。我不太了解你的代码,但是通过逻辑阶段打破代码可能是一个好主意。

当谈到像TBB这样的框架时,您必须做出的设计决策是您是否应该将所有框架方面隐藏在接口背后。好处是您可以稍后用另一个实现交换实现(例如,用OpenMP替换TBB)。另一方面,在所有情况下可能不需要引入附加层。特别是,如果你不可能取代TBB。

您在问题中描述的设计设计是如何构建框架相关部分。它非常依赖于您正在实施的具体算法。例如,如果它包含对一个图像应用单独的转换,则为每个转换步骤创建一个类可能是一个好方法。

此外,将所有内容都包含在函数或类中也许有意义。如果您正在实现的操作将一个图像作为输入并生成一个图像作为输出,则隐藏在隐藏实现细节的接口(在这种情况下为TBB)后面可以隐藏该图像。