“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 设备内存中,您需要执行以下操作:
- 分配内存空间,使用
cudaMalloc3D
- 设置使用
cudaMemcpy3DParms
输入参数
使用 - 复制 从主机到设备的输入数据
cudaMemcpy3D
然后,将您的数据返回给主机:
- 设置使用
cudaMemcpy3DParms
输出参数
使用 - Copy 输出数据从设备到主机
cudaMemcpy3D
CUDA C 编程指南的第 3.2.2 章设备内存有一个代码示例,它分配一个宽度×高度×深度的浮点值 3D 数组,并显示如何在设备代码中循环遍历数组元素.
CUDA SDK 的 simpleTexture3D
示例也是一个很好的起点。
只是一个建议:准备您的代码以捕获 CUDA 错误并分析发生错误时发生的情况,因为您可能会发现一些错误。
关于cuda:如何将主机数据复制到 3D cuda 数组并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262928/