
Taskflow
文章平均质量分 60
一起学习:
https://github.com/taskflow/taskflow
YAFree123
这个作者很懒,什么都没留下…
展开
-
Taskflow:work-stealing-queue(二)
PS: 这种设计的巧妙性在于,除非deque中的任务数小于等于1, 否则本线程中push 和 pop 是不存在多线程竞态条件的,steal 也只会有一个CAS的开销。推入deque的任务要么被同一线程以相反的顺序执行(对于本线程来说相当于一个stack),要么被另一个线程窃取。原创 2024-04-03 11:21:39 · 402 阅读 · 0 评论 -
Taskflow:work-stealing-queue(一) 内存序
本文主要讲解一下Taskflow中一个重要数据结构:work-stealing-queue的具体设计首先,需要了解C++11中的六种内存序。原创 2024-04-01 22:54:58 · 1376 阅读 · 0 评论 -
Taskflow应用:矩阵乘法
【代码】Taskflow应用:矩阵乘法。原创 2024-04-01 10:48:43 · 186 阅读 · 0 评论 -
Taskflow应用:波前并行(Wavefront Parallelism)
【代码】Taskflow应用:波前并行(Wavefront Parallelism)原创 2024-03-31 23:27:11 · 303 阅读 · 0 评论 -
Taskflow:请求-取消与 性能分析
当向Executor(例如tf::Executor::run)提交任务流时,Executor返回一个tf::Future对象,该对象将保存执行结果。tf::Future是来自std::future的派生类。除了std::future的基本方法外,您还可以调用tf::Future::cancel来取消正在运行的任务流的执行。以下示例取消了任务流的提交,该任务流包含1000个任务,每个任务运行一秒钟。当请求取消时,executor将停止调度任务流的其余Task。但已经运行的Task将继续完成。原创 2024-03-31 21:15:25 · 469 阅读 · 0 评论 -
Taskflow:限制最大并发度( Limit the Maximum Concurrency)
tf::CriticalSection是tf::Semaphore的包装, 当Task添加到Critical Section时,该Task获取并释放Critical Section内部的信号量。此方法tf::CriticalSection::add为添加到Critical Section的每个Task自动调用tf::Task::acquire和tf::Task::release});});});});});原创 2024-03-31 20:52:09 · 598 阅读 · 0 评论 -
Taskflow:异常处理(Exception Handling)
对于tf::Executor::corun 或者 tf::Runtime::corun,会直接抛出异常,如果tf::Runtime::corun没有捕获异常,它将被传播到其父task。由于tf::Future是从std::future派生的,它继承了C++标准定义的所有异常处理行为。当A抛出异常时,执行者将取消任务流的执行,停止在A之后运行的每个任务。在这种情况下,B不会运行。所有依赖该异常Task的后续任务将无法运行。当Task抛出异常时,执行器将以tf::Future句柄引用的共享状态存储该异常。原创 2024-03-31 17:06:58 · 379 阅读 · 0 评论 -
Taskflow:优先级任务(Prioritized Tasking)
总共有三种优先级:tf::TaskPriority::HIGH, tf::TaskPriority::NORMAL, 和 tf::TaskPriority::LOW。对于一个并行Task集合(一组零依赖的Task,可并行执行),executor会尝试先调度高优先级的Task执行,默认情况下,Task的优先级都是tf::TaskPriority::HIGH。注意:Task的优先级只是对于executor的一种提示,当存在多个Worker时,不保证每个Task严格按照优先级来调度。原创 2024-03-31 16:50:31 · 430 阅读 · 0 评论 -
Taskflow:运行时交互(Interact with the Runtime)
Taskflow允许您通过将运行时对象作为任务的参数与调度运行时进行交互。这主要用于设计从Taskflow的现有设施扩展的专用并行算法。原创 2024-03-31 16:40:07 · 454 阅读 · 0 评论 -
Taskflow:异步任务(Asynchronous Tasking)
tf::Executor 提供了异步执行Task的操作tf::Executor::async,并返回Future,用于保留该函数调用的结果。由分析工具,可以看到,这个嵌套的异步任务分别执行在不同的线程中:从executor创建的异步任务不属于任何任务流。异步任务的生命周期由创建任务的executor自动管理。原创 2024-03-31 15:55:53 · 1163 阅读 · 1 评论 -
Taskflow:组合任务(Composable Tasking)
);组合方法tf::Taskflow::composed_of要求目标定义graph()方法,该方法返回对目标定义的tf::Graph对象的引用。在运行时,执行者将使用与其他任务流相同的窃取工作调度算法在该图表中运行依赖任务。Taskflow利用这个强大的功能来设计高级算法,例如tf::Pipeline。与其他模块任务一样,Taskflow不拥有自定义可组合图形对象的生命周期,但保留与之的软映射。在执行期间,用户应该保持图形对象的可用性。原创 2024-03-30 23:09:44 · 471 阅读 · 0 评论 -
Taskflow:条件任务(Conditional Tasking)
条件任务评估一组指令,并返回要执行的下一个后续任务的整数索引。对于cond节点后继的索引正确性,需要依靠用户来保证,如果cond返回的索引超过了合法区间,这个executor将不会调度任务任务。原创 2024-03-30 21:10:36 · 1301 阅读 · 0 评论 -
Taskflow:子流任务(Subflow Tasking)
DAG任务中,有一种常见的场景,一个任务可能在执行期间产生新的任务,然后紧接着执行新任务。之前提到的静态图就没有办法实现这样一个功能了,所以Taskflow提供了另一种流的节点:Subflow,Subflow的API与Taskflow无异,但又可以作为Taskflow的一个节点。原创 2024-03-30 16:39:03 · 795 阅读 · 0 评论 -
Taskflow:执行器(Executor)
创建完一个Taskflow,还需要将其提交给线程池执行,Executor就是执行该动作的对象。原创 2024-03-30 14:39:25 · 1085 阅读 · 0 评论 -
Taskflow: Static Tasking(静态任务)
静态图,由程序自己定义的并行结构,并且无法从正在运行的依赖关系图中产生新Task。原创 2024-03-30 09:43:57 · 463 阅读 · 0 评论 -
Taskflow 简单使用
然后把内容复制到。原创 2024-03-29 21:27:19 · 1249 阅读 · 0 评论