我是CUDA编程的新手,我完全陷入困境.当我尝试运行提供的deviceQuery实用程序或其中一个示例应用程序时,我收到以下错误:
cudaGetDeviceCount returned 38
no CUDA-capable device is detected.
Run Code Online (Sandbox Code Playgroud)
我使用的是Windows 7,64位.我安装了Visual Studio 2012,然后安装了CUDA 5.0 64位.我的显卡是NVIDIA GeForce GTS 250.今天我去了NVIDIA网站并重新安装了该卡的最新驱动程序.
除了"确保安装了正在运行的驱动程序"之外,我在Windows中找不到任何对此错误的支持.有没有人知道什么可能是错的?
我将数据存储为浮点数组(单精度).我有一个数组用于我的实际数据,一个数组用于我的复杂数据,我用它作为FFT的输入.cufftComplex
如果我想使用CUDA cufft库,我需要将这些数据复制到数据类型中.来自nVidia:" cufftComplex
是一种单精度,浮点复数数据类型,由交错的实部和虚部组成." 袖带操作的数据存储在数组中cufftComplex
.
如何快速将数据从普通C数组复制到数组中cufftComplex
?我不想使用for
循环,因为它可能是最慢的选项.我不知道如何使用memcpy
这种类型的数组数据,因为我不知道它是如何存储在内存中的.谢谢!
我想在C项目中包含一些CUDA代码.为此,我正在将CUDA源(.cu文件)编译为静态库(.lib,我正在Windows中开发).然后,我希望将此静态库链接到我的C项目.但是,我的链接器抱怨这一步,我相信这是因为C/C++链接问题.我得到的具体错误看起来像这样:
Undefined symbol '_cudaMallocHost@8' referenced in "cufft object file.lib".
Run Code Online (Sandbox Code Playgroud)
我正在使用CUDA 5.0,我正在使用Visual Studio 10在Windows 7计算机上编写和编译CUDA源代码.
首先,我有一个.cu源文件,它编译成一个静态库("cufft object file.lib")就好了.我将整件事包裹起来extern C { }
.它看起来像这样:
extern "C" {
#include <cuda.h>
#include <cufft.h>
int myCUDAfunction()
{
//Some CUDA code
}
}
Run Code Online (Sandbox Code Playgroud)
为此,我创建了一个头文件,其中包含.cu源代码中定义的函数列表("myCUDAheader.h"),其内容只是一系列函数原型:
int myCUDAfunction();
Run Code Online (Sandbox Code Playgroud)
等等
最后在我的C项目中,我添加了静态库并包含头文件.
在我开始声明CUDA源.cu文件中的函数之前extern "C"
,链接器抱怨缺少这些函数的符号.它们现在必须正确编译到C链接,但实际的CUDA函数(例如cudaMalloc
)似乎仍然具有C++链接.我该如何解决这个问题?