Deepin15.4 下 CUDA 配置方法

deepin15.4不仅漂亮而且运行流畅,吸引了大批linuxer,其中也不乏搞cuda的小伙伴。但是有不少童鞋在deepin15.4下配置cuda遇到了困难,所以抽空写个博文说一下我配置的方法。主要针对电脑是intel 核显,nvidia显卡,需要运行cuda,并且有双显卡热切换需求的小朋友。


我的环境

先说一下我电脑的配置吧,大家的硬件环境不一样,我也没法一一测试。

  • CPU intel core i5 4210u
  • 显卡 nvidia gt840m
  • 系统 deepin 15.4 x64

目标

  1. 安装nvidia-bumblebee,实现双显卡切换

    对于笔记本用户来说,一直开着独显的话发热量会明显增大,并且耗电也会变快,所以需要安装bumblebee来切换显卡,平时只用核显就足够了,需要运行cuda或者玩游戏的话才开启独显。

  2. 安装cuda开发工具

    cuda在linux下的开发工具基本上够用了,有基于eclipse 的nsight,有visual profiler性能分析工具,还有pycuda库实现对python运算的加速。但是我以前在deepin上面尝试安装官方的.run包,均以失败告终,很容易把电脑搞崩溃。最近终于找到了从软件源直接安装cuda的方法。


具体安装方法

  1. 安装nvidia-bumblebee

    sudo apt update
    sudo apt install bumblebee bumblebee-nvidia nvidia-smi
    • 1
    • 2

    一行命令搞定nvidia驱动、bumblebee切换程序、和显卡状态监控程序。

    不用管nouveau驱动,系统会自己屏蔽掉。

    然后重启

    sudo reboot
    • 1

    重启之后测试

    nvidia-smi
    • 1

    optirun nvidia-smi
    • 1

    如果出现如下界面,说明驱动安装成功 
    这里写图片描述

  2. 安装cuda开发工具

    首先安装配置g++,gcc

    因为cuda版本原因,cuda8之前都只支持g++-4.8,gcc-4.8

    所以gcc需要降级

    sudo apt install g++-4.8 gcc-4.8
    • 1

    然后更改软连接

    cd /usr/bin
    sudo rm gcc g++
    sudo ln -s g++-4.8 g++
    sudo ln -s gcc-4.8 gcc
    • 1
    • 2
    • 3
    • 4

    然后下载开发工具

    sudo apt install nvidia-cuda-dev nvidia-cuda-toolkit nvidia-nsight nvidia-visual-profiler
    • 1

    使用nsight的方法为:在终端下输入

    optirun nsight
    • 1

    这里写图片描述

  3. 安装pycuda扩展

    有的同学有使用python 写cuda的需求,推荐pycuda,能够自定义核函数,并且里面带的GpuArray这个数据结构很好用安装方法为:

    sudo apt install python-pycuda
    • 1

    写一个程序

    from __future__ import print_function
    from __future__ import absolute_import
    import pycuda.autoinit
    import pycuda.gpuarray as gpuarray
    import pycuda.driver as cuda
    import numpy
    import time
    
    free_bytes, total_bytes = cuda.mem_get_info()
    exp = 10
    while True:
       fill_floats = free_bytes / 4 - (1<if fill_floats < 0:
           raise RuntimeError("couldn't find allocatable size")
       try:
           print("alloc", fill_floats)
           ary = gpuarray.empty((fill_floats,), dtype=numpy.float32)
           break
       except:
           pass
    
       exp += 1
    
    ary.fill(float("nan"))
    
    print("filled %d out of %d bytes with NaNs" % (fill_floats*4, free_bytes))
    
    time.sleep(10)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    另存为python fill_gpu_with_nans.py

    然后

    optirun python python fill_gpu_with_nans.py
    • 1

    这里写图片描述 

你可能感兴趣的:(CUDA编程)