2011-06-30 196 views
1

我在CUDA中有一个矩阵,它是356x896x60。CUDA 3D矩阵索引

在我的计划,我编码三个空间坐标是这样的:

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?我想不出一个3D矩阵,除非dimx = dimz,否则您可以正确使用它。我不认为这是正确的。

+0

我在几个月前的CUDA论坛上看到过它。谢谢回复 ;) – Bernardo