美文网首页
计算机组成原理--GPU

计算机组成原理--GPU

作者: kirito_song | 来源:发表于2020-01-07 17:35 被阅读0次

算是读书笔记吧

极客时间--深入浅出计算机组成原理


GPU 的历史进程

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

90 年代中期,随着个人电脑的性能越来越好,PC 游戏玩家们开始有了“3D 显卡”的需求。
那个时代之前的 3D 游戏,其实都是伪 3D。比如,大神卡马克开发的著名Wolfenstein 3D(德军总部 3D),从不同视角看到的是 8 幅不同的贴图,实际上并不是通过图形学绘制渲染出来的多边形。
“古墓丽影”“最终幻想 7”,这些游戏都是在那个时代诞生的。
当时,很多国内的计算机爱好者梦寐以求的,是一块 Voodoo FX 的显卡。

三维图像的渲染流程

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

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

  • 顶点处理

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

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

  • 图元处理

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

  • 栅格化

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

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

  • 片段处理

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

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

  • 像素操作

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

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


图形流水线

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


可编程管线

这个编程能力不是像 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 以及执行这些计算需要的寄存器和缓存就好了。

多核并行和 SIMT

相当于CPU的多核以及SIMT

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

在做向量计算的时候,我们要执行的指令是一样的,只是同一个指令的数据有所不同而已
在 SIMD 里面,CPU 一次性取出了固定长度的多个数据,放到寄存器里面,用一个指令去执行。
而 SIMT由于任务天然并行,可以把多条数据,交给不同的线程去处理。这样,我们的一个 GPU 的核里,就可以放下更多的 ALU,同时进行更多的并行运算了。

GPU 里的“超线程”

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

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


深度学习中的GPU

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

1. GPU 是一个可以进行“通用计算”的框架,我们可以通过编程,在 GPU 上实现不同的算法。
2. 现在的深度学习计算,都是超大的向量和矩阵,海量的训练样本的计算。整个计算过程中,没有复杂的逻辑和分支,非常适合 GPU 这样并行、计算能力强的架构。

在实际进行深度学习的过程中,用 GPU 所花费的时间,往往能减少一到两个数量级。
而大型的深度学习模型计算,往往又是多卡并行,要花上几天乃至几个月。这个时候,用 CPU 显然就不合适了。

相关文章

  • 计算机组成原理--GPU

    算是读书笔记吧 极客时间--深入浅出计算机组成原理 GPU 的历史进程 GPU 是随着我们开始在计算机里面需要渲染...

  • GPU 和 TPU

    来自深入浅出计算机组成原理 计算机组成中,除了最核心的处理器CPU,被称之为图像处理器的GPU也是很重要的一个处理...

  • 计算机组成原理

    计算机组成原理重点知识复习提纲(参考) 计算机组成原理

  • 2019-06-20

    复习计算机组成原理。

  • 第一章 概述

    计算机组成原理概述

  • 2019-06-19

    今天复习计算机组成原理。

  • 2019-06-17

    今天复习计算机组成原理。

  • 2019-06-18

    今天复习计算机组成原理。

  • 2020快乐打卡

    上个月参加了一个21天打开活动,系统的学习了一下计算机组成原理,写下了《计算机组成原理——学习笔记》、《计算机组成...

  • 计算机组成原理与体系结构笔记(2)数制与编码

    计算机组成原理与体系结构笔记(1)计算机发展历程计算机组成原理与体系结构笔记(3.1)无符号整数的表示 计算机系统...

网友评论

      本文标题:计算机组成原理--GPU

      本文链接:https://www.haomeiwen.com/subject/vgococtx.html