zoukankan      html  css  js  c++  java
  • 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来操作的。

  • 相关阅读:
    [poj解题]1017
    [算法] aov图拓扑算法
    【supervisord】部署单进程服务的利器
    【python】一个备份把文件备份到邮箱的python实现
    【GO】关于GO的浅显总结
    iOS开发快捷键
    iOS开发笔记
    VS2012智能提示无效解决方案
    国内几个WindowPhone广告平台
    纪念自己的第四个App:秘密Secret
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/8367294.html
Copyright © 2011-2022 走看看