将2D数组传递给CUDA设备并使用它



我有一个与CUDA有关的问题。我用

创建了一个2D数组
char **WordMatrix = new char*[N]; // M and N set by the user
for(int i = 0; i < N; ++i) 
{
    WordMatrix[i] = new char[M];
}

我用循环填充数组。在我的问题所在:我无法在设备中分配内存并从主机复制到设备。

我看到了与此相关的其他问题,但我不理解其逻辑。比如这个话题:https://devtalk.nvidia.com/default/topic/410182/double-pointer-allocation/或者在这里。

我想了解如何使用cudaMemcpy和cudaMalloc和2D Array的代码示例也解释了为什么我们需要支持(如果您使用链接中的方法)指针?

我的理解是CUDA只接受线性化的2D数组,所以实际上是一个1D数组。

int  *my_array = new int[height*width];
for (int h = 0; h < height; h++){
    for (int w = 0; w < width; w++)
        my_array[width * h + w] = value;
}

你可以把它复制到设备内存,就像在另一个答案。

同样,这个问题有更多的信息:

  1. 创建您的2D数组在一块new char[N*M]

  2. 在GPU cudaMalloc(... sizeof(char)*N*M)上分配相同的内存

  3. cudaMemcpy(... hostToDevice)将CPU内存(1.)复制到GPU (2.)

相关内容

  • 没有找到相关文章

最新更新