部分线程同步

时间:2013-05-05 16:03:41

标签: cuda

在我的应用程序中,我将工作划分为每个warp做一个工作单元。

为了开始对单元的工作,每个块的线程零必须计算从常量C0CW的{​​{1}}的递归关系。

从概念上看,它看起来像这样:

W= #warp - 1

我想要做的是在计算每个扭曲的递归关系时尽早释放线程。

它看起来像这样:

if(threadId.x ==0) {
    for(x=1;x<#warps;x++) {
        C[x] = calc_recur(C[x-1]);
    }
}
syncthreads();

其中partial_syncthreads将同步属于大于x的warp的所有线程。

是否有任何算法可以启用此功能?

1 个答案:

答案 0 :(得分:1)

我不完全确定,但我怀疑,有一种方法可以减少内核运行时的线程数。

因此,我建议

(1)原样离开它。此时同步线程毫无意义。

(2)将内核拆分为多个内核。因此,您显示的代码是通过减少的线程数来计算的。但是使用此方法,您将无法访问共享内存。

(3)在主机上执行计算。由于它是一个高度串行的实现,这可能是更快的方式。在这里你必须确定,你的函数calc_recur()足够昂贵,转移到主机,并不能否定速度优势。