CUDA 3D матричный индекс - PullRequest
1 голос
/ 30 июня 2011

У меня есть одна матрица в CUDA, которая составляет 356x896x60.

В моей программе я кодирую три пространственные координаты следующим образом:

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

Это правильно?Я видел некоторые темы по этому вопросу, которые используют x*dimx*dimy + y*dimx + z
Так что я не совсем уверен, что правильный метод

1 Ответ

3 голосов
/ 30 июня 2011

Зависит от того, как ваши матричные элементы расположены в памяти.Вы используете 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?Я не могу придумать 3D-матрицу, где вы можете использовать ее правильно, если только dimx = dimz.Я не думаю, что это правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...