GPU 并行计算入门

文章目录

    • 0. 前言
    • 1. CPU vs GPU
    • 2. 并行计算简介
    • 3. CUDA 简介
    • 4. CUDA 的处理流程

0. 前言

在没有GPU之前,基本上所有的任务都是交给CPU来做的。有GPU之后,二者就进行了分工,CPU负责逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务(大规模计算任务)。

GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以看成是CPU的协处理器,因此当我们在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。

NVIDIA 和 AMD 是主要的独立显卡制造商,其显卡分别称为N卡和A卡;N卡主要⽀持CUDA编程,A卡主要⽀持OpenCL编程。NVIDIA 公司是GPU界的⻰头,其GPU产品占市场份额的80%左右。

1. CPU vs GPU

本节推荐看博客 CPU和GPU到底有什么区别?

CPU 和 GPU 的架构如下图所示:

GPU 并行计算入门_第1张图片
可以形象的理解为:

CPU 有25%的ALU(运算单元)、有25%的Control(控制单元)、50%的Cache(缓存单元)

GPU 有 90%的ALU(运算单元),5%的Control(控制单元)、5%的Cache(缓存单元)

因此二者的架构不同,导致了不同的特点:

CPU: 强控制弱计算,更多资源⽤于缓存
GPU: 强计算弱控制,更多资源⽤于数据计算

因此 GPU 在设计时更多的晶体管用于数据处理,而不是数据缓存和流量控制,,可以高度实现并行计算。

此外,GPU的优势还有:

  • 专注于浮点运算 / 性价比高:GPU在设计时避免或减弱了类似分⽀处理、逻辑控制等与浮点计算⽆关的复杂功能,专注于浮点计算,因此在制造成本上有着巨⼤优势。
  • 绿⾊功耗⽐:GPU集成了⼤量的轻量级微处理单元,时钟频率有限,使得运算产⽣的功耗极⼩。

NVIDIA公司有三个主流的GPU产品系列:

  1. Teals 系列:专为⾼性能计算设计、价格昂贵;如著名的深度学习训练神器 A100、V100、P100 都是 Teals 系列
  2. Geforce 系列:专注游戏、娱乐,当然也可以用于深度学习计算;如 Geforce RTX 3060、Geforce RTX 4090 等
  3. Quadro 系列:专为图形图像处理⽽⽣,我个人没用过,不做介绍。

2. 并行计算简介

并⾏计算是指使用多个处理器共同解决同⼀个问题,其中每个处理器承担计算任务中的⼀部分内容。

并行计算包括时间并行(流水线式独立工作)和空间并行(矩阵分块计算),需要保证负载均衡和通信量小(CPU和GPU之间的通讯)。

并行计算的前提是应⽤问题必须具有并⾏度,即可以分解为多个可以并⾏执⾏的⼦任务

单独的⾼性能计算节点主要分为:

  1. 同构节点:仅采⽤相同厂家的硬件,如 CPU,Intel Xeon CPU、AMD Opteron CPU
  2. 异构节点:使用不同厂家的硬件,分为主机端和设备端,分别注重逻辑运算和浮点计算。一般的并行计算都是异构节点。

3. CUDA 简介

CUDA (Compute Unified Device Architecture),通用并行计算架构,是一种运算平台。CUDA 由 NVIDIA 公司在 2007 年发布,⽆需图形学API,采⽤类C语⾔,开发简单。

CUDA 是一种专⽤异构编程模型,CUDA是基于C语⾔的扩展,例如扩展了⼀些限定符 device、shared等,从3.0开始也⽀持 C++ 编程。

基于 CUDA 开发的程序代码在实际执⾏中分为两种:

  • 运⾏在CPU上的宿主代码(Host Code)
  • 运⾏在GPU上的设备代码(Device Code)

运⾏在 GPU 上的 CUDA 并⾏计算函数称为 kernel函数(内核函数),⼀个完整的 CUDA 程序是由⼀系列的设备端 kernel 函数并⾏部分和主机端的串⾏处理部分共同组成的。

kernel 在GPU上以多个线程的⽅式被执⾏,我们学的 CUDA 编程主要就是学怎么写 kernel 函数

4. CUDA 的处理流程

CUDA 的处理流程为:

  1. 从系统内存中复制数据到 GPU 内存
  2. CPU 指令驱动 GPU 运⾏
  3. GPU 的每个 CUDA 核⼼并⾏处理
  4. GPU 将CUDA处理的最终结果返回到系统的内存

CUDA 程序执⾏的基本流程为:

  1. 分配内存空间和显存空间
  2. 初始化内存空间
  3. 将要计算的数据从 Host 内存上复制到 GPU 内存上
  4. 把自己的程序写成 kernel 函数,执⾏ kernel 计算
  5. 将计算后 GPU 内存上的数据复制到 Host 内存上
  6. 处理复制到 Host 内存上的数据

你可能感兴趣的:(CUDA编程,人工智能)