开个坑…
用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的形式:
前者为主版本号,后者次版本号。但这个并不代表性能,只能为程序运行时判断硬件特征提供依据。版本号越大,GPU架构(architecture)越新。Tesla既是第一代GPU架构的名字,也是科学计算系列GPU的总称,要依据上下文判断。
主版本号一般会绑定一个GPU架构的名字,所以今后看到GPU架构的名字就要大概明白其计算能力如何。而不同的系列(如tesla, quadro, geforce, jetson)针对不同的应用场景。第一代架构Tesla和第二代架构fermi已经不支持最新CUDA。查看GPU架构: developer.nvidia.com/cuda-gpus。
一个疑问:
CUDA提供了两层API:CUDA driver API(底层,灵活,不好用), cuda runtime API(高级,可读性强),两者性能无差别。确实,有的时候发现nvidia-smi出来(runtime)的CUDA版本和nvcc -V(driver)出来的CUDA版本不一样,但也可以运行。根据下图这个层级关系,driver的版本应该高于runtime的版本,
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 完全用于计算,不能作为本地显示输出。
关于TCC模式和WDDM模式:https://dinone.kf5.com/hc/kb/article/1410366/
疑问