cudaGetDeviceCount返回0

cudaGetDeviceCount返回0,cuda,ubuntu-12.04,nvidia,Cuda,Ubuntu 12.04,Nvidia,我正在运行以下代码。然而,我得到的输出是 代码38有错误 测试=0 deviceCount=0 代码38有错误 test2=0 我在Ubuntu上有一个NVIDIA GTX 690图形卡。这是否意味着驾驶员未激活 #include <iostream> using namespace std; __device__ __constant__ float* data; template<class T> void allocOnly(T* deviceDest, siz

我正在运行以下代码。然而,我得到的输出是 代码38有错误 测试=0 deviceCount=0 代码38有错误 test2=0 我在Ubuntu上有一个NVIDIA GTX 690图形卡。这是否意味着驾驶员未激活

#include <iostream>

using namespace std;
__device__ __constant__ float* data;

template<class T> void allocOnly(T* deviceDest, size_t numElem)
{
    cudaError_t errCode = cudaMalloc((void**)&deviceDest, numElem*sizeof(T));
    if(errCode != cudaSuccess) 
        cout << "Got error with code " << errCode << endl;
}

int main()
{
    float* test(0);
    allocOnly<float>(test,10);
    cout << "test = " << test << endl;
    int deviceCount = 0;
    cudaGetDeviceCount(&deviceCount);
    cout << "deviceCount= " << deviceCount << endl;

    float* test2(0);    
    cudaError_t errCode = cudaMalloc((void**)&test2, 10*sizeof(float));
    if(errCode != cudaSuccess) 
        cout << "Got error with code " << errCode << endl;
    cout << "test2 = " << test2 << endl;

    return 0;
}
#包括
使用名称空间std;
__设备常数浮点*数据;
模板无效允许(T*DeviceTest,大小\u T numElem)
{
cudaError_t errCode=cudaMalloc((void**)和devicetest,numElem*sizeof(t));
if(errCode!=cudaSuccess)

cout是的,您的系统设置有问题。请尝试从终端运行nvidia smi-a
,查看它报告的内容

您应该在调用
cudaGetDeviceCount
(以及所有cuda API调用和内核调用)时执行此操作。此操作也将具有指导意义


对我来说,在任何其他cuda API调用(例如在
allocOnly
中调用
cudamaloc
)之前执行对
cudaGetDeviceCount
的调用也是有意义的。

执行以下命令。。它应该可以解决问题

sudo nvidia-xconfig --enable-all-gpus

谢谢,罗伯特,我弄错了jumioadmin@cudaGPU:~/cuda convnet$nvidia smi-a nvidia:无法打开设备文件/dev/nvidiactl(没有这样的文件或目录)Nvidia SMI失败了,因为它无法与英伟达驱动程序通信。请确保最新的NVIDIA驱动程序已安装和运行。我有Nvidia网站的.Run文件。我还需要做什么才能使它每次运行?我不确定你在问什么。你可能需要通过运行一些类似于nvidia smi作为根用户。或者你只需要安装驱动程序。或者你正在与一个新的驱动程序发生冲突。我无法根据这些信息诊断你的系统。此外,帮助你正确设置系统也不是主题。你可能想阅读linux作为其中一些主题cs包含在此处。从
cudaGetDeviceCount
返回的错误将不具有“指导性”。该调用被定义为始终返回
cudaSuccess
:请参阅@ChrisKitching您链接的手册非常旧,由CMU托管,而不是由NVIDIA托管。当前的NVIDIA手册页为,并且它给出了至少两种“已定义”的情况返回代码可能不同于
cudaSuccess
:1。请注意,此函数还可能返回以前异步启动时的错误代码。2.如果无法加载驱动程序以确定是否存在任何此类设备,则
cudaGetDeviceCount()
将返回
cudaErrorInsufficientDriver
。我不知道这是否有帮助,但如果您在最近的笔记本电脑上运行ubuntu,您可能需要Bumblebee,因为Nvidia Optimus,以便安装驱动程序。