我有个demo想实现的,但是 p[i + 1] = f(p[i]),无法使用数据的并行。
但是 s1[i + 1] = j1(p[i + 1]), s2[i + 1] = j2(s1[i + 1]), … s{N}[i + 1] = jN(s{N-1}[i + 1]),
很适合做任务的并行。流水线的方式。
Taichi支持流水线的写法吗?
具体的问题:
我设置一个初始的p0,
然后,任务1:p{i + 1} = f( p{i} ),p{i + 1}依赖于p{i},所以这里无法拆开。
然后,任务2:s{i + 1} = p{i + 1} - p{i}
然后,任务3:c{i + 1} = h( s{i + 1} )
…
我想着,流水线就是,每个线程一个任务。
然后任务1做完就交给任务2,任务2做完交给任务3,一直到最后一个任务这样…
1 Like
如果只有一份数据,那么这个流水线跟单线程的一样。如果有一系列数据要按这个逻辑处理的话,可以写一个“全能”函数,这个函数能根据数据状态判断执行哪一步,然后这个函数用来并行处理数据。就是把流水线转换成数据并行。不过本质上太极好像只支持数据并行
懂了。
但是,你这样还要把这个“全能”的函数,再多次call,才行。因为每次只做了一件事。
如果在 for这样的情况下,如何再call多次这个全能函数呢?
太极会把kernel里最外层的for循环并行
能不能利用for分配,0~n-1个workers。
然后 worker0把处理好的东西,想个办法“通知” worker1去处理worker0处理好的数据?然后一个个传下去?
好像没有
Hi @virgilwjj, 这是一个很好的问题。不过太极目前 并不能很好的支持你所说的流水线方式运行程序。
如果要实现类似的功能,首先是需要每个任务可以开一个线程,线程之间通过信号量或者临界区来进行同步。目前 Taichi 还不支持这么细粒度的控制。
谢谢 老师的回答。