0

それぞれ 34 スレッド (0...33) の異なるブロックがあります。

これらのブロックのそれぞれで、最初の 33 スレッド (0...32) が対応するスレッドを指すように式を見つける必要があります。

bases[x]

x は 0 から 32 まで、最後の x は 33 から 66 までです。

4

1 に答える 1

1

私はあなたがこのようなものが欲しいと推測しています:

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

最後のスレッドがブロック内のスレッド インデックスからゼロ以外のオフセットを取得するようにします。三項演算子は条件付きで評価され、分岐分岐は発生しません。ただし、ワープ サイズ (32) の倍数ではないブロック サイズを使用することを再検討することをお勧めします。そうすることで、多くのコアとサイクルを浪費することになります。たとえば、32 スレッドのブロックを使用し、ブロックごとに必要な 34 操作をカバーするために最後の 2 つのスレッドで追加の計算を実行することを妨げるものは何もありません。

于 2012-07-01T12:01:23.310 に答える