質問
に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)時間。
所属していません StackOverflow