任务并行流水线
Taskflow 为您提供了任务并行管道编程框架,以便您实现管道算法。管道并行是指通过线性管道或阶段链并行执行多个
数据Token。每个阶段处理从上一个阶段发送的数据Token,将给定的可调用函数应用于该数据Token,然后将结果发送到下一个
阶段。可以跨不同阶段同时处理多个数据Token。
头文件
#include <kthread/algorithm/pipeline.h>
理解管道调度框架
kthread::Pipeline 对象是一个可组合图,用于通过任务流中的模块任务创建流水线调度框架(请参阅可组合任务)。与传统的流水线编程
框架(例如 Intel TBB 并 行流水线)不同,Taskflow 的流水线算法不提供任何数据抽象,这通常会限制用户优化其应用程序中的数据布
局,但它提供了一个灵活的框架,让用户能够在高效的流水线调度框架之上自定义其应用程序数据。
上图给出了我们的流水线调度框架的示例。该框架由三个管道(串行-并行-串行阶段)和四条线路(最大并行性)组成,其中每条线路最多处理一个数
据Token。三管道四条线路的流水线将通过三个管道的顺序链传播每个数据Token,并且可以同时在四条线路上处理最多四个数据Token。每条边代表一个任务依
赖关系。例如,从线路 0 中的管道 0 到管道 1 的边表示第一条线路中第一和第二个管道之间的任务依赖关系;从线路 0 中的管道 0 到线路 1 中的
管道 0 的边表示在同一管道上处理两个数据Token时两个相邻线路之间的任务依赖关系。每个管道可以是串行类型或并行类型,其中串行管道按顺序处理
数据Token,而并行管道同时处理不同的数据Token。
info
注意
由于管道的性质,Taskflow 要求第一个管道为串行类型。管道调度算法以循环方式运行,其系数为行数。