- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用以下代码将 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/
我将数据存储为浮点数数组(单精度)。我有一个数组用于我的真实数据,一个数组用于我的复杂数据,我将其用作 FFT 的输入。我需要将此数据复制到 cufftComplex数据类型,如果我想使用 CUDA
我正在研究 cufft 实现,但找不到任何对 cufftcomplex 函数的引用。我通过谷歌找到了 cucomplex.h,但这对我没有帮助。具体来说,我想知道如何读出 cufftcomplex 结
我尝试使用以下代码将 cufftComplex 数组分配到 CUDA 设备 (GEFORCE GTX 1080) 上的内存中: cufftComplex *d_in, *d_out; int ds =
我正在制作具有 4D 数据的程序。在一个循环中,我遍历第 4 维,并获取最初为 float 的 3D 数据,我将该数据转换为 cufftComplex,然后将其复制到设备并执行多个设备傅里叶变换(来自
我是一名优秀的程序员,十分优秀!