你真的了解你的电脑吗 —— GPU篇

基本概念
CPU 基于各种指令集实现统筹逻辑等复杂工作,而 GPU 擅长对大数据进行简单重复工作。
显卡中GPU是核心部件,还有显存和其他必要的组件,是我们计算机图形图像输出的重要单元。
显卡工作原理
显示器由一个个像素点构成,每个像素有明确的位置(如 X 和 Y 轴)和分配的色彩数值(如 RGB)。
经过 CPU 调度或生成的图像、视频,游戏画面均通过总线传递给 GPU,而 GPU 把这些画面数据翻译成显示器能读懂的数据传递给显存,继而显存再传递给显卡的视频控制器。
最终,显卡的视频控制器再通过 VGA、HDMI 等各种接口输出到显示器,完成画面的不断刷新。
为什么GPU不直接把数据传输给视频控制器?
显卡为了有效降低延迟,需要将这些静态的一张张画面预存在显存中,所以当下我们的画面越细腻,刷新率越高,而显存也越来越大;基于显存周期等特性,显存也由 DDR 迭代到 DDR6。
显卡分类
当下显卡市场细分主要为核显、独显两大阵营,其中核显市场 Intel 独占鳌头。
核显,有单独的核显芯片,但不是单独出现的,而是将芯片放在了与 CPU 里面,可以说是买 CPU 的附赠品,但是不能进行更换,只能通过换 CPU 的形式去。
对于独显,它是以单独的形态面世,特征很明显,有单独的芯片驱动,可以插在主板的 PCIe 插槽上,随时更换插拔。除了用于游戏的 GPU 以外:
- 有基于视频编辑和内容创建的 GPU;
- 有用于机器学习的神经网络 GPU,因为 GPU 的设计更适合做重复简单的工作;
- 甚至还有云端加速的 GPU。
深度学习与GPU
深度学习框架通过编程接口(如CUDA、OpenCL)与GPU通信,将神经网络的计算操作分配给GPU进行并行处理。这些框架在后台实现了GPU加速的算法,以便有效地利用GPU的并行计算能力。通过编写特定的代码,开发者可以使用这些框架来调用GPU,并将神经网络的计算任务分配给GPU进行处理,从而加速模型的训练和推理过程。
深度学习在调用GPU工作时通常还需要与CPU进行通信。虽然大部分计算任务会被分配给GPU,但仍然需要CPU来处理一些控制流程、数据预处理、模型参数更新等任务。因此,深度学习框架通常会在CPU和GPU之间进行数据传输和通信,以便在整个计算过程中保持数据的一致性和正确性。
CUDA原理
CUDA(Compute Unified Device Architecture)是由NVIDIA开发的并行计算平台和编程模型,用于利用GPU进行通用目的计算。CUDA工作的基本原理是利用GPU的并行计算能力来加速计算密集型任务。下面是CUDA工作的基本原理:
并行计算架构: CUDA利用GPU的大量并行计算核心来执行任务。GPU中的核心被分组成多个流处理器(Streaming Multiprocessors,SMs),每个SM可以同时执行多个线程。
线程层次结构: CUDA将任务划分为网格(Grid)、块(Block)和线程(Thread)三个层次。网格包含多个块,而每个块又包含多个线程。这种层次结构可以利用GPU的并行性,以高效地执行大量线程。
内存层次结构: CUDA中有多种类型的内存可供使用,包括全局内存、共享内存、常量内存和纹理内存等。每种内存类型都有其特定的访问特性和使用场景,开发人员可以根据需求选择合适的内存类型来优化性能。
核函数: 在CUDA中,开发人员编写称为核函数(Kernel Function)的程序,这些函数在GPU上并行执行。核函数由主机(Host)代码调用,并在GPU上执行。每个核函数实例由一个或多个线程执行,这些线程被组织成网格和块,并通过特殊的语法和标识符来访问其位置和其他线程。
数据传输: 在CUDA中,数据可以在主机内存和设备内存之间进行传输。开发人员可以使用特定的API来管理数据的传输,以确保数据在主机和设备之间的高效移动。
通过这些原理,CUDA可以充分利用GPU的并行计算能力,加速各种类型的计算任务,包括科学计算、深度学习、图形渲染等。