gpt4 book ai didi

c++ - TBB中的聚合节点

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:29 24 4
gpt4 key购买 nike

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

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

最佳答案

我认为 TBB 流图中没有这样的单个节点通过某种预处理进行累加,然后在累加完成后将其结果转发给后继节点。但是,我相信可以通过使用多个节点来实现效果。例如,将 queue_node 视为图中的起点。它将用作具有 FIFO 语义的缓冲区。在它之后是带有 N 个输出的 multifunction_node。该节点将进行实际的图像预处理,并将结果发送到与图像编号对应的输出端口。然后是 join_node,它的所有 N 个输入都连接到 multifunction_node 的相应输出。最后将有一个 join_node 的后继节点,它将接收 N 个图像作为其输入。由于 join_node 将其输入聚合在一个元组中,因此在数字 N 相对较大的情况下可以很快看出这种设计的缺点。

另一个变体可能有相同的 queue_nodefunction_node 连接,作为后继者无限并发(function_node 应该做一些图像预处理),然后有一个具有串行并发性的 multifunction_node(意味着它的主体一次只能运行一个实例),它将累积图像并执行 try_put 当达到数字 N 时,从 body 内部调用它的继任者。

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

关于c++ - TBB中的聚合节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48627384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com