【计组】GPU--《深入浅出计算机组成原理》(六)

news2025/1/15 22:49:59

​课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 

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

一、GPU和图形渲染

完整的5 个步骤的渲染流程一般也被称为图形流水线(Graphic Pipeline)

1 、顶点处理(Vertex Processing)

构成多边形建模的每一个多边形都有多个顶点(Vertex)。这些顶点都有一个在三维空间里的坐标。在确定当前视角的之后,需要把这些顶点在三维空间里面的位置,转化到屏幕这个二维空间里面。这个转换的操作,就被叫作顶点处理。这种转化都是通过线性代数计算的。建模越精细,需要转换的顶点数量就越多,计算量就越大。而且,这里面每一个顶点位置的转换,互相之间没有依赖,是可以并行独立计算的。

2、图元处理(Primitive Processing)

图元处理就是要把顶点处理完成之后的各个顶点连起来,变成多边形。转化后的顶点,仍然是在一个三维空间里,只是第三维的 Z 轴,是正对屏幕的“深度”。针对这些多边形,需要做一个操作,叫剔除和裁剪(Cull and Clip),也就是把不在屏幕里面,或者一部分不在屏幕里面的内容给去掉,减少接下来流程的工作量。

3、栅格化(Rasterization)

屏幕分辨率是有限的,一般是通过一个个“像素(Pixel)”来显示出内容。做完图元处理的多边形,需要转换成屏幕里面的一个个像素点。这个操作就叫作栅格化。每一个图元都可以并行独立地栅格化。

4、片段处理(Fragment Processing)

计算每一个像素的颜色、透明度等信息,给像素点上色,同样可以每个片段并行、独立进行。

5、像素操作(Pixel Operations)

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

既然图形渲染的流程是固定的,那直接用硬件来处理这部分过程,会比制造有同样计算性能的 CPU 要便宜得多。因为整个计算流程是完全固定的,不需要流水线停顿、乱序执行等等的各类导致 CPU 计算变得复杂的问题。

二、GPU和深度学习

因为要实时计算渲染的像素特别地多,图形加速卡登上了历史的舞台。通过 3dFx 的 Voodoo 或者 NVidia 的 TNT 这样的图形加速卡,CPU 就不需要再去处理一个个像素点的图元处理、栅格化和片段处理这些操作。3D 游戏就是从这个时代发展起来的。

(一)Shader 的诞生和可编程图形处理器

在 Voodoo 和 TNT 显卡的渲染管线里面,没有“顶点处理“这个步骤。在当时,把多边形的顶点转化到屏幕的坐标系是由 CPU 完成的。CPU 的性能越好,能够支持的多边形也就越多,对应的多边形建模的效果自然也就越像真人。而 3D 游戏的多边形性能也受限于CPU 的性能。

1999 年 NVidia 推出的 GeForce 256 显卡,把顶点处理的计算能力,也从 CPU 里挪到了显卡里。整个图形渲染过程都在硬件里面固定的管线完成,局限是只能通过更改配置实现不同的图形渲染效果,如果通过改配置做不到,就没有办法了。

2001 年的 Direct3D 8.0 开始,微软第一次引入了可编程管线(Programable Function Pipeline)的概念,使GPU 具有一定的可编程能力,允许程序员在渲染管线(Graphics Pipeline)的一些特别步骤,能够自己去定义处理数据的算法或者操作。

一开始的可编程管线仅限于顶点处理(Vertex Processing)和片段处理(Fragment Processing)部分。

这些可以编程的接口称为 Shader,中文名称就是着色器。之所以叫“着色器”,是因为一开始这些“可编程”的接口,只能修改顶点处理和片段处理部分的程序逻辑,也就是处理光照、亮度、颜色等。

这个时候的 GPU,有两类 Shader: Vertex Shader Fragment Shader。在进行顶点处理的时候,操作的是多边形的顶点;在片段操作的时候,操作的是屏幕上的像素点。对于顶点的操作,通常比片段要复杂一些。所以一开始,这两类 Shader 都是独立的硬件电路,也各自有独立的编程接口。因为这么做,硬件设计起来更加简单,一块 GPU 上也能容纳下更多的 Shader。

虽然顶点处理和片段处理的具体逻辑不太一样,但里面涉及的指令集可以用同一套。把 Vertex Shader 和 Fragment Shader 分开,虽然可以减少硬件设计的复杂程度,但有一半 Shader 始终没有被使用,也带来了浪费,。在整个渲染管线里,Vertext Shader 运行的时候,Fragment Shader 停在那里什么也没干。Fragment Shader 在运行的时候,Vertext Shader 也停在那里发呆。统一着色器架构(Unified Shader Architecture)就应运而生了。

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

