hprof(Hprof 堆栈)

hprof(Hprof 堆栈)https taskflow github io taskflow install html https github com szandara cpp taskflow tab readme ov file info https dreampuf github io GraphvizOnli https taskflow github io tfprof

大家好,我是讯享网,很高兴认识大家。



https://taskflow.github.io/taskflow/install.html

https://github.com/szandara/cpp-taskflow?tab=readme-ov-file  info

https://dreampuf.github.io/GraphvizOnline/

https://taskflow.github.io/tfprof/

https://www.oschina.net/p/cpp-taskflow
https://github.com/taskflow/taskflow/releases/tag/v3.5.0
https://github.com/taskflow/taskflow
https://taskflow.github.io/taskflow/index.html
https://www.zywvvd.com/notes/coding/cpp/taskflow/taskflow/

我使用的版本是3.5,

 

讯享网


讯享网

运行官例出现如下报错:

讯享网

加上-std=c++17后就解决了。后面的官例大家可以看 Taskflow:异步任务(Asynchronous Tasking)-CSDN博客 https://blog.csdn.net/jj147258369/category_12624347.html 这个博主,他理解得透彻一些。而我现在只是为了追求性能蛮试。

运行官例parallel_data_pipeline,结果:

 将输出的拓扑图代码复制到在线查看网站:Graphviz Online

由pdf第3章可以知道,有5种任务调度模式:static task, dynamic task, composable task, condition

task , and cudaFlow task 。
静态调度是指任务层次平坦,无法从正在运行的任务图中创建新的任务。我觉得静态调度就是只有唯一一条任务线(主线),很顺的从头走到尾。如下图的:A--(B,C)--D
动态调度涉及父任务、子任务,如下图的静态线A--(B,C)--D就是父任务,而(B2,B1)--B3--B就是子任务。

组合任务使开发者可以自行决定任务层次,可以通过组合模块化、重复的单元形成更大的任务。这可以提高产能和并行编程的可伸缩性。如下图C--D--E是静态线(主taskflow),而D1--D2--D是动态线,E是一个模块化任务单元(单独的一个taskflow)。

而下图是一个不正确的组合任务示例:因为这两个相同的模块化任务F1会导致竞争???

我的实例是参考简单的官例写的,都是静态task,部分代码与输出如下:

 

拓扑图如下,这和我设计的流程是一致的:

 可是性能对比好像并没有太大的提升???

是不是不该用静态,因为这并不是一条很顺的主线。应该用动态?组合? 

我profile一下,按照官网:

讯享网

将这个json文件拷贝到Taskflow Profiler 下面的框中:

可以看到我的都是浅蓝色的,因为表示static即静态。末端的柱状图表示对每个task根据耗时排序的结果。鼠标点击任意位置即可出现task名称以及相关信息:

左边显示的E0即Executor0,因为我的确只创建了1个executor。W即表示Worker,这4个worker自动生成的?L0表示Level0,也是自动生成?

可以看到主要是W1最耗时,怎么继续优化我想想

小讯
上一篇 2025-06-08 23:34
下一篇 2025-06-15 16:53

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/154543.html