问题标签 [tbb-flow-graph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
131 浏览

c++ - 使用带有令人尴尬的平行部分的 tbb::flow::graph

我是使用 tbb::flow 的新手,并希望创建一个图表,其中的一部分令人尴尬地平行。所以想法是让消息进入一个节点,该节点进行一些预处理,然后可以制定一组可以并行执行的任务。然后数据在 multifunction_node 中聚合,将结果发送到几个地方。

现在聚合器在工作完成之前不能发送它的工作。因此,它需要跟踪预期答案的数量。我可以使用 tbb::flow::graph 来做到这一点,还是应该创建一个嵌入了并行的函数节点?其他想法或选择?

如果我可以用 tbb::flow 做到这一点,节点类型和排队策略是什么?

另一种思考方式是它是一种 MapReduce 类型的操作,带有一点预处理,结果以稍微不同的形式发送到几个不同的地方。

0 投票
3 回答
697 浏览

c++ - 在流水线执行中使用并行性

我正在尝试开发一个管道,其中首先读取和处理数据,操作一次,以不同的方式操作,然后显示。我想到了一个设计,其中数据 IO 输入到由第一个操纵器读取的缓冲区中。随后,第一个操纵器写入另一个缓冲区,如果可能,第二个操纵器读取该缓冲区。最后,第二个操纵器的输出被写入显示缓冲区,由可视化器读取并使用 OpenGL 显示。

在我看来,这是一个相当简单的并行问题,其中每个任务都有自己的线程,并且它们通过数据缓冲区进行通信。但是,我遇到的所有线程程序教程似乎都表明多线程是由决定如何划分工作负载的中间件(如 OpenMP)决定的。

我是开发多线程应用程序的新手,所以这可能是一个愚蠢的问题,但我所描述的是否可行,并且可以使用 OpenMP 之类的中间件来完成吗?我意识到显而易见的答案是“尝试一下”,我想尝试一下,但教程并没有说明*如何*尝试它。

0 投票
1 回答
367 浏览

c++ - Intel TBB 计算图:如何指定节点的输入队列容量

我正在寻找 .NET TPL 数据流库的 C++ 模拟。

在 TPL 数据流中,您可以指定并行度和块的容量选项。如果块的输入队列的大小达到其容量,则暂停相应块的生产者的执行:

我需要 C++ 中的类似功能。TBB 似乎是一个不错的选择,但我找不到如何在function_node/上指定容量buffer_node。这是一个例子:

0 投票
2 回答
622 浏览

tbb - join_node graph flow construction

I am experimenting Intel Graph Flow from TBB. I am super satisfied by the results and I found the product amazing, with unlimited possibilities. However I was confronted to a pb that I fixed but I am not satisfied. The pb is the following.

This pattern is applied when we want to sync and avoidto propagate n times a message (and his value). Intel provides an example which explained well the pb (and the solution - Intel example). My pb is the tupple constructed and the construction of the graph which used static approach. It is fully static, specially if the number of input edge (input_port<i> in the Intel example) to the join node are variables.

Does a guru of TBB-graph flow knows a "dynamic approach" to this pb ?

Best,

Tim [EDIT my code real pb]

I can do:

I can not do:

Due to the "tuple" and the "tbb::flow::input_port" function.

0 投票
1 回答
153 浏览

c++ - 手动管理和更新英特尔 TBB 流程图?

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

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

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

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

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

0 投票
3 回答
831 浏览

multithreading - 英特尔 TBB 流程图开销

这是我对英特尔 TBB 流图性能进行基准测试的尝试。这是设置:

  • 一个广播节点发送continue_msgN后继节点
    ( a broadcast_node<continue_msg>)
  • 每个后继节点执行需要t几秒钟的计算。
  • 串行执行时的总计算时间为Tserial = N * t
  • 如果使用所有内核,理想的计算时间是Tpar(ideal) = N * t / C,其中C是内核数。
  • 加速比定义为Tpar(actual) / Tserial
  • 我在 16 核 PC 上使用 gcc5 测试了代码。

以下是显示加速作为单个任务(即主体)处理时间的函数的结果:

与轻量级任务(其计算时间不到 1 微秒)一样,并行代码实际上比串行代码慢。

以下是我的问题:

1 ) 这些结果是否符合英特尔 TBB 基准?
2 ) 当有数千个任务每个花费不到 1 微秒的时间时,是否有比流程图更好的范例?

0 投票
0 回答
687 浏览

c++ - Intel TBB:读取文件,为每一行应用一个函数并将结果保存到向量

使用英特尔 TBB,我正在尝试读取文件“串行”,在文件的每一行上应用一个函数,并将结果保存到 A 类型的向量中。

我创建了以下管道

其中 dateToMs 是一个返回 long long 的函数。

执行此管道 y 有以下错误:

我已经看到管道的第一个过滤器读取了所有文件,并且错误出现在文件末尾。

我做错了什么?

编辑:文件的每一行具有以下结构:dd-mm-yyyy hh:mm:ss.msmsms "CompanyName" ff.ff

在哪里:

  • dd-mm-yyyy 是以日-月-年形式表示的日期
  • hh:mm:ss.212313 是以小时分钟秒和毫秒为单位的日期
  • "companyName" 是一个字符串
  • ff.ff 是双重的
0 投票
1 回答
222 浏览

c++ - TBB中的聚合节点

我是 TBB 的新手,所以我很抱歉,如果这个问题很明显......但是我如何设置一个带有 TBB 的聚合节点?在所有预制节点中,我找不到合适的类型。

想象一下,我有一个传入图像流。我想要一个不断接受图像(带有 FIFO 缓冲区)的节点,对它们进行一些计算(即它需要一个内部状态),并且每当它接收到 N 个图像(固定参数)时,它都会发出一个结果。

0 投票
1 回答
289 浏览

multithreading - 主线程以后可以加入TBB竞技场组吗?

比如说,有一个主线程部署 TBB 以生成额外的工作线程,如下面的代码片段所示。

主线程继续其业务,无需等待 arena 组完成。但是,主线程可能恰好在工作线程之前完成。

所以合乎逻辑的问题是:是否有可能实现主线程到 arena 组的后期加入并使用它的时钟来帮助完成剩余的工作?任何等效的基于 TBB 的解决方案来实现这种情况?

0 投票
0 回答
220 浏览

multithreading - 在主踏板上运行的 TBB 流程图节点

有没有办法约束流程图中的节点在主线程上运行?情况是我有一个很大的依赖图,其中只有一些节点可以在其他线程上运行。我不想选择可以在其他线程上运行的节点,而是想将整个图提供给 TBB,然后标记一些节点以在主线程上运行。