GPU大百科全书第六章 谁也离不开的缓冲 - 图文(5)

2019-03-28 23:06

你能数清楚这里有多少个cache么……

可怜的程序员们以及更加可怜的用户们,难道就只能接受这么乱下去的现状了么?

产品:GeForce GTX560Ti nVIDIA 显示芯片 只有统一的路才对大家的胃口

● 只有统一的路才对大家的胃口

首先意识到并开始尝试解决问题的是NVIDIA。在Tesla构架之后,NVIDIA为我们带来了支持DirectX 11的Fermi构架。Fermi构架在缓冲方面最显著的特色,在于引入了统一的unified cache。

Fermi构架采用大并行度的GPC分块设计,每个GPC内部分为4组SM单元,每个SM单元拥有完整支持读写操作的L1 cache体系。该L1 cache体系可以在16K shared memory/48K L1 cache以及48K shared memory/16K L1 cache之间进行切换,不仅能够满足DirectX 11要求的32K shared的最低限度,更为传统的DirectX 10以及特种程序的需要提供了支持。而在整个GPC结构的外围,NVIDIA配置了768K的L2 cache,不仅能够充当L1的扩展,将其与显存联系起来,更可以同时为TMU提供Texture cache服务。除此之外,新的cache体系还可以直接充当几乎所有寄存器的溢出缓冲。

Fermi构架存储体系

Fermi中unified cache的引入,为人们展示了一种很好的解决缓冲资源各自为战现状的途径。与CPU一脉相承的统一多级cache让大多数单元从同一个缓冲体系中获益,ALU也好TMU也罢,想要缓冲的时候直接访问同一个cache就行了。这种做法等效的同时提升了大多数单元的可用缓冲资源水平,减少了register溢出导致的灾难性后果,最终提高了整个体系中各单元的单位周期复用率。

unified cache是Fermi构架的重大革新

当然,这世界上没有一蹴而就的完美,现阶段Fermi cache体系也存在着美中不足。为了照顾传统的shared应用,Fermi的L1体系并未完全unified化,这不仅给驱动控制添加了难度,也为cache命中算法的开发制造了不小麻烦。尽管如此,引入unified cache依旧让我们看到了巨大的好处和美好的未来。有介于此,NVIDIA决定在下一代的Kepler构架中继续强化cache也就变得顺理成章了。

Fermi的L1体系为照顾shared而没有完全unified化

在unified cache的引入中,受益最大的可以说是寄存器。接下来我们就来看看缓存体系的最后也是最快的一部分,究竟是怎样为GPU运行提供帮助并从unified cache中获益的吧。

产品:GeForce GTX560Ti nVIDIA 显示芯片 欲求不满的寄存器

● 欲求不满的寄存器

寄存器同显存和cache一样,都是发源于CPU的重要缓冲组成部分。长期以来,寄存器都伴随在运算单元旁边,以最及时的延迟和最大的带宽为运算单元提供着指令寄存空间(IR)、程序计数缓冲(PC)以及累加器(ACC)等多方面的服务。

常规6bit指令寄存器结构

寄存器可以为运算器提供最快速的临近临时存储,让它们释放结果、挂起数据或者弯成回溯之类的事情。几乎每一个运算单元的每一次动作到有寄存器参与的身影。由于通常拥有最高的运行速度以及0t的延迟,GPU常用的32bit寄存器相当耗费晶体管资源,这让它们的身价更加倍增。由于无法随心所欲的配置大量寄存器,每一个运算单

元能够分配到的寄存器资源都非常的少。以G80为例,每个SM包含8个SP单元,而寄存器总量仅为32K,每个ALU仅能分到4K 32bit寄存器资源。而R600极其系列衍生构架则更是少到了平均3.3K/ALU的水平,直到Cayman构架才补足到了4K。

NVIDIA GPU的寄存器资源自G80以来一直相对充足 对于ALU来说,条件允许的前提下对寄存器的需求近乎是无限的,这种需索无度与寄存器相对稀少的现实总量形成了鲜明的对比。我们在GPU大百科番外篇对NV3X构架的分析中可以看出,寄存器无节制溢出的后果是可怕的,因此程序员们除了小心谨慎的处理自己手头的程序需求,尽量让ALU在现有资源总量允许的前提下对寄存器进行使用之外,就只有祈祷硬件准备了充分的寄存器溢出缓冲以备不时之需了。

因为寄存器问题大败的NV30构架

cache是很好的寄存器缓冲溢出,虽然它的速度和延迟相对于寄存器来说差了不少,但依旧可以在编程环境处理得当的前提下发挥很好的延迟掩盖作用。而unified cache在GPU中出现之前,GPU中大大小小的各种“cache”并不能通用,因此也就不能随心所欲的发挥应有的作用了。cache之外,接下来可供选择的途径就只剩显存一途了,显存的空间对于ALU来说虽然可以大到近乎无限,但显存的低带宽和高延迟让其在相当长的一段时间内都不具备参与核心缓冲的能力。最早使用显存来充当寄存器溢出缓冲的NV30带来了几乎是灾难性的表现,直到与MC配合之后带宽突破100G甚至接近200G的GDDR5出现之后,显存才具备了充当寄存器溢出缓冲的条件。而此时Fermi中unified cache的引入,也适时的将寄存器和显存这对速度差异仍旧巨大的缓冲连接在了一起。


GPU大百科全书第六章 谁也离不开的缓冲 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:贵州省贵阳十二中2010届高三下学期第三次模拟考试(理综)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: