为什么我会收到有关 cudaMemcpyToArray(...) 被弃用的警告?

Why am I getting a warning about cudaMemcpyToArray(...) being deprecated?

这是什么警告,我该如何解决?

warning: ‘cudaError_t cudaMemcpyToArray(cudaArray_t, size_t, size_t, const void*, size_t, cudaMemcpyKind)’ is deprecated [-Wdeprecated-declarations]

已弃用意味着不推荐使用,可能会在下一个 CUDA 版本中放弃对它的支持

给出了如何处理的描述here

对于将整个分配从主机复制到设备的典型用法,源(主机)分配是宽度 w 元素按高度 h 的平面(未倾斜)分配行,也许是这样的:

cudaMemcpyToArray(dst, 0, 0, src, h*w*sizeof(src[0]), cudaMemcpyHostToDevice)

您可以将其替换为:

cudaMemcpy2DToArray(dst, 0, 0, src, w*sizeof(src[0]) , w*sizeof(src[0]), h, cudaMemcpyHostToDevice);

替换 API (cudaMemcpy2DToArray) 记录在案 here

请注意,在我给出的示例中,如果您不了解由行和列组成的“2D”分配,而是具有(比方说)w 元素的单个平面分配,您可以简单地在上面的公式中设置 h=1