【发布时间】:2015-02-27 14:07:35
【问题描述】:
我有 3 维数据,我正在使用 CUDA 处理它。
我正在使用 cudaMallocPitch() 分配内存。
cudaMallocPitch((void **)&test_data, &pitch, sizeof(float)*N*N, N);
在二维版本的代码中,维度为 N*N,我通过以下方式访问特定元素:
i = blockIdx.x*BLOCK_X + threadIdx.x;
j = blockIdx.y*BLOCK_Y + threadIdx.y;
linearIdx = i + j*pitch/sizeof(float);
现在我希望将代码扩展到 3-D。我可以类似地得到 z 索引
k = blockIdx.z*BLOCK_Z + threadIdx.z;
但是我现在如何将这三者结合起来得到线性索引呢? pitch 到底是什么,我现在如何访问该元素?请评论我为 3-D 数据分配内存的方法是否正确。
谢谢!
【问题讨论】:
-
我不知道这个功能 (cudaMallocPitch),但它似乎有一个 3D 版本,我通过以下 cudaMalloPitch cudaMallocPitch 上的第一个谷歌链接找到它:developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/… 所以我猜你(谁知道)也可以找到它,公式可能是 linearIdx = i + pitch.xsize * ( j + pitch.ysize * k)
-
亲爱的@user2774555,如果您重新审核答案并接受其中一个答案,或者甚至使用新信息编辑您的问题,如果没有帮助您解决问题,那就太好了。