Taskflow仓库: https://github.com/taskflow/taskflow
特性
表达编程模
任务流使开发人员能够使用基于任务图的方法以最小的编程工作量来表达广泛的计算模式。
并行算法原始算法
TaskFlow提供了并行算法原始图,用于快速表达常见的并行算法模式。
有效的系统运行时
TaskFlow开发了高效的系统运行时,针对延迟,能效和吞吐量进行了优化。
可扩展到数百万个任务
任务流已经在大型平行应用中证明了有可靠的性能,其中包含数百万CPU和GPU任务。
文档
启动您的第一个任务流程序
#include <taskflow/taskflow.hpp> // Taskflow is header-only
int main(){
tf::Executor executor;
tf::Taskflow taskflow;
auto [A, B, C, D] = taskflow.emplace( // create four tasks
[] () { std::cout << "TaskA\n"; },
[] () { std::cout << "TaskB\n"; },
[] () { std::cout << "TaskC\n"; },
[] () { std::cout << "TaskD\n"; }
);
A.precede(B, C); // A runs before B and C
D.succeed(B, C); // D runs after B and C
executor.run(taskflow).wait();
return 0;
}
taskflow仅仅依赖头文件,安装没有依赖。
~$ git clone https://github.com/taskflow/taskflow.git # clone it only once
~$ g++ -std=c++17 simple.cpp -I taskflow/taskflow -O2 -pthread -o simple
~$ ./simple
TaskA
TaskC
TaskB
TaskD
# run the program with the environment variable TF_ENABLE_PROFILER enabled
~$ TF_ENABLE_PROFILER=simple.json ./simple
~$ cat simple.json
[
{"executor":"0","data":[{"worker":0,"level":0,"data":[{"span":[172,186],"name":"0_0","type":"static"},{"span":[187,189],"name":"0_1","type":"static"}]},{"worker":2,"level":0,"data":[{"span":[93,164],"name":"2_0","type":"static"},{"span":[170,179],"name":"2_1","type":"static"}]}]}
]
# paste the profiling json data to https://taskflow.github.io/tfprof/
创建一个子流图
将控制流程整合到任务图中
将任务卸载到GPU
撰写任务图
启动异步任务
通过执行人运行任务流
利用标准平行算法
可视化任务流图
支持的编译器