Taskflow仓库: https://github.com/taskflow/taskflow

特性

image.png

表达编程模
任务流使开发人员能够使用基于任务图的方法以最小的编程工作量来表达广泛的计算模式。

image.png
并行算法原始算法
TaskFlow提供了并行算法原始图,用于快速表达常见的并行算法模式。

image.png
有效的系统运行时
TaskFlow开发了高效的系统运行时,针对延迟,能效和吞吐量进行了优化。

image.png
可扩展到数百万个任务
任务流已经在大型平行应用中证明了有可靠的性能,其中包含数百万CPU和GPU任务。

文档

启动您的第一个任务流程序
image.png

  1. #include <taskflow/taskflow.hpp> // Taskflow is header-only
  2. int main(){
  3. tf::Executor executor;
  4. tf::Taskflow taskflow;
  5. auto [A, B, C, D] = taskflow.emplace( // create four tasks
  6. [] () { std::cout << "TaskA\n"; },
  7. [] () { std::cout << "TaskB\n"; },
  8. [] () { std::cout << "TaskC\n"; },
  9. [] () { std::cout << "TaskD\n"; }
  10. );
  11. A.precede(B, C); // A runs before B and C
  12. D.succeed(B, C); // D runs after B and C
  13. executor.run(taskflow).wait();
  14. return 0;
  15. }

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

image.png

# 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
撰写任务图
启动异步任务
通过执行人运行任务流
利用标准平行算法
可视化任务流图
支持的编译器