因为 Shader 变成一个“通用”的模块,才有了把 GPU 拿来做各种通用计算的用法,即 GPGPU(General-Purpose Computing on Graphics Processing Units,通用图形处理器)。而正是因为 GPU 可以拿来做各种通用的计算,才有了过去 10 年深度学习的火热。

(二)现代GPU的三个核心创意

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

1、芯片瘦身

现代 CPU 里的晶体管变得越来越多,越来越复杂,其实已经不是用来实现“计算”这个核心功能,而是拿来实现处理乱序执行、进行分支预测,以及我们之后要在存储器讲的高速缓存部分。

而在 GPU 里,这些电路就显得有点多余了,GPU 的整个处理过程是一个流式处理(Stream Processing)的过程。因为没有那么多分支条件,或者复杂的依赖关系,所有可以把这些对应的电路都去掉,只留下取指令、指令译码、ALU 以及执行这些计算需要的寄存器和缓存就好了。

2、多核并行和SIMT

无论是对多边形里的顶点进行处理,还是屏幕里面的每一个像素进行处理,每个点的计算都是独立的,所以,GPU 的运算是天然并行的,简单地添加多核的 GPU,就能做到并行加速。

CPU 里有一种叫作 SIMD 的处理技术,是说,在做向量计算的时候,要执行的指令是一样的,只是同一个指令的数据有所不同而已。

GPU 的渲染管线里,无论是顶点去进行线性变换,还是屏幕上临近像素点的光照和上色,都是在用相同的指令流程进行计算。于是就借鉴了 CPU 里面的 SIMD,用了一种叫作SIMT(Single Instruction,Multiple Threads)的技术。SIMT 比 SIMD 更加灵活。在 SIMD 里面,CPU 一次性取出了固定长度的多个数据,放到寄存器里面,用一个指令去执行。而 SIMT,可以把多条数据,交给不同的线程去处理

各个线程里面执行的指令流程是一样的,但是可能根据数据的不同,走到不同的条件分支。这样,相同的代码和相同的流程,可能执行不同的具体的指令。GPU 设计就可以进一步进化,也就是在取指令和指令译码的阶段,取出的指令可以给到后面多个不同的 ALU 并行进行运算。这样,一个 GPU 的核里,就可以放下更多的 ALU,同时进行更多的并行运算了。

3、GPU里的“超线程”

GPU里没有分支预测的电路。GPU 里的指令,可能会遇到和 CPU 类似的“流水线停顿”(超线程)问题。在 GPU 上,遇到停顿的时候,可以调度一些别的计算任务给当前的 ALU。和超线程一样,既然要调度一个不同的任务过来,就需要针对这个任务,提供更多的执行上下文。所以,一个 Core 里面的执行上下文的数量,需要比 ALU 多

【关于现代 GPU 的工作原理,可以仔细阅读一下 haifux.org 上的这个PPT,里面图文并茂地解释了现代 GPU 的架构设计的思路。】

 课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SREWorks v1.4 版本发布 | 离线安装 前端重构

在 v1.3 版本之后,SREWorks 团队收集了较多的用户反馈,大家普遍对于 SREWorks 的内网离线安装有较大的诉求。于是团队决定进一步增强这部分的安装能力。 前端工程部分 (frontend),为了开发者更加敏捷高效的协作开发,以及便于社区…

web(一)—— HTML基础(web标准、开发工具、标签)

目标能够理解HTML的 基本语法 和标签的关系 能够使用 排版标签 实现网页中标题、段落等效果 能够使用 相对路径 选择不同目录下的文件 能够使用 媒体标签 在网页中显示图片、播放音频和视频 能够使用 链接标签 实现页面跳转功能一、基础认知目标:认识 网页组成 和 五…

vite使用css的各种功能

1.使用公共的变量(:root)定义在root的变量可以进行类的使用 :root { font-size: 160px;--main-bg-color:red } .red{color:var(--main-bg-color) }你看这个hello world变得多大多红 2.vite使用postcss-plugins/console’ 2-1安装:cnpm install postcss-plugins/co…

最大公约数-欧几里得算法

最近在复习数论,欢迎来到数论的起点gcd 最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 欧几里得算法(辗转相除法) 已知两个数a和b,求出两数的最大公约数首先证明: 不妨…

uni-app入门:组件的基本使用

1.组件概念 2.组件分类 2.1 基础组件 2.2 拓展组件 2.3 easycom规范 3.自定义组件以及使用 3.1局部注册 3.2全局注册 1.组件概念首先讲一下什么是组件 官方说法: 组件是视图层的基本组成单元。 组件…

MySQL高级【存储过程】

1:存储过程1.1:介绍存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发 人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过…

玩转系统|Ventoy – 免格式化,超简单的『多合一』系统启动盘制作神器

