2016-10-27 5 views
1

これは、CUDAプログラミングガイドからの画像です: enter image description hereなぜcudaのブロック/スレッドインデックスがCの2次元配列に似ていないのですか?

これは非常に愚かな質問かもしれないが、それは私にとって本当に混乱に聞こえます。それはそうであってはいけません:

Block (0,0) --> Block (0,1) --> Block (0,2) // This is supposedly row 0 
Block (1,0) --> Block (1,1) --> Block (1,2) // This is supposedly row 1 

これは意図していますか?

答えて

3

CUDAのthreadblockまたはグリッドインデックス順序X、Y、Z例えば

ブロック(1,0)がx次元において第二のブロック、y次元における最初のブロックである

(0,0)、(0,1)、(0,2)がすべて同じ行に属していることを示唆すると、インデックス配置の特定のビュー(行、列)を反映しているだけです。

x、yとrow、columnの間には必須のマッピングはありません。あなたはあなたが望むどんな方法でそれを手配することができます。

CUDA C/C++では、スレッド/ブロックxディメンションを使用して、行列列を参照することが一般的です。これは、ワープ内のメモリアクセスの良好な合体を容易にするためです。しかし、CUDA Fortranでは、Fortran配列のメモリ内の基本的な行列格納パターンがC配列の場合と異なるため、CUDA Fortranでこれらを逆転させることができます(良好な結合のために)。

関連する問題