2

“cuda c 编程指南”给出了使用 cuda 数组的示例。这些示例仅限于 2D。因此,对于 2D cuda 数组,我只需执行以下操作即可将主机数据复制到设备内存:

// Copy to device memory some data located at address h_data in host memory  
// cuInputArray is a 2D cuda array
cudaMemcpyToArray(cuInputArray, 0, 0, host_data, size_bytes, cudaMemcpyHostToDevice);
// with e.g. size_bytes := size_arr_x * size_arr_y * sizeof(float)

我尝试了相同的方法,将 cuInputArray 作为 3D cuda 数组,但没有取得多大成功,出现无效参数错误。

那么如何将我的主机数据获取到设备内存并返回呢?

4

1 回答 1

1

为了将 3D 数据复制到 GPU 设备内存中,您需要执行以下操作:

  1. 分配内存空间cudaMalloc3D
  2. 设置输入参数cudaMemcpy3DParms
  3. 输入数据从主机复制到设备cudaMemcpy3D

然后,要将数据返回到主机:

  1. 设置输出参数cudaMemcpy3DParms
  2. 输出数据从设备复制到主机cudaMemcpy3D

CUDA C Programming Guide 的 Chapter 3.2.2 Device Memory 有一个代码示例,它分配一个宽×高×深的浮点值 3D 数组,并展示了如何在设备代码中循环遍历数组元素

CUDA SDK的simpleTexture3D示例也是一个很好的起点。

只是一个建议:准备您的代码以捕获 CUDA 错误并分析发生错误时发生的情况,因为您可能会发现一些错误。

于 2012-06-29T15:18:49.957 回答