CUDA入门学习笔记:一 简介
一、CPU与GPU
- CPU(central processing unit 中央处理器),拥有几个快速计算核心,主要用于数据缓存和流程控制。
- GPU(graphics processing unit 图形处理器),拥有成千个不太快的计算核心,主要用于算术逻辑运算。
- GPU计算其实一般都是指CPU+GPU的异构计算,GPU只负责加速运算,无法实现CPU的流程调度问题。其中CPU通常称为主机(host)而GPU通常称为设备(device)。
二、英伟达GPU分类
CUDA是英伟达公司为其GPU开发的一套二次开发工具,所以CUDA只能支持英伟达的GPU。英伟达的GPU可以简单分为四类:
- Tesla:内存为纠错内存,稳定性好,一般用于服务器中。
- Quadro:支持告诉OpenGL渲染,多用于专业绘图设计。
- GeForce:一般都是玩游戏普通PC用的,但是也支持CUDA,日常学习使用没有问题,但是没有纠错内存,稳定性低一些。
- Jetson:多用于嵌入式设备。
每个GPU都有自己的一个计算能力,计算能力不完全代表计算性能,也要看浮点数运算峰值(FLOPS, 每秒最多能执行的浮点数运算次数)。并且GPU也有自己对应的显存,如果程序需要的显存大于GPU的显存可能会导致崩溃等问题。英伟达官网中可以查询每个显卡的计算能力(https://developer.nvidia.com/cuda-gpus)。
三、CUDA
-
CUDA包含两层API,分别是CUDA驱动(device)API和CUDA运行时(runtime)API。字面上可以看出驱动API更加底层,使用起来相对更加灵活,但同时入手困难,所以大部分的工程使用还是以运行时API为主。
-
安装有英伟达驱动和CUDA库的计算机可以通过在终端中输入
nvidia-smi
来查看GPU信息,如下图:
① 第一行显示英伟达驱动版本和CUDA版本;
② 只有一块GPU,显示设备号为0,GPU名称,如果计算机中有多个GPU,GPU会从0开始依次编号,可以通过CUDA_VISIBLE_DEVICES来设置所需要指定使用的GPU 例如:export CUDA_VISIBLE_DEVICES=1
指定使用1号设备;
③ WDDM模式,Tesla、Quadro和Titan可以选择TCC模式,TCC就是GPU只用于计算,WDDM模式下GPU需要完成显示和计算两个功能;
④ Uncorr. ECC为N/A意为没有纠错内存(ECC);
⑤ Compute M. 指计算模式,一般为默认模式(Default),还有一种模式为独占模式(E. Process),这种模式不能在WDDM模式下使用,顾名思义独占模式,只能干一件事,无法显示的同时再做其他运算了。