GPU 计算——它是什么?
GPU 或图形处理单元存在于所有产生一种或另一种显示形式的电子电路中,尤其是计算机。
早期的图形处理器相对简单。 但随着游戏、3D 动画和视频渲染任务的出现,这些任务将 CPU 推到了极限,更强大的 GPU 不得不前来救援。
随着时间的推移,这些新的 GPU 卡的功能和复杂性都在增加,不同的公司和研究人员正在寻找利用其并行执行优势的方法。 这篇文章向您展示了到目前为止的进展情况。
什么是 GPU?
GPU 或图形处理单元是专为处理数据而设计的专用电路,以帮助创建用于显示的图像。 换句话说,GPU 是一个系统,它可以创建您在任何显示表面上看到的图像,例如计算机显示器、智能手机屏幕、游戏机等。
GPU 最初是简单的设备,可以将图形元素组合在一起,为特定设备创建理想的输出。 然而,随着时间的推移,随着计算机游戏的出现,GPU 的复杂性和功能开始增长,催生了 GPGPU 或通用 系统总线 在 GPU 上.
什么是 GPU 计算?
GPU 计算或 GPGPU 是指使用 GPU 进行图形以外的计算。这意味着使用嵌入在计算机视频卡中、最初用于处理计算机图形的 GPU 来计算其他类型的数据,例如科学模拟、 cryptocurrency 挖掘、代数计算、天气预报、神经网络等等。
GPU 计算的这种演变的原因来自于图形处理单元的令人印象深刻的发展,它来自现代 GPU 系统的分布式并行架构。
随着计算机的 CPU 变得越来越强大,可以处理更复杂的程序和游戏,视频卡制造商也试图跟上现代计算和 3D 图形的发展。 英伟达公布了 GeForce 256 1999 年,作为世界上第一块 GPU 视频卡,事情从那里演变而来。
GPU 卡相对于 CPU 的主要优势在于其并行处理架构,这使得它们能够以分布式并行方式处理大型数据任务,从而防止出现瓶颈和 CPU 冻结。
GPU计算的应用有哪些?
GPU 计算的应用有很多,以下是一些热门用途:
- 机器学习和神经网络
- 模糊逻辑
- 生物信息学
- 分子建模
- 视频渲染
- 几何计算
- 气候研究和天气预报
- 天文物理学
- 加密
- 计算机视觉
- 密码破解
- 量子研究
GPU 与 CPU 处理
GPU 和 CPU 都处理数字数据,但它们的处理方式不同。 CPU 或中央处理单元设计用于高速串行处理,而 GPU 设计用于低速并行处理。 当然,一个 CPU 可以使用超线程来获得每个内核 2 个线程,甚至有几十个内核,但它们本质上是串行处理器。
虽然 CPU 可以有几个内核,但现代 GPU 有数千个内核,例如, Nvidia GeForce RTX 3090 它具有 10K+ 个内核。 但是,要获得优于 CPU 的优势,数据必须能够并行处理,例如一次处理包含数千张图像的流。
GPU 与 ASIC
ASIC 代表专用集成电路,这意味着它只能执行一项任务——即它被设计执行的任务。 ASIC 是一种独特的机器,它是从头开始开发的,需要专业的硬件知识来构建。 ASIC 通常用于加密货币挖掘,因为它们提供了良好的并行处理优势和比 GPU 更好的效率。
然而,两者之间的主要区别在于 GPU 更加通用。 例如,您可以使用 GPU 轻松构建加密货币挖矿设备。 这些零件很容易获得,如果您完成了挖矿,您可以随时将 GPU 卡出售给游戏玩家或其他矿工。 但是,使用 ASIC,您只能将二手机器出售给其他矿工,因为您几乎无法用它做任何其他事情。
除了加密货币挖掘之外,将您的手放在 ASIC 机器上变得更加困难,因为它们不是大众产品。 这与您可以随处使用并轻松配置的 GPU 系统形成鲜明对比。
GPU 与集群计算
虽然单个 GPU 卡包含数千个内核,这为您连接的任何计算机增加了巨大的功率,但理论上您可以在计算机主板上添加尽可能多的 GPU 卡,从而进一步提高其处理能力。
另一方面,计算机集群是指多台计算机联网在一起以充当一台大型计算机——超级计算机。 网络上的每台计算机称为一个节点,可以有一个多核 CPU,以及板载一个或多个 GPU 卡。
每个集群必须有一个主节点,它是负责管理和调度其工作节点的前端计算机。 它还将包含为其工作节点分配数据和程序以计算和返回结果的软件。
GPU 加速与超线程
CPU 旨在一次处理多个任务,这就是为什么它以非常高的速度运行,在这些多个进程之间调度处理时间。 但是,当它遇到计算密集型函数时,它可能会在循环中花费一段时间,然后再返回其他进程。 这通常会导致计算机普遍变慢,更糟糕的是,系统会完全冻结。
计算机设计人员可以通过使用超线程或 GPU 加速来避免这种可怕的情况。 超线程允许单个 CPU 内核充当两个处理线程。 因此,当一个线程陷入计算密集型循环时,另一个线程仍然可以将系统保持在一起。
现代计算机现在有多个内核,从 2 到 4、8、16、32 等等。 此外,它们具有超线程,因此 2 核 CPU 提供 4 个线程,4 核提供 8 个线程,依此类推。
多核 CPU 的超线程将解决大多数计算问题,防止瓶颈,并通过简单的游戏、音乐制作以及小型图形、视频和机器学习项目提供顶级性能。 但是,当您需要更多功能时,GPU 通常是正确的解决方案。
GPU 或硬件加速是软件应用程序利用 GPU 的并行处理能力来处理大量数据而不会使 CPU 陷入困境的能力。 许多专业应用程序依赖 GPU 加速才能正常运行。 其中包括视频和动画设计/渲染程序、编码器、密码学、大型神经网络等。
GPGPU 编程基础
GPU 的通用编程最初是使用 的DirectX 和 OpenGL的 图书馆。 然而,这些都是为图形开发而设计的,因此您必须将数据重新用于类似图形的模型才能工作。
幸运的是,多年来 GPGPU 取得了重大进展,导致了库、编程语言和框架的出现。 这些框架中最受欢迎的是 Nvidia 的 CUDA。
CUDA 使任何开发人员都可以轻松地深入研究 GPU 编程,而无需了解经典 GPU 编程的细节。 它提供了增强图形以外的开发的功能,许多单元甚至具有机器学习特定的功能。
可用的库还可以轻松地从头开始创建新的 GPU 加速程序,或使预先编写的程序适应并行处理。 您选择正确的库,优化并行循环的代码,重新编译,仅此而已。
CUDA 核心与流处理器
通常,您会遇到这些术语 Cuda 核心 和 流处理器. 这两个术语都只是指 GPU 核心或 算术逻辑单元 GPU的. CUDA Core 是 Nvidia 的专有技术,而 Stream 处理器来自 AMD。
您可能会遇到的另一个术语是流式多处理器或 SM。 这是另一种 Nvidia 技术,最初每个 SM 将 8 个 CUDA 核心分组。 它一次执行 32 个线程扭曲,每个命令使用 4 个时钟周期。 较新的设计现在每个流式多处理器具有 100 多个内核。
顶级 GPU 语言和库
有很多库和语言可以在 Nvidia CUDA 和 AMD 平台上运行。 以下只是一些:
- 英伟达 cuBLAS – CUDA 的基本线性代数子程序
- 神经网络 – 深度神经网络库
- OpenCL的 – 并行编程的开放标准
- OpenMP的 – 对于 AMD GPU
- HIP – C++ 库
- 英伟达 cuRAND - 随机数生成
- 立方傅立叶变换 – 对于快速傅里叶变换
- 英伟达核电站 – 2D 图像和信号处理
- GPU VSIPL – 矢量图像和信号处理
- OpenCV的 – 用于计算机视觉的 GPU 库
- 开放式ACC – 并行开发的语言
- PyCUDA – 用于 CUDA 平台的 Python
- 张量RT – CUDA 的深度学习
- CUDA C++ – CUDA 的 C++ 语言
- CUDA C – CUDA 的 C 语言
- CUDA 语言 – FORTRAN 开发人员的 CUDA
顶级 GPU 集群项目
截至 2022 年 8 月,世界上速度最快的 10 台超级计算机中有 XNUMX 台是 GPU 加速的。 它们也都共享 Linux 操作系统,具体如下:
秩 | 姓名 | 千万亿次 | CPU内核 | GPU核心 | 功率(kW) | 年 |
1. | 边疆 | 1,102 | 591,872 | 8,138,240 | 21,100 | 2022 |
2. | LUMI | 151.90 | 75,264 | 1,034,880 | 2,900 | 2022 |
3. | 首脑会议 | 148.6 | 202,752 | 2,211,840 | 10,096 | 2018 |
4. | 内华达 | 94.64 | 190,080 | 1,382,400 | 7,438 | 2018 |
5. | 珀尔姆特(Perlmutter) | 64.59 | 无 | 无 | 2,589 | 2021 |
6. | 塞勒涅 | 63.46 | 71,680 | 483,840 | 2,646 | 2020 |
7. | 天河2 | 61.445 | 427,008 | 4,554,752 | 18,482 | 2013 |
8. | 阿达斯特拉 | 46.1 | 21,632 | 297,440 | 921 | 2022 |
总结
在深入了解 GPU 计算及其附带的所有内容时,您现在应该已经了解了它的功能和范围。