我是 TBB 的新手,所以我很抱歉,如果这个问题很明显......但是我如何设置一个带有 TBB 的聚合节点?在所有预制节点中,我找不到合适的类型。
想象一下,我有一个传入图像流。我想要一个不断接受图像(带有 FIFO 缓冲区)的节点,对它们进行一些计算(即它需要一个内部状态),并且每当它接收到 N 个图像(固定参数)时,它都会发出一个结果。
我是 TBB 的新手,所以我很抱歉,如果这个问题很明显......但是我如何设置一个带有 TBB 的聚合节点?在所有预制节点中,我找不到合适的类型。
想象一下,我有一个传入图像流。我想要一个不断接受图像(带有 FIFO 缓冲区)的节点,对它们进行一些计算(即它需要一个内部状态),并且每当它接收到 N 个图像(固定参数)时,它都会发出一个结果。
我认为在 TBB 流程图中没有这样的奇异节点可以通过某种预处理进行累积,然后在累积完成后将其结果转发给后续节点。但是,我相信使用多个节点可以达到效果。例如,考虑queue_node
作为图中的起点。它将用作具有 FIFO 语义的缓冲区。在它之后有multifunction_node
N个输出。该节点将进行实际的图像预处理并将结果发送到与图像编号相对应的输出端口。然后join_node
它的所有 N 个输入都连接到 的相应输出multifunction_node
。最后会有一个后继者join_node
将接收 N 张图像作为其输入。自从join_node
将其输入聚合在一个元组中,如果数字 N 相对较大,可以很快看出这种设计的缺点。
另一个变体可能与后继者具有相同的无限并发queue_node
连接(应该进行一些图像预处理),然后具有串行并发(意味着它的主体的单个实例一次只能工作)当达到数字 N 时,将累积图像并从体内调用其继任者。function_node
function_node
multifunction_node
try_put
当然,可能还有其他变体如何通过使用其他流程图拓扑来实现所需的行为。顺便说一句,要将这样的图制作为单个节点,可以使用composite_node
将子图表示为单个节点。