5

非常に基本的なことを明確にする必要があるだけです。ほとんどの計算例では、次のようなものを使用しています。

ID = blockIdx.x*blockDim.x+threadIdx.x;

// ... その後、配列 [ID] で計算を行います

私の質問は、ブロック内のスレッドの最大数 (1024) を使用したい場合、 ( threadIdx.xthreadIdx.ythreadIdx.z) のすべてを考慮して「スレッド ID」を「構築」する必要があるかということです。

もしそうなら、それを単一の値にハッシュするための推奨される方法は何ですか?

そうでない場合、この投稿のような画像処理関連の操作で同様の方法で誰かがそれを使用できるのはなぜですか。

https://stackoverflow.com/questions/11503406/cuda-addressing-a-matrix

blockidx.xとは、この点でblockidx.yと同じ立場ですか?threaIdx

4

4 に答える 4

1

これは、Robert Crovella の回答の上にあります。

2D/3D グリッドを作成することは、読みやすさのためだけでなく、オンチップ共有メモリの 2D/3D 局所性を活用することにもなります。これにより、はるかに高速なアクセスが可能になります。問題が 2D グリッドで機能する場合、1D グリッドでそのような局所性を効率的に利用することはできません。

于 2014-12-16T16:10:44.590 に答える