“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阵列的相同方法,但没有取得多大成功, 获得无效的参数错误。
那么如何将我的主机数据传输到设备内存并返回?
答案 0 :(得分:1)
要将3D数据复制到GPU设备内存中,您需要执行以下操作:
cudaMalloc3D
cudaMemcpy3DParms
cudaMemcpy3D
然后,将数据恢复到主机:
cudaMemcpy3DParms
cudaMemcpy3D
CUDA C编程指南的第3.2.2章“设备内存”有一个代码示例,它分配宽度×高度×深度的浮点值3D数组,并显示如何在设备代码中循环数组元素
此外,CUDA SDK的simpleTexture3D
示例是一个很好的起点。
只需推荐:准备好您的代码以捕获CUDA错误并分析发生错误时会发生什么,因为您可能会找到一些。