计算机组成原理进程与线程,计算机组成原理--GPU

a324fde44eb8

算是读书笔记吧

GPU 的历史进程

GPU 是随着我们开始在计算机里面需要渲染三维图形的出现,而发展起来的设备

90 年代中期,随着个人电脑的性能越来越好,PC 游戏玩家们开始有了“3D 显卡”的需求。

那个时代之前的 3D 游戏,其实都是伪 3D。比如,大神卡马克开发的著名Wolfenstein 3D(德军总部 3D),从不同视角看到的是 8 幅不同的贴图,实际上并不是通过图形学绘制渲染出来的多边形。

“古墓丽影”“最终幻想 7”,这些游戏都是在那个时代诞生的。

当时,很多国内的计算机爱好者梦寐以求的,是一块 Voodoo FX 的显卡。

三维图像的渲染流程

你在玩的各种游戏,里面的人物的脸,并不是那个相机或者摄像头拍出来的,而是通过多边形建模(Polygon Modeling)创建出来的。

a324fde44eb8

图像进行实时渲染的过程,可以被分解成下面5 个步骤:顶点处理(Vertex Processing)、图元处理(Primitive Processing)、栅格化(Rasterization)、片段处理(Fragment Processing)、像素操作(Pixel Operations)。

顶点处理

把顶点在三维空间里面的位置,转化到屏幕二维空间里面

每一个顶点位置的转换,互相之间没有依赖,是可以并行独立计算的。

a324fde44eb8

图元处理

将转化后的顶点连起来,剔除不在屏幕中的部分

a324fde44eb8

栅格化

把处理好的多边形,转化成一个个像素点

栅格化操作,和顶点处理是一样的,每一个图元都可以并行独立地栅格化。

a324fde44eb8

片段处理

计算每一个像素的颜色、透明度等信息,给像素点上色

这步操作,同样也可以每个片段并行、独立进行。

a324fde44eb8

像素操作

把不同的多边形的像素点“混合(Blending)”到一起。

处理多边形间的遮挡,透明关系。造成的颜色变化。

a324fde44eb8

图形流水线

上述顶点处理、图元处理、 栅格化、片段处理,以及最后的像素操作。这一连串的过程,也被称之为图形流水线或者渲染管线。

可编程管线

这个编程能力不是像 CPU 那样,有非常通用的指令,可以进行任何你希望的操作,而是在整个的渲染管线(Graphics Pipeline)的一些特别步骤,能够自己去定义处理数据的算法或者操作。

早期的GPU整个图形渲染过程都是在硬件里面固定的管线来完成的。

程序员们在加速卡上能做的事情呢,只有改配置来实现不同的图形渲染效果。如果通过改配置做不到,我们就没有什么办法了。

着色器

只能修改顶点处理和片段处理部分的程序逻辑。主要是光照、亮度、颜色等等的处理。

内部有两类Shader,分别用来进行顶点处理(多边形的顶点)和片段操作(像素点)。

统一着色器架构

GPU内部使用同一的通用Shader进行工作,同一调配。

虽然我们在顶点处理和片段处理上的具体逻辑不太一样,但是里面用到的指令集可以用同一套。

那不如就在 GPU 里面放很多个一样的 Shader 硬件电路,然后通过统一调度,把顶点处理、图元处理、片段处理这些任务,都交给这些 Shader 去处理,让整个 GPU 尽可能地忙起来。

GPGPU(General-Purpose Computing on Graphics Processing Units,通用图形处理器)

正因为 Shader 变成一个“通用”的模块,才有了把 GPU 拿来做各种通用计算的用法。也就是GPGPU。

现代 GPU 的三个核心创意

为什么现代的 GPU 在图形渲染、深度学习上能那么快。

芯片瘦身

剔除CPU上占据大量资源的各种预测以及IO加速逻辑。

GPU 的整个处理过程是一个流式处理(Stream Processing)的过程,并没有那么多的分支和依赖。

处理乱序执行、进行分支预测,以及高速缓存相关的电路都可以去掉,只保留必要的下取指令、指令译码、ALU 以及执行这些计算需要的寄存器和缓存就好了。

a324fde44eb8

多核并行和 SIMT

相当于CPU的多核以及SIMT

和 CPU 不同的是,我们不需要单独去实现什么多线程的计算。因为 GPU 的运算是天然并行的。

a324fde44eb8

在做向量计算的时候,我们要执行的指令是一样的,只是同一个指令的数据有所不同而已

在 SIMD 里面,CPU 一次性取出了固定长度的多个数据,放到寄存器里面,用一个指令去执行。

而 SIMT由于任务天然并行,可以把多条数据,交给不同的线程去处理。这样,我们的一个 GPU 的核里,就可以放下更多的 ALU,同时进行更多的并行运算了。

a324fde44eb8

GPU 里的“超线程”

当流水线停顿时、调度一些别的计算任务给当前的 ALU

和超线程一样,既然要调度一个不同的任务过来,我们就需要针对这个任务,提供更多的执行上下文。所以,一个 Core 里面的执行上下文的数量,需要比 ALU 多。

a324fde44eb8

深度学习中的GPU

随着 GPGPU 的推出,GPU 已经不只是一个图形计算设备,更是一个用来做数值计算的好工具了。同样,也是因为 GPU 的快速发展,带来了过去 10 年深度学习的繁荣。

1. GPU 是一个可以进行“通用计算”的框架,我们可以通过编程,在 GPU 上实现不同的算法。

2. 现在的深度学习计算,都是超大的向量和矩阵,海量的训练样本的计算。整个计算过程中,没有复杂的逻辑和分支,非常适合 GPU 这样并行、计算能力强的架构。

在实际进行深度学习的过程中,用 GPU 所花费的时间,往往能减少一到两个数量级。

而大型的深度学习模型计算,往往又是多卡并行,要花上几天乃至几个月。这个时候,用 CPU 显然就不合适了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值