【发布时间】:2017-10-08 09:53:36
【问题描述】:
我尝试在 cuda 中实现以下代码,但在 cuda 中将 3D 数组展平为 1D 时遇到问题
C++ 代码
for(int i=0; i<w; i++)
for(int j=0; j<h; j++)
for(int k=0; k<d; k++)
arr[h*w*i+ w*j+ k] = (h*w*i+ w*j+ k)*2;
这就是我目前在 Cuda 中所拥有的
int w = h = d;
int N = 64;
__global__ void getIndex(float* A)
{
int i = blockIdx.x;
int j = blockIdx.y;
int k = blockIdx.z;
A[h*w*i+ w*j+ k] = h*w*i+ w*j+ k;
}
int main(int argc, char **argv)
{
float *d_A;
cudaMalloc((void **)&d_A, w * h * d * sizeof(float) );
getIndex <<<N,1>>> (d_A);
}
但我没有得到我期望的结果,我不知道如何获得正确的 i,j 和 k 索引
【问题讨论】:
-
你应该看看 CUDA 指南,尤其是Chapter 2.2。您可以“在三个维度上调用 CUDA 内核”。我认为这是你想做的,但你没有。还要考虑到每个块绝对应该启动多个线程。
标签: c++ arrays indexing 3d cuda