Ventoy 现在可谓是U 盘启动界的一支独秀,简单来说,Ventoy 是一个制作可启动 U 盘的开源工具。有了 Ventoy 你就无需反复地格式化 U 盘,你的U盘不在局限于绑定某个PE系统,你只需要把 ISO/WIM/IMG/VHD(x)/EFI 等类型的文件拷贝到 U …

风控中的企业利润表的解读

对于中小微企业财务报表数据的三张最重要的报表——资产负债表、利润表、现金流量表,在评估企业的资质能力与风险程度等方面,都发挥着非常重要的作用。作为企业财务数据最基础的三个报表,每一类报表的数据指标信息,都从不同维度客…

用javascript分类刷leetcode18.队列(图文视频讲解)

队列的特点:先进先出(FIFO)队列的时间复杂度:入队和出队O(1),查找O(n)优先队列:priorityQueue,按优先级出队,实现 Heap(Binary,Fibonacci...)js里没有队列,但是可以用数组…

【数据结构】5.4 二叉树的性质和存储结构

二叉树的性质 性质1: 在二叉树的第 i 层上至多有 2 i-1 个结点(i > 1)。 证明:利用归纳法证明此性质。 第 i 层上至少也应该有 1 个结点,如果是 0 个结点的话那就没有这一层了。 性质2: 深度为 k &a…

java static 关键字

目录 一、前言 二、用途和效果 2.1. static修饰的范围 2.2.执行特点 2.3.static关键字的用途 三. 注意 static关键字误区: 一、前言 在我们学习java中会碰到许多关键字 , 例如: static、final、 transient、instanceof、break 、continue 等其他的关键字,今天…

CBM|用于lncRNA-疾病关联预测的数据资源和计算方法(综述)

CBM|用于lncRNA-疾病关联预测的数据资源和计算方法(综述) 最近搞了个公众号《AI and Bioinformatics》介绍应用于生物信息学的人工智能算法和研究进展,以及网络表示学习算法研究,欢迎向本公众号投稿文献解读类原创文章&#xff0…

11_7、Java集合之Collections工具类的使用

一、作用是操作Collection和Map的集合操作类。二、常用方法1、排序操作:(均为static方法)reverse(List):反转 List 中元素的顺序shuffle(List):对 List 集合元素进行随机排序sort(List):根据元素的自然顺序…

20.04安装carla0.9.13记录

已经多次在不同版本的系统18.04、20.04安装carla不同源码版本0.9.11,0.9.12,0.9.13了,发现每次安装总是会遇到那么几个问题,现在新配了主机又要重新安装carla,这次准备详细的记录一下,方便未来安装时又遇到…

共享单车蓝牙锁方案phy6222系列蓝牙芯片

公共交通工具的"最后一公里"是城市居民出行采用公共交通出行的主要障碍,也是建设绿色城市、低碳城市过程中面临的主要挑战。随着科技的发展,物联网领域市场的不断开拓BLE协议在共享交通工具上打开了突破口,目前已广泛应用及遍布我们…

更换服务器的笔记

文章目录背景问题汇总服务器 git 的建立Q: 启动的服务连不上背景 最近阿里云的服务器到期了,但是续费实在是太贵了 之前是嫌麻烦,然后续费还挺便宜的,所以就没折腾去换服务器 这回续费一个月就小一百, 吃不消了,不得…

【论文简述】DPSNet End-to-end Deep Plane Sweep Stereo(ICLR 2019)

一、论文简述 1. 第一作者:Sunghoon Im 2. 发表年份:2019 3. 发表期刊:ICLR 4. 关键词:MVS、深度学习、端到端、代价体、代价聚合 5. 探索动机:双目立体匹配无法扩展到多视图,平面扫描方法无法进行端…

基于python pyotrch开发的垃圾分类程序,含数据集,基于深度学习的垃圾分类程序

基于python的垃圾分类程序,提供数据集(pytorch开发) 完整代码下载地址:基于python pyotrch开发的垃圾分类程序,含数据集 垃圾分类是目前社会的一个热点,分类的任务是计算机视觉任务中的基础任务&#xf…

Qt进度条详解以及format显示格式

进度条的步进值 设置好进度条的最大值和最小值,进度条将会显示完成的步进值占总的步进值的百分比,百分比的计算公式为:百分比 (value() - minimum()) / (maximum() - minimum()) 部分函数含义 QProgressBar:横向或纵向显示进度的…

前端必备:五大css自动化生成网站(稀有级别!)

粉丝朋友们大家好,我是你们的 csdn的博主:lqj_本人 哔哩哔哩:小淼前端 另外,大家也可以关注我的哔哩哔哩账号,我会不定时的发布一些有关于全栈云开发以及前端开发的详解视频源码 1.微信小程序腾讯云开发之学生端收集数…