0

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

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

bases[x]

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

4

1 回答 1

1

我猜你想要这样的东西:

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

以便最后一个线程从块内的线程索引获得非零偏移量。三元运算符将有条件地进行评估,不会导致任何分支分歧。但是,我建议重新考虑使用不是扭曲大小 (32) 倍数的块大小。这样做会浪费很多内核和周期。例如,没有什么会阻止您使用具有 32 个线程的块并让最后两个线程执行额外的计算以覆盖每个块所需的 34 个操作。

于 2012-07-01T12:01:23.310 回答