CUDA 3D矩阵索引

时间:2011-06-30 12:27:58

标签: 3d indexing cuda

我在CUDA中有一个矩阵,即356x896x60。

在我的程序中,我正在编写三个空间坐标,如下所示:

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

这是对的吗?我已经看到有关使用x*dimx*dimy + y*dimx + z的问题的一些话题所以我不确定什么是正确的方法

1 个答案:

答案 0 :(得分: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矩阵。我不认为这是正确的。