cuda:如何将主机数据复制到3D cuda阵列并返回

时间:2012-06-29 13:43:46

标签: c multidimensional-array cuda

“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阵列的相同方法,但没有取得多大成功, 获得无效的参数错误。

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

1 个答案:

答案 0 :(得分:1)

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

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

    然后,将数据恢复到主机:

      使用 cudaMemcpy3DParms
    1. 设置输出参数
    2. 通过 cudaMemcpy3D
    3. 将数据从设备复制到主机

      CUDA C编程指南的第3.2.2章“设备内存”有一个代码示例,它分配宽度×高度×深度的浮点值3D数组,并显示如何在设备代码中循环数组元素

      此外,CUDA SDK的simpleTexture3D示例是一个很好的起点。

      只需推荐:准备好您的代码以捕获CUDA错误并分析发生错误时会发生什么,因为您可能会找到一些。