为什么CUDA在AI领域是霸主
这是一个困扰我很久的问题。一直想去探讨其中的原理和机制。所以进行一次小小的探索。
写完就想发到B站上,还请各位大佬给我纠纠错。都是很粗枝大叶的理解,烦请各位大佬多带带Orz。
概念
CUDA is a parallel computing platform and programming model created by NVIDIA. With more than 20 million downloads to date, helps developers speed up their applications by harnessing the power of GPU accelerators.
CUDA是一个并行计算的平台和可编程的模型,其帮助开发者实现利用GPU加速计算。
CUDA编程实际上非常简单和易用。在我的理解里,CUDA在编程意义上就是NVIDIA给的一个API,给C++加了一个头文件可以对GPU进行调度,或者python的一个库。

经过Chatgpt的解释,我大概理解了GPU加速的概念。
对于一个矩阵运算,比如说最基础的矩阵乘法,那么在其中需要的简单运算加法和乘法是非常多的。而且这个数量会随着矩阵的size增加而指数级增加。
GPU不同于CPU,它有着功能一般,但数量庞大的核心。应对一些复杂的操作可能够呛,例如CPU中需要频繁调用和覆盖的寄存器,然后还有各种各样的地址运算等等。但是它刚好能够handle矩阵这些很简单的运算。所以对于这些计算,GPU就可以同时进行很多,对任务进行拆分。
比如说GPU有三个核心,我们进行一次3*3的矩阵乘法,那么我们可以让GPU这三个核心分别算每一行或者每一列的结果。最后再总起来进行求和就得到计算结果。
这就是GPU加速的基本原理。
CUDA的底层技术
所有的底层GPU加速技术都差不多,AMD的ROCm其实技术特性也大差不差。
具体大概有这些:
CUDA加速的底层设计主要涉及到以下几个方面:
GPU架构:NVIDIA的GPU架构是为高性能并行计算而设计的。它包括大量的小型处理核心,每个核心可以同时执行多个线程。GPU架构还包括多级缓存、内存控制器和高速内存总线等组件,以支持高效的数据访问和通信。
并行计算模型:CUDA引入了一种并行计算模型,包括线程层次结构和内存模型。线程层次结构包括线程块和线程格的概念,可以在GPU上调度和执行大量的并行线程。内存模型定义了不同层次的内存,如寄存器、共享内存和全局内存,以及数据在这些内存层次之间的传输和共享方式。
核函数和调度:CUDA通过核函数(Kernel)的概念来表示并行计算任务。核函数是在GPU上并行执行的函数,每个线程执行相同的指令但处理不同的数据。CUDA的运行时系统负责调度和执行核函数,并将任务分发给适当数量的线程块和线程格。
内存管理:CUDA提供了显式的内存管理机制,开发者可以在主机和设备之间分配和传输数据。开发者可以使用CUDA的内存分配函数(如cudaMalloc)在设备上分配内存,并使用内存传输函数(如cudaMemcpy)在主机和设备之间复制数据。这种显式的内存管理方式使开发者能够更精细地控制数据的传输和使用,以优化性能。
编译和优化:CUDA提供了编译器和优化器,将CUDA代码转换为针对GPU架构的底层指令。编译器将CUDA代码翻译为中间表示(Intermediate Representation),并应用一系列优化技术,如指令级并行、内存访问优化和代码重排等,以提高计算性能和效率。
CUDA为何领先和不可替代
CUDA能有今天的占有率和领先水平,得益于CEO黄仁勋的远见卓识和预判。

CUDA在人工智能领域的霸主地位,就如同Windows在游戏领域的成功和iPad在平板领域的成功一样。关键词就在于一个生态。
一台M2 Ultra的Mac Pro,在真正的游戏玩家面前,吸引力可能甚至不如一台3070的WindowsPC,而后者的价格只是前者的十分之一甚至九分之一。同样类比,一张AMD7900XT,在AI工作者的眼里,可能不如一张3070Ti。
以下是具体领先的点:
生态系统和支持:CUDA拥有较为成熟和广泛的生态系统和开发工具支持。NVIDIA在GPU计算领域拥有长期的领先地位,并且积极支持和推动CUDA生态系统的发展。CUDA提供了丰富的库和工具,如cuDNN、cuBLAS和TensorRT等,方便开发者进行深度学习、线性代数和推理加速等任务。此外,NVIDIA还提供了包括CUDA编译器和优化器在内的完整的开发工具链,使开发者能够更方便地进行GPU编程和性能优化。
性能和优化:NVIDIA的GPU架构和CUDA技术经过多年的发展和优化,具有卓越的计算性能和优化能力。NVIDIA的GPU架构设计着重于并行计算,在处理大规模并行任务时具有出色的性能表现。CUDA编译器和优化器能够对CUDA代码进行高效的编译和优化,以提高计算性能和效率。
深度学习生态系统:在深度学习领域,NVIDIA在GPU加速的深度学习框架方面具有领先地位。NVIDIA与许多流行的深度学习框架(如TensorFlow、PyTorch和MXNet)紧密合作,提供了针对CUDA的深度学习库和工具,使开发者能够更轻松地利用GPU进行深度学习模型的训练和推理。这为CUDA提供了在深度学习任务中的显著优势。
CUDA未来的挑战者?

根据 @林亦LYi 的说法,得益于Apple Sillicon的统一内存架构,苹果有可能在AI计算领域成为NVIDIA的挑战者。
毕竟直到现在,NVIDIA的显卡也不支持自由更换显存这个操作,而在Apple Sillicon中,显存和内存实质上是一体的。意味着甚至是最丐版的M2芯片,理论上都可以支持8G的显存,而M2 Ultra甚至可以支持192G的显存。
而且统一内存架构带来的更梦幻的优点是,CPU和GPU之间的数据传输时间可以极大地缩短。这是完全物理上的暴打,毕竟再小的主板距离,也比不过M系列芯片这种SOC的内部距离。
也不知道苹果是无心插柳柳成荫呢还是早有预谋。不过个人观点,SOC这种模式可能才更接近未来的终极计算平台的概念。
小结
CUDA的成功又是一次先发制人和远见卓识的胜利。
在写这些文字的时候,不经感慨人类的发展速度。Chatgpt已经在知识领域比我强太多。