Chapter 23 Graphics Hardware 图形硬件(下)

23.10.3 Case Study:AMD GCN Vega
AMD的Graphics Core Next(GCN)架构在AMD的多款显卡产品上使用,并且还应用在Xbox One和PLAYSTATION 4上。这里,我们会介绍GCN Vega架构的一些基础的元素,其对于在主机平台上使用的架构来说是一场革命。

GCN架构的一个核心模块就是计算单元compute unit(CU),在Figure 23.28里展示。CU有4个SIMD unit,每个有16个SIMD lanes,即是16个ALU(使用Section 23.2里的术语)。每个SIMD unit有64个执行命令的指令,每个都叫做一个wavefront。一个每个时钟周期里,每个SIMD可以执行一次单精度浮点数运算指令。因为这个架构会在每个SIMD unit上处理一个64个进程组成的wavefront,这个过程全部执行完需要4个时钟周期。注意,一个CU可以同时运行来自于不同kernel的代码。因为每个SIMD有16个lane,并且每个时钟周期可以执行一个指令,所以整个CU的峰值是,(每个CU 4个SIMD unit)X(每个unit 16个SIMD lane)=每个时钟周期64个单精度浮点数操作。相比于单精度浮点数指令,CU可以执行2倍的半精度浮点数(16位浮点数),这对于精度要求不高的情况很有用。注意2个16位的浮点值会被打包进一个32位的浮点寄存器。每个SIMD unit有一个64kB大小的寄存器文件,等于65536/(4*64)=256个寄存器每个thread,由于单精度浮点数用4个bytes,所以wavefront有64个进程。ALU有四个硬件管线阶段。

每个CU有一个指令寄存器(图里没显示),在四个SIMD unit之间共享。需要处理的指令会送往SIMD unit的指令缓冲里instruction buffer(IB)。每个IB有容纳10个wavefront的存储空间,这样可以在SIMD上进行切换来隐藏延迟。这意味着,CU可以处理40个wavefronts。这等同于40*64=2560个进程。FIgure 23.28里的CU 调度器因此可以同时处理2560个进程,他的任务就分发任务给CU不同的单元。每个时钟周期,所有的当前CU上的wavefront会进入指令选择,最多一个指令会被分配给执行端口。CU的执行端口包括了分支branch,标量scalar/向量vector ALU,scalar/vector memory,本地数据共享local data share,全局数据共享global data shader或者输出export,以及特殊指令,就是说每个执行端口几乎只会匹配一个CU的unit。

标量单元scalar unit是一个64位的ALU,由SIMD unit之间共享。它拥有自己的标量寄存器文件和一个标量数据缓冲(未展示)。标量寄存器文件对每个SIMD unit有800个32位寄存器,即是80044=12.5kB。执行过程是和wavefront紧密绑定的。因为它需要4个时钟周期来完全的分配指令给SIMD unit,所以scalar unit只能每4个时钟周期才能服务一个特定的SIMD unit。Scalar unit处理控制流control flow,指针运算pointer arithmetic,和其他的可以在一个warp里的进程之间共享的计算。条件和非条件的分支命令从scalar unit发出,来在branch和message unit上执行。每个SIMD unit有一个单独的48位程序计数器program counter(PC),在lane之间共享。这是够用的,因为所有的lane都在执行同样的命令。对于完成的分支,程序计数器会更新。这个unit可以发出的信息包括debug messages,特殊的图像同步信息special graphics synchronization message,和CPU中断CPU interrupts。

Vega 10架构在Figure 23.29里显示。图片的顶部包括了一个图像指令处理器graphics command processor,两个硬件调度器hardware schedulers(HWSs)和八个异步计算引擎asynchronous compute engines(ACES)。GPC的任务是把图像处理任务分派给图像管线和GPU的compute engine。HWSs的的缓冲对象按照顺序处理,尽可能快的分配给ACEs。一个ACE的任务是向compute engine分配任务。还有2个DMA engines,可以处理复制任务(图里未展现)。GPC,ACEs,和DMA engine可以并行工作并提交作业给GPU,这样提高了利用率,因为不同队列的任务可以交错穿插。任何队列的任务都可以发出,不需要等待其他的作业完成,这意味着独立的任务可以同时在compute engine上执行。ACEs可以通过缓存或者内存同步。他们可以一起支持task graph,所以一个ACEs的任务可以依赖于另一个ACEs的任务,或者图形管线上其他的任务。推荐使用分的更小的计算或者拷贝任务,来进行交错穿插在重度的图形任务之间。


Figure 23.29. 一个使用64个CU构建的Vega 10 GPU。每个CU包含的硬件部分在Figure 23.28里展示。

如Figure 23.29可见,有4个图形管线和4个compute engine。每个compute engine有16个CU,共计64个CU。这个图形管线有2个块,即是一个geometry engine和一个draw-stream binning rasterizer(DSBR)。Geometry engine包括了一个几何装配器geometry assembler,曲面细分单元tessellation unit,和一个顶点装配器vertex assembler。另外,还支持一种新的图元着色器primitive shader。Primitive shader的思想是支持更灵活的几何处理和更快的图元裁剪。DSBR结合了sort-middle和sort-last架构的优点,也是分块缓存tiled caching(23.10.2)的目标。图片分割为屏幕空间里的tiles,在几何处理完成之后,每个图元被指定给它所覆盖的所有tile。在一个tile的光栅化过程中,所有数据(比如tile buffer)都被存在L2 cache里,这样提升了性能。像素着色会推迟到tile上所有的几何处理都结束之后。因此,一个z-prepass会在默认执行,像素只会被着色一次。延迟渲染是可以开关的,即对于半透明的几何体会被关上。

为了处理深度,模板值,和颜色缓冲,GCN架构有一个block叫做颜色和深度block(CDB)。他们处理颜色,深度和模板值的读写,另外还有颜色的混合。一个CDB可以使用Section 23.5的通用办法来压缩颜色缓冲。一个差值压缩技术是这么用的:一个像素的颜色值是未压缩的状态,剩下颜色被编码为它的相对值。为了提升效率,tile的尺寸可以通过访问模式动态的选择。对于一个原始256bytes来存储的tile,最高的压缩率是8:1,即是压缩为32bytes。一个压缩的颜色缓冲可以在随后的pass里被当做贴图使用,texture unit会相应的解压和压缩tile,这个操作节省了带宽。

光栅器可以在每个时钟周期光栅化4个图元。CDB和图形管线相连,compute engine可以在每个时钟周期写16个像素。就是说,低于16个像素的三角形会降低效率。光栅器也会处理粗的深度测试(HiZ)和层级的模板值测试。HiZ的缓冲叫做HTILE,可以由开发者来变成,例如提供遮挡信息给GPU。

Vega的cache层级在Figure 23.30里显示。在层级的顶部(图片的最右边),可以看到寄存器,随后是L1和L2缓存。然后,是高带宽内存2 high-bandwidth memory 2(HBM2),这个位于显卡内部,最后系统的内存位于CPU一侧。Vega的一个新特性是高带宽缓存控制器High-Bandwidth Cache Controller(HBCC),在Figure 23.29底部显示。它可以让显存用起来显示最后一层的缓存last-level cache。这意味着如果一次内存访问请求发生了,并且对应的内容不在显存里,即,HBM2,那么HBCC将会自动的通过PCIe总线来获取相关的系统内存的页,并放入显存中。最不常用的页会被置换出显存里,通过一个队列的方式。在HBM2和系统内存之间共享的内存池叫做HBCC内存片段(HMS)。所有的图形模块也通过L2缓存来访问内存,这和之前的架构不同。这个架构也支持虚拟内存(Section 19.10.1)。


Figure 23.30. Vega架构的缓存层级结构。

要注意所有在on-chip的模块,例如HBCC,XDMA(CrossFire DMA),PCI express,显示引擎display engines,和多媒体引擎multimedia engines,通过一个叫做Infinity Fabric(IF)的内部连接来通讯。AMD的CPU也可以和IF连接。Infinity Fabric可以通过芯片模具来连接各模块。IF之间也是相连的,意味着所有的模块看到的内存里内容的视图都是相同的。

芯片基础的时钟频率是1677 MHz,即是说,最高的计算能力是



FMA和TFLOPS的对应都和公式23.16一样。这个架构是非常灵活的,可拓展的,所以我们也期待会有进一步的配置。

23.11 Ray Tracing Architectures
这部分的知识太过老旧,没有意义。如果有一天,还能相遇,你还想知道,我便再讲与你听罢。

谨以此文献给我曾经的,永远的,可爱的朋友zmj。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容