gpt4 book ai didi

c - 无法为 cufftComplex 数据类型分配 CUDA 设备内存

转载 作者:行者123 更新时间:2023-11-30 18:46:29 27 4
gpt4 key购买 nike

我尝试使用以下代码将 cufftComplex 数组分配到 CUDA 设备 (GEFORCE GTX 1080) 上的内存中:

cufftComplex *d_in, *d_out;
int ds = sizeof(cufftComplex) * width * height;
CUResult test_din = cuMemAlloc((void**)&d_in, ds);
CUResult test_dout = cuMemAlloc((void**)&d_out, ds);
printf("test_din: %s\n", cudaGetErrorString(test_din));
printf("test_dout: %s\n", cudaGetErrorString(test_dout));

当我运行此代码时,得到的错误是:

test_din: initialization error

test_dout: initialization error

当我编译代码时,我确实收到了有关使用 void** 的警告,但我见过的所有 cufft 示例(包括 Cuda 9.1 附带的代码示例)都包含 void** 类型转换。该警告的措辞如下:

/usr/local/cuda/include/cuda.h:90:49: note: expected 'CUdeviceptr *' but argument is of type 'void **'

我在这里做错了什么明显的事情吗?

最佳答案

cuMemAlloc 来自 CUDA 驱动程序 API。

如果您研究任何适当的驱动程序 API 程序,您会发现您需要做的第一件事就是发出:

cuInit();

开始使用 CUDA。也许您还没有这样做(您应该提供 MCVE)。这可能是导致此特定错误的原因。

如果将 CUDA 驱动程序 API 和 CUDA 运行时 API 混合使用,您将遇到两者之间的其他脱节问题。对于大多数代码来说这应该不是必需的,并且我不推荐初学者使用它。

研究示例代码以了解如何使用其中之一。例如,研究 vectorAdd用于学习 CUDA runtime API 基础知识的示例代码程序。研究对应vectorAddDrv学习 CUDA driver API 的基础知识程序。

这里最简单的修复可能只是用 cudaMalloc 替换对 cuMemAlloc 的调用:

cufftComplex *d_in, *d_out;
int ds = sizeof(cufftComplex) * width * height;
cudaError_t test_din = cudaMalloc((void**)&d_in, ds);
cudaError_t test_dout = cudaMalloc((void**)&d_out, ds);
printf("test_din: %s\n", cudaGetErrorString(test_din));
printf("test_dout: %s\n", cudaGetErrorString(test_dout));

关于c - 无法为 cufftComplex 数据类型分配 CUDA 设备内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51144287/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com