2011-06-30 6 views
1

私はCUDAに356x896x60の1つのマトリックスを持っています。私のプログラムでCUDA 3Dマトリックスインデックス

私はこのような3点の空間座標をコーディングしています:

voxel[threadIdx.x]= indexx+indexy*(DETECTOR_X_DIM)+indexz*DETECTOR_X_DIM*DETECTOR_Y_DIM; 

はこの権利ですか?私はこの問題に関するいくつかの話題を見てきましたx*dimx*dimy + y*dimx + z
私は正しい方法が何であるか分かりません

答えて

3

あなたのマトリックス要素がどのようにメモリにレイアウトされているかによって異なります。あなたの値はのようなもので、メモリにマッピングされた場合には有効であるx + y*dimx +z*dimx*dimyを使用している:

index = 0; 
for (z = 0; z<dimz; ++z) 
    for(y = 0; y<dimy; ++y) 
     for(x = 0; x<dimx; ++x) { 
      matrix[index] = value; 
      index++; 
     } 

あなたがXを変更することにより、キューブの各ラインに沿って歩いて多くの小さな立方体で作られたキューブを想像した場合、あなたはラインを切り替えますyとzの立方体の層で

x*dimx*dimy + y*dimx + zはどこですか?私は、dimx = dimzでなければ正しく使うことができる3Dマトリックスを考えることはできません。私はそれが正しいとは思わない。

+0

私は数ヶ月前にCUDAフォーラムでそれを見ました。返信いただきありがとうございます ;) – Bernardo