在我的应用程序中,我对工作进行了划分,以便每个经线执行一个工作单元。
为了开始单元上的工作,每个块的线程零必须计算从常数C0
到CW
where的递归关系W= #warp - 1
。
从概念上讲,它看起来像这样:
if(threadId.x ==0) {
for(x=1;x<#warps;x++) {
C[x] = calc_recur(C[x-1]);
}
}
syncthreads();
我想要做的是在计算每个扭曲的递归关系时尽早释放线程。
它看起来像这样:
for(x=1;x<#warps;x++) {
if(threadId.x ==0) {
C[x] = calc_recur(C[x-1]);
}
if(x < warpId) {
partial_syncthreads(x);
}
}
其中 partial_syncthreads 将同步属于大于 x 的 warp 的所有线程。
是否有任何算法可以实现这一点?