我在CUDA中有一个矩阵,即356x896x60。
在我的程序中,我正在编写三个空间坐标,如下所示:
voxel[threadIdx.x]= indexx+indexy*(DETECTOR_X_DIM)+indexz*DETECTOR_X_DIM*DETECTOR_Y_DIM;
这是对的吗?我已经看到有关使用x*dimx*dimy + y*dimx + z
的问题的一些话题所以我不确定什么是正确的方法
答案 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矩阵。我不认为这是正确的。