请问Taichi支持流水线的写法吗?

我有个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支持流水线的写法吗?

Hi @virgilwjj, 非常欢迎你来到太极论坛。

请问你说的流水线写法的意思是 串行之行程序么?

简单地来说,一个线程做一个任务,然后把数据交给下一个线程,然后自己做上一个线程传过来的数据。


因为我是新用户,只能embedding一个图片。

具体的问题:
我设置一个初始的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 个赞

如果只有一份数据,那么这个流水线跟单线程的一样。如果有一系列数据要按这个逻辑处理的话,可以写一个“全能”函数,这个函数能根据数据状态判断执行哪一步,然后这个函数用来并行处理数据。就是把流水线转换成数据并行。不过本质上太极好像只支持数据并行

懂了。
但是,你这样还要把这个“全能”的函数,再多次call,才行。因为每次只做了一件事。
如果在 for这样的情况下,如何再call多次这个全能函数呢?

太极会把kernel里最外层的for循环并行

能不能利用for分配,0~n-1个workers。
然后 worker0把处理好的东西,想个办法“通知” worker1去处理worker0处理好的数据?然后一个个传下去?

好像没有

Hi @virgilwjj, 这是一个很好的问题。不过太极目前 并不能很好的支持你所说的流水线方式运行程序。

如果要实现类似的功能,首先是需要每个任务可以开一个线程,线程之间通过信号量或者临界区来进行同步。目前 Taichi 还不支持这么细粒度的控制。

谢谢 老师的回答。