GPU工作原理

学习过程中 有很多地方会使用到GPU来进行运算,如训练网络等。了解GPU的工作原理是非常有必要并且很有价值。

GPU和CPU的区别

比喻

CPU

CPU就像一位经验丰富的教授,不仅会各种高深的计算,还能处理复杂的逻辑。虽然教授贵,但一个教授的算力能顶许多普通计算力,适合负责一些复杂、精细的任务。

但是教授人少,因此不适合去做一本小学口算题。

GPU

GPU更像是由很多小学生组成的团队,虽然每个人只能完成简单的计算,但可以通过人海战术完成大量重复的任务。

处理一本小学口算题,让一群小学生分工合作,每人算一道题,这样既快又高效。

适用场景

CPU

CPU则适合那些步骤紧密关联、必须按顺序执行的计算任务。常用于个人电脑、设备控制等需要精确顺序的任务。

GPU

GPU擅长处理大量彼此独立、无需依赖前后顺序的计算任务。像游戏、挖矿和图形处理等,都是将一个大任务分解成无数个小任务,每个小任务可以单独完成。

计算能力

剩下很多区别不是本文的重点,就不赘述了

GPU评价指标

FLOPS

FLOPS"意为每秒浮点运算次数。它是衡量计算机系统或处理器性能的一种常见指标,特别是在科学计算、工程领域和高性能计算中。例如,一个处理器的性能为 1 TFLOPS,意味着它可以每秒执行 1 万亿次浮点运算。FLOPS、TOPS和FLOPs的区别_tops flops-优快云博客

MACs

Multiply–Accumulate Operations,乘加累积操作。1MACs包含一个乘法操作与一个加法操作(Ax+b),大约等于2FLOPs。

throughput and latency

如何理解Latency和Throughput: 吞吐量和延迟 - Binyao - 博客园

优化延迟:

  • 通信时延对 MACs 的影响 >> 优化带宽
  • Batch Size 大小与内存大小 >> 多级缓存设计

矩阵乘

看我这篇博客详解矩阵乘优化方法-优快云博客

GPU工作原理

GPU的计算能力

以A100来举例说明下

数量名称           类型
约7000FP32CUDA Core
约3500FP64CUDA Core
约7000INT32CUDA Core
432Tensor Core
13824Thread

可以看出 A100的并行计算能力十分强大,相较于CPU来说

GPU缓存机制

分为2类

芯片上:L1cache/Shared Memory、L2cache

芯片外:HBM Memory(显存)

最好让计算单元从L1cache读取数据

下表为计算单元读取数据的速度

 以A100举例

有128个SM,每个SM包含1个L1cache和share momary

外部有两个L2cache

在外面有HBM

下面有NVlink可以多卡协同

PCIe与内存传输数据

A100显卡架构

GPU如何管理线程

CUDA:人工智能编程 | 谭升的博客

主设概念: CUDA引入主机端(host)和设备(device)概念。CUDA 程序中既包含host程序,又包含device程序。

互相通信: host与device之间可以进行通信,这样它们之间可以进行数据拷贝。

CUDA 执行流程中最重要的一个过程是调用CUDA的核函数来执行并行计算,kernel是CUDA中一个重要的概念。

在 CUDA 程序构架中,Host 代码部分在CPU上执行,是普通C代码;

当遇到数据并行处理的部分,CUDA 就会将程序编译成GPU能执行的程序,并传送到GPU,这个程序在CUDA里称做核(kernel)。

CUDA Kernel函数:是数据并行处理函数(核函数),在GPU上执行时,一个Kernel对应一个Grid,基于GPU逻辑架构分发成众多thread去并行执行。kernel 用 __global__符号声明,在调用时需要用 <<<grid, block>>> 来指定kernel要执行及结构。

下图是Cuda的编程结构

thread

在GPU编程中,线程是最基本的执行单元。一个GPU程序会同时启动成千上万个线程来执行任务

warp

GPU 的 每一行由1个控制单元加上若干计算单元所组成,这些所有的计算单元执行的控制指令是一个 。这其实就是个非常典型的 "单指令多线程机制(SIMT)" 

warp是硬件级别上的调度单位的最小单元,一个 warp 包含32个并行 thread,这些 thread 以不同数据资源执行相同的指令。

Block
  • 块是线程的集合,它们被组织成一个工作单元,可以共享内存和同步。
  • 在GPU编程中,通常会将线程划分成若干个块,以便更有效地管理和协调线程的执行。
  • 块内的线程可以进行协作和通信,通常通过共享内存来提高性能。
  • Block 间并行执行,并且无法通信,也没有执行顺序

Grid

多个block则会再构成grid。kernel 在 device 上执行时,实际上是启动很多线程,一个kernel 所启动的所有线程称为一个网格(grid)。同一个网格上的线程共享相同的全局内存空间。

当一个 kernel 被执行时,grid 中的线程块被分配到 SM (多核处理器) 上,一个线程块的 thread 只能在一个SM 上调度,SM 一般可以调度多个线程块,大量的 thread 可能被分到不同的 SM 上。每个 thread 拥有它自己的程序计数器和状态寄存器,并且用该线程自己的数据执行指令。

SM

被分成4个处理单元,

每个处理单元有

1warp Scheduler:调度warp

16个int32 fp32 

8个fp64

1个tensor core

ld/st单元:用来传输数据

SM内部共享1个L1Cache

Tensor Core

不同于nvidia以往的cuda core(全浮点型),Tensor core是近几年推出来的、混合精度的、将累加和累乘放在一起的计算硬件;可以在一个时钟周期内做完矩阵乘法和矩阵加法。

混合精度 是指在底层硬件算子层面,使用半精度(FP16)作为输入和输出,使用全精度(FP32)进行中间结果计算从而不损失过多精度的技术。 

这个底层硬件层面其实指的就是Tensor Core,所以 GPU 上有 Tensor Core 是使用混合精度训练加速的必要条件。

参考

一文理清GPU工作原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值