C++ TBB中的聚合节点

C++ TBB中的聚合节点,c++,tbb,tbb-flow-graph,C++,Tbb,Tbb Flow Graph,我是新来TBB的,所以我很抱歉,如果这个问题很明显。。。但是如何使用TBB设置聚合节点?在所有预先制作的节点中,我找不到适合它的类型 想象一下,我有一个传入图像流。我想要一个节点,它不断地接受图像(带有FIFO缓冲区),对图像进行一些计算(即,它需要一个内部状态),并且每当它接收到N个图像(固定参数),它就会发出一个结果。我认为TBB流图中没有这样的单一节点,它通过某种预处理进行累加,然后,积累完成后,将其结果转发给继任者。 但是,我相信通过使用多个节点可以实现这种效果。例如,在代码中考虑 Qu

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


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

我认为TBB流图中没有这样的单一节点,它通过某种预处理进行累加,然后,积累完成后,将其结果转发给继任者。 但是,我相信通过使用多个节点可以实现这种效果。例如,在代码中考虑<代码> QuealeSnEngule作为起点。它将用作具有FIFO语义的缓冲区。在它之后,出现具有N个输出的
多功能\u节点
。该节点将执行实际的图像预处理,并将结果发送到与图像编号对应的输出端口。然后进入
join_节点
,该节点的所有N个输入连接到
多功能_节点
的相应输出。最后将有一个
join\u节点的后续节点
,该节点将接收N个图像作为其输入。由于
join\u节点
将其输入聚合在一个元组中,因此在N相对较大的情况下,可以很快看出这种设计的缺点

另一种变体可能是将相同的
队列节点
连接到
功能节点
,作为后继节点进行无限并发(
功能节点
应该进行一些图像预处理),然后使用具有串行并发的
多功能节点
(这意味着一次只能有一个身体的实例在工作)这将在某种程度上累积图像,并在达到数字N时,尝试从身体内部调用它的后继者


当然,也可能有其他变体如何通过使用其他流图拓扑实现所需的行为。顺便说一句,要将这样一个图作为单个节点,可以使用将子图表示为单个节点的组合节点。

将队列节点放在无限函数节点之前实际上是无用的,因为latter从不拒绝它的输入。如果保持一定的顺序很重要(例如视频流中帧的顺序),那么最好在无限“计算器”和串行“聚合器”之间放置一个sequencer_节点。我有完全相同的用例,因为你没有接受任何答案,你找到更好的解决方案了吗?如果是,你能分享它吗?