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

标签 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 数组,但没有取得太大成功, 收到无效参数错误。

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

最佳答案

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

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

然后,将您的数据返回给主机:

  1. 设置使用cudaMemcpy3DParms
  2. 输出参数 使用 cudaMemcpy3D
  3. Copy 输出数据从设备到主机

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

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

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

关于cuda:如何将主机数据复制到 3D cuda 数组并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262928/

相关文章:

c - 如何将 unsigned char 复制到 char(以避免类型不匹配/长度错误问题?

php - 如何使用数组函数合并 php 中的内部数组元素?

java - mySQL Java 数据库建模

c - 查找素数执行的程序需要一些时间

c - 像 int *array[99] = {0}, *u 这样的东西是做什么的?

c++ - 如何使用 CUDA Parallel NSight 调试器查看引用变量?

opengl - 如何使用 Mipmapping 将 CUDA 生成的 PBO 复制到纹理

c++ - cudaSafeCall() 运行时 API 错误

你能解释一下这段代码吗?

python - 合并三个相同形状的 NumPy 数组