質問

にCUDAカーネル、コードは下記までお願いします。うことにより計算の一分子当たりのスレッドは、蓄積、分子をブロックの算出を分母に、それを返します。しかし、CUDAでの値を設定するdenomも値計算のためnumerのスレッドをブロックの最大のthreadIdx.xではなく、和のnumerデフォルト"の定義についての全てのスレッドはブロックです。なんだろうけど、日本人になるかもしれません。

extern __shared__ float s_shared[];

float numer = //calculate numerator

s_shared[threadIdx.x] = numer;
s_shared[blockDim.x] += numer;
__syncthreads();

float denom = s_shared[blockDim.x];
float result = numer/denom;

"結果"を必ず、0-1、和1のブロックでですが、1.0べてのスレッドがthreadIdx.xの最大値、およびその他の価値のみならず、その他のスレッドはブロックです。

役に立ちましたか?

解決

ない同期の総括の方に適切な blockDim.x 立地です。のモニターで待機中のスレッドを見てどの記述を追加する前に、自。のような

  • 皆様に読み込みをゼロに
  • 潮流計算のゼロ+numer.
  • Everoneに書き込みゼロ+numerのメモリ場所

高threadId勝b/cでの可能性が高い演技の最後だと思います。

やりたいくために迅速、はバイナリの和に s_shared[threadIdx.x]

  • 皆様の書き込みをnumer
  • 半数のスレッドの計算額のペアおよび書き方に新しい場所
  • 四半のスレッドcaluclateの金組のペアに書き込み、これらの新しい位置
  • など
  • まだ一つのスレッド一和

このO(n)作業O(log n)時間。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top