Cuda线程:特殊映射/索引

时间:2012-07-01 11:26:05

标签: cuda mapping

我有不同的34个线程块(0 ... 33)。

我需要找到一个公式,以便在每个块中,前33个线程(0 ... 32)将指向对应的

bases[x]

x从0到32,而最后一个,33,到66。

1 个答案:

答案 0 :(得分:1)

我猜你想要这样的东西:

int offset = (threadIdx.x == 33) ? threadIdx.x : 0;
int val = bases[threadIdx.x + offset];

以便最后一个线程从块中的线程索引获得非零偏移量。将有条件地评估三元运算符,并且不会导致任何分支发散。但是,我建议重新考虑使用不是经线尺寸倍数的块尺寸(32)。这样做会浪费很多核心和周期。例如,没有任何东西阻止你使用32个线程的块并且最后两个线程执行额外的计算以覆盖每个块所需的34个操作。