CUDA 安装完成以后如何判断安装是否成功

最近在家里过寒假,可能这是还在学校里带着最大的福利了,无意之中翻出了多年前买的几本关于CUDA编程的书,于是随便在自己电脑上配置了一下环境,试试能不能把当年没有看完的书给看完了,于是有了今天这个判断CUDA是否安装成功的一个博客。

原本按照自己以前的安装法子来配置环境,无奈开机后总是不成功,于是采用了Ubuntu默认的安装方式,即 apt-get nvidia-cuda-toolkit ,  安装好以后本打算着用CUDA自带的测试sample 来试试是否安装成功,无奈此种安装方式是不带sample的,于是采用如下步骤测试。

nvidia-setting

有了上图后可以确认NVIDIA的驱动已经安装好。

但是,这时出现了个比较神奇的事情,就是如下命令的失败:

nvidia-detector

该命令显示 显卡并没有被识别,而这恰恰和上图出现的结果相反,十分令人费解,于是继续探索。

lspci  | grep -i vga

该命令证明 NVIDIA 显卡也没有被识别,但这也是与第一个命令结果相反的,于是继续在网上搜索。

最后在无意中发现了这个 帖子: https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=14898

该帖子最后的一个回答解答了我的疑虑:

lspci |  egrep 'VGA|3D'

该结果清楚的显示我的电脑上的NVIDIA显卡已经被识别,验证了一个命令的驱动安装成功的结果。

由于此种安装方式并不会有自带的sample因此需要我自己去编写测试,这时在网上找到了这么一个demo,感觉不错,如下:

#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>

//初始化CUDA
int count=0;

bool InitCUDA()
{
    printf("Start to detecte devices.........
");//显示检测到的设备数

    cudaGetDeviceCount(&count);//检测计算能力大于等于1.0 的设备数

    if(count == 0)
    {
        fprintf(stderr, "There is no device.
");
        return false;
    }

    printf("%d device/s detected.
",count);//显示检测到的设备数

    int i;
    for(i = 0; i < count; i++)
    {//依次验证检测到的设备是否支持CUDA
        cudaDeviceProp prop;
        if(cudaGetDeviceProperties(&prop, i) == cudaSuccess) 
        {//获得设备属性并验证是否正确
            if(prop.major >= 1)//验证主计算能力,即计算能力的第一位数是否大于1
            {
                printf("Device %d: %s supportsCUDA %d.%d.
",i+1,prop.name,prop.major,prop.minor);//显示检测到的设备支持的CUDA 版本
                break;
            }
        }
    }

    if(i == count) 
    {//没有支持CUDA1.x 的设备
        fprintf(stderr, "There is no device supporting CUDA 1.x.
");
        return false;
    }

    cudaSetDevice(i);//设置设备为主叫线程的当前设备
    return true;
}

int main()
{
    if(!InitCUDA()) 
    {//初始化失败返回系统int argc, char** argv
        return 0;
    }

    printf("Hello GPU! CUDA has been initialized.
");

    //exit(argc ? EXIT_SUCCESS : EXIT_FAILURE);
    return 0;//返回系统
}

其中需要注意的一个问题是运行编译好的程序时需要使用  sudo ,  即使用管理员权限, 可能是在安装NVIDIA驱动和CUDA的时候本身就是安装使用管理员权限的,所以要调用它们的时候也是需要使用sudo来操作的。

原文地址:https://www.cnblogs.com/devilmaycry812839668/p/8367294.html