0

我已经使用英特尔出色的 TBB 流图库成功地对应用程序进行了原型设计。它似乎工作得很好,但现在我需要将代码重构为生产就绪版本。

以前,我曾为这个特定领域使用过一些更大、更“过度开发”的框架(这项工作是在图像处理方面,以前的应用程序使用的是 ITK/VTK)。然而,对于这个应用程序,我正在尝试采用较低级别且更集中的方法。

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

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

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

4

1 回答 1

1

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

对于像 TBB 这样的框架,您必须做出的设计决定是是否应该将所有框架方面隐藏在界面后面。优点是您可以稍后将实现换成另一个实现(例如,用 OpenMP 替换 TBB)。另一方面,并​​非在所有情况下都需要引入额外的层。特别是,如果您不太可能更换 TBB。

您在问题中描述的设计设计是如何构建框架相关部分。这在很大程度上取决于您正在实施的具体算法。例如,如果它包括在一个图像上应用单独的转换,那么每个转换步骤创建一个类可能是一个好方法。

此外,将所有内容包装在一个函数或类中可能是有意义的。如果您正在实现的操作将一张图像作为输入并生成一张图像作为输出,那么这可以隐藏在隐藏实现细节的接口后面(在本例中为 TBB)。

于 2017-07-29T23:39:28.567 回答