什么是CUDA
作者:Keepin
- 1、cuda是英伟达开发的一套应用软件接口(API)。其主要应用于英伟达GPU显卡的调用。
- 2、云计算可以简单的理解为是通过网络组合成的计算机集群,用于各种加速,其中以CPU为主,GPU为辅。所以CUDA可以成为云计算的一个支柱。
- 3、神经网络能加速的有很多,当然使用硬件加速是最可观的了,而目前除了专用的NPU(神经网络加速单元),就属于GPU对神经网络加速效果最好了:
- 3.1、Cuda的整套软件非常完善,所以早期很多厂家用cuda能快速搭建神经网络加速软件框架,所以cuda也被广泛应用于神经网络加速。(当然英伟达还专门开发了一套神经网络套件,叫做tensorrt,在神经网络推理部署的时候更为广泛应用)
- 3.2、从开发api来说,神经网络的加速不仅仅可以用cuda加速,还可以用其他API,例如GPU开发API很多,包括opencl,opengl,vulkan都可以在英伟达的GPU上加速神经网络,只不过在英伟达显卡上整体来说开发复杂,这些API优化效率不如cuda,毕竟cuda是英伟达自家开发的,自然适配地非常好
- 3.3、从硬件角度来说,AMD的显卡也可以用于加速神经网络,只不过软件生态做得不如英伟达,自然应用程度也不如英伟达。事实上,AMD也开发一套Miopen的神经网络加速套件,类似于tensorrt;还开发了一套rocm套件,类似于cuda,只不过市场占有率较低而已。
- 3.4、amd和nvidia都是以桌面端的GPU为主,在移动端,例如手机芯片,高通、苹果和arm的GPU也可以用于加速神经网络,主要使用opencl,vulkan,metal等开发API来实现。
cuda的官方文档:https://docs.nvidia.com/cuda/
学习路线
sazc
入门CUDA
说到入门,个人比较推荐《CUDA C编程权威指南》,虽然这本书年代比较久,原版书2014年出版的,使用的GPU最新也仅仅是2012年的CC3.X的Kepler,但这些基础知识仍然是掌握CUDA最新特性必不可少的,因此还是值得当作入门学习读物的。
进阶CUDA
CUDA C++ Programming Guide
要想Coding出高质量的Kernel,那么官方最新的《CUDA C++ Programming Guide》便是让我们可以全面了解到CUDA特性的最直接的办法,目前最新的版本是12.2。
注:此手册个人认为适合随时查阅,用到啥查啥,从头开始阅读学习,会耗费巨大的精力,效果甚微。
CUDA Samples
如果想利用CUDA特性,快速搭建“简单”的Kernel原型,那么官方的《CUDA Samples》便是再好不过的参考资料。
注:笔者曾经简单过了一遍这个repo,后面有任务需要编写分类算法、理解CUDA特性、学习CUDA 扩展库等,均从中找到了合适的Demo,快速搭建原型。
CUDA: NEW FEATURES AND BEYOND
如果对每代CUDA最新特性感兴趣,那么每年一次或两次的官方GTC发布的《CUDA: NEW FEATURES AND BEYOND》便是可以从宏观层面快速了解到该特性的最好方法之一。
注:观看视频,下载PDF需要注册,比较老的版本 Google可以搜到下载链接。
CUDA Library
cuDNN、cuBlas、cuDLA…。
GPU架构
搞CUDA的要不理解一些GPU的特性,那么永远写不出优质的代码,学习GPU架构可以从白皮书、GTC、官方Blog以及论坛的暗示入手。
SASS
官方的Binary Utilities与论坛的暗示、开源的Assembler、泄漏的SASS规格书、工具分析。
性能分析工具
Nsight System、Nsight Compute、Nsight VS Code等。
专业CUDA
答主目前还没到这个阶段,暂且挖坑。