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

Mil*_*lad 2 cuda compiler-warnings

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

\n
warning: \xe2\x80\x98cudaError_t cudaMemcpyToArray(cudaArray_t, size_t, size_t, const void*, size_t, cudaMemcpyKind)\xe2\x80\x99 is deprecated [-Wdeprecated-declarations]\n
Run Code Online (Sandbox Code Playgroud)\n

Rob*_*lla 5

已弃用意味着不建议使用它,并且在下一个 CUDA 版本中可能会删除对它的支持

此处描述了如何处理它。

对于将整个分配从主机复制到设备的典型用法,源(主机)分配是w按高度行对宽度元素进行平坦(无间距)分配h,可能如下所示:

cudaMemcpyToArray(dst, 0, 0, src, h*w*sizeof(src[0]), cudaMemcpyHostToDevice)
Run Code Online (Sandbox Code Playgroud)

您可以将其替换为:

cudaMemcpy2DToArray(dst, 0, 0, src, w*sizeof(src[0]) , w*sizeof(src[0]), h, cudaMemcpyHostToDevice);
Run Code Online (Sandbox Code Playgroud)

替换 API( cudaMemcpy2DToArray) 记录在此处

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