首页 > 解决方案 > 为什么我会收到关于 cudaMemcpyToArray(...) 被弃用的警告?

问题描述

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

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

标签: cudacompiler-warnings

解决方案


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

这里给出了如何处理它的描述。

对于将整个分配从主机复制到设备的典型用法,并且源(主机)分配是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) 。

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


推荐阅读