CUDA编程 基础与实践 学习笔记(一)

开个坑…
用pytorch太不灵活了,学习一下CUDA编程。
研究生都第二年了,坚持不下去就有点丢人了奥。
书名见标题,樊哲勇老师的著作,清华大学出版社出版。
重点看前面十二章。
初次阅读,如有理解错误恳请大家批评指正~mua

第一章
GPU(graphics processing unit),显卡。与CPU的区别:CPU有更多晶体管,用于数据缓存和流程控制,只有少数几个逻辑计算单元,适合完成复杂的逻辑计算;GPU有数千个核心,适合大规模矩阵运算。

(GPU的DRAM和CPU的DRAM是通过PCIe总线来通信的~,所以两者在程序中是否能够直接访问对方的存储空间呢?)
异构计算指CPU+GPU两种不同设备的协作计算,CPU为host,GPU为device。书中使用的GPU均为Nvidia GPU,CUDA编程目前仅支持该公司的GPU。有以下几个系列:

雀食,实验室的GPU都是Tesla,自己打游戏的主机是GeForce的。
计算能力表达为X.Y的形式:
CUDA编程 基础与实践 学习笔记(一)_第1张图片
前者为主版本号,后者次版本号。但这个并不代表性能,只能为程序运行时判断硬件特征提供依据。版本号越大,GPU架构(architecture)越新。Tesla既是第一代GPU架构的名字,也是科学计算系列GPU的总称,要依据上下文判断。
主版本号一般会绑定一个GPU架构的名字,所以今后看到GPU架构的名字就要大概明白其计算能力如何。而不同的系列(如tesla, quadro, geforce, jetson)针对不同的应用场景。第一代架构Tesla和第二代架构fermi已经不支持最新CUDA。查看GPU架构: developer.nvidia.com/cuda-gpus。


一个疑问:

  1. 目前还是对计算能力没什么清晰的概念。Tesla不愧是适合科学计算的GPU啊,双进度浮点计算的峰值是单精度的1/2,1/3,相比之下GeForce却只有1/32,可能盲僧R闪的角度不需要用32为浮点数来计算8hhhhhh
  2. 还有个疑问,如果程序超过了GPU显存容量,此时使用统一内存难道程序就能正确运行了?统一内存是啥?
    CUDA编程 基础与实践 学习笔记(一)_第2张图片CUDA编程 基础与实践 学习笔记(一)_第3张图片
    GeForce 2070计算能力强于V100,但后者计算性能更强,也更贵。
    GPU编程工具:CUDA,OpenCL(AMD)

CUDA提供了两层API:CUDA driver API(底层,灵活,不好用), cuda runtime API(高级,可读性强),两者性能无差别。确实,有的时候发现nvidia-smi出来(runtime)的CUDA版本和nvcc -V(driver)出来的CUDA版本不一样,但也可以运行。根据下图这个层级关系,driver的版本应该高于runtime的版本,
CUDA编程 基础与实践 学习笔记(一)_第4张图片

CUDA版本是GPU软件开发平台的版本,计算能力对应GPU硬件架构的版本(先暂时将计算能力等同为GPU架构版本号吧,暂时还不知道用什么来衡量这个计算能力)。高架构GPU需要高版本CUDA,CUDA 10.2将CUDA C改为CUDA C++,强调CUDA c++是C++的拓展。
一个疑问:这个有意思了,是不是10.2之前不支持C++的一些操作?

nvidia-smi后,可以发现目前GPU在WDDM模式,只有高端计算型Tesla和渲染型quadro和TITAN支持切换,消费型GeForce不支持。
TCC:该模式下,GPU 完全用于计算,不能作为本地显示输出。

WDDM:该模式下,GPU 既用于计算又用于本地显示输出。
CUDA编程 基础与实践 学习笔记(一)_第5张图片

关于TCC模式和WDDM模式:https://dinone.kf5.com/hc/kb/article/1410366/
CUDA编程 基础与实践 学习笔记(一)_第6张图片
CUDA编程 基础与实践 学习笔记(一)_第7张图片

疑问

你可能感兴趣的:(CUDA,编程,c++,pytorch,计算机视觉)