显卡 频道

重磅来袭 NV Maxwell架构显卡首发评测!

Fermi架构解析回顾

1、SP、SM

    从高层次上看,Fermi和GT200结构形似,并无太大不同,但往深处看就会发现绝大部分都已经进化。最核心的流处理器(Streaming Processor/SP)现在不但数量大增,还有了个新名字CUDA核心(CUDA Core),由此即可看出NVIDIA的转型之意,不过我们暂时还是继续沿用流处理器的说法。

温故而知新 Fermi/Kepler架构解析回顾!

    所有流处理器现在都符合IEEE 754-2008浮点算法(Cypress也是如此)和完整的32位整数算法,而后者在过去只是模拟的,事实上仅能计算24-bit整数乘法;同时引入的还有积和熔加运算(Fused Multiply-Add/FMA),每循环操作数单精度512个、双精度256个。所有一切都符合业界标准,计算结果不会产生意外偏差。

    双精度浮点(FP64)性能大大提升,峰值执行率可以达到单精度浮点(FP32)的1/2,而过去只有1/8,AMD现在也不过1/5,比如Radeon HD 5870分别为单精度2.72TFlops、双精度544GFlops。由于最终核心频率未定,所以暂时还不清楚Fermi的具体浮点运算能力(双精度预计可达624GFlops)。

    G80/GT200都是8个流处理器构成一组SM(Streaming Multiprocessor),Fermi增加到了32个,最多16组,少于GT200的30组,但流处理器总量从240个增至512个,是G80的整整四倍。除了流处理器,每组SM还有4个特殊功能单元(Special Function UnitSFU),用于执行抽象数学和插值计算,G80/GT200均为2个。同时MUL已被删掉,所以不会再有单/双指令执行计算率了。

    至于SM之上的纹理处理器群(Texture Processor Cluster/TPC),NVIDIA暂时没有披露具体组成方式,而且ROP单元、纹理/像素填充率等其它图形指标也未公布。

2、缓存

    GT200的每组SM都有16KB共享内存,由其中8个SP使用。注意它们不是缓存(cache),而是软件管理的内存(memory),可以写入、读取数据。为了满足应用程序和通用计算的需要,Fermi引入了真正的缓存,每组SM拥有64KB可配置内存(合计1MB),可分成16KB共享内存加48KB一级缓存,或者48KB共享内存加16KB一级缓存,可灵活满足不同类型程序的需要。

温故而知新 Fermi/Kepler架构解析回顾!

    GT200的每组TPC还有一个一级纹理缓存,不过当GPU出于计算模式的时候就没什么用了,故而Fermi并未在这方面进行增强。整个芯片拥有一个容量768KB的共享二级缓存,执行原子内存操作(AMO)的时候比GT200快5-20倍。

3、效率

    CPU和GPU执行的都是被称作线程的指令流。高端CPU现在每次最多只能执行8个线程(Intel Core i7),而GPU的并行计算能力就强大多了:G80 12288个、GT200 30720个、Fermi 24576个。

    为什么Fermi还不如GT200多?因为NVIDIA发现计算的瓶颈在于共享内存大小,而不是线程数,所以前者从16KB翻两番达到64KB,后者则减少了20%,不过依然是G80的两倍,而且每32个线程构成一组“Warp”。

    在G80和GT200上,每个时钟周期只有一半Warp被送至SM,换言之SM需要两个循环才能完整执行32个线程;同时SM分配逻辑和执行硬件紧密联系在一起,向SFU发送线程的时候整个SM都必须等待这些线程执行完毕,严重影响整体效率。

    Fermi解决了这个问题,在每个SM前端都有两个Warp调度器和两个独立分配单元,并且和SM其它部分完全独立,均可在一个时钟循环里选择发送一半Warp,而且这些线程可以来自不同的Warp。分配单元和执行硬件之间有一个完整的交叉开关(Crossbar),每个单元都可以像SM内的任何单元分配线程(不过存在一些限制)。

温故而知新 Fermi/Kepler架构解析回顾!

    这种线程架构也不是没有缺点,就是要求Warp的每个线程都必须同时执行同样的指令,否则会有部分单元空闲。每组SM每个循环内可以执行的不同操作数:FP32 32个、FP64 16个、INT 32个、SFU 4个、LD/ST 16个。

4、并行内核(Parallel Kernel)

    在GPU编程术语中,内核是运行在GPU硬件上的一个功能或小程序。G80/GT200整个芯片每次只能执行一个内核,容易造成SM单元闲置。这在图形运算中不是问题,通用计算上就不行了。Fermi的全局分配逻辑则可以向整个系统发送多个并行内核,不然SP数量翻一番还多,更容易浪费。

    应用程序在GPU和CUDA模式之间的切换时间也快得多了,NVIDIA宣称是GT200的10倍。外部连接亦有改进,Fermi现在支持和CPU之间的并行传输,而之前都是串行的。

5、ECC支持

    AMD Cypress可以检测内存总线上的错误,却不能修正,而NVIDIA Fermi的寄存器文件、一级缓存、二级缓存、DRAM全部完整支持ECC错误校验,这同样是为Tesla准备的,之前我们也提到过。很多客户此前就是因为Tesla没有ECC才拒绝采纳,因为他们的安装量非常庞大,必须有ECC。

6、统一64-bit内存寻址

    以前的架构里多种不同载入指令,取决于内存类型:本地(每线程)、共享(每组线程)、全局(每内核)。这就和指针造成了麻烦,程序员不得不费劲清理。Fermi统一了寻址空间,简化为一种指令,内存地址取决于存储位置:最低位是本地,然后是共享,剩下的是全局。这种统一寻址空间是支持C++的必需前提。

温故而知新 Fermi/Kepler架构解析回顾!

    GT80/GT200的寻址空间都是32-bit的,最多搭配4GB GDDR3显存,而Fermi一举支持64-bit寻址,即使实际寻址只有40-bit,支持显存容量最多也可达惊人的1TB,目前实际配置最多6GB GDDR5——仍是Tesla。

7、新的指令集架构(ISA)

    下边对开发人员来说是非常酷的:NVIDIA宣布了一个名为“Nexus”的插件,可以在Visual Studio里执行CUDA代码的硬件调试,相当于把GPU当成CPU看待,难度大大降低。Fermi的指令集架构大大扩充,支持DX11和OpenCL义不容辞,C++前边也已经说过,现在又多了Visual Studio,当然还有C、Fortran、OpenGL 3.1/3.2。

Kepler架构解析回顾

Kepler GK110 ‐ 性能卓越,效率极高  

    Kepler GK110 由 71 亿个晶体管组成,不仅速度最快,而且还是有史以来架构最复杂的微处理器。GK110 新加了许多注重计算性能创新功能,目的是要成为英伟达 Tesla和HPC市场上的并行处理动力站。 

    Kepler GK110 会提供超过每秒 1 万亿次双精度浮点计算的吞吐量,DGEMM 效率大于80%,而之前的 Fermi 架构的效率是 60‐65%。除了大大提高的性能之外,Kepler 架构在电源效率方面有 3 次巨大的飞跃,使 Fermi 的性能/功率比提高了 3 倍。  

温故而知新 Fermi/Kepler架构解析回顾!

    Kepler GK110 的以下新功能提高 GPU 的利用率,简化了并行程序设计,并有助于 GPU 在各种计算环境中部署,无论是从个人工作站还是到超级计算机:  

Dynamic Parallelism

    能够让 GPU 在无需 CPU 介入的情况下,通过专用加速硬件路径为自己创造新的工作,对结果同步,并控制这项工作的调度。这种灵活性是为了适应程序执行过程中并行的数量和形式,编程人员可以处理更多的各种并行工作,更有效的将 GPU 用为计算用途。此功能允许结构较简单,一但较复杂的任务方便有效地运行,能使较大部分的应用程序在整个 GPU 上运行。此外,程序能够更容易的创建,CPU 能为其他任务释放。 

Hyper-Q

    Hyper - Q 允许多个 CPU 核同时在单一 GPU 上启动工作,从而大大提高了GPU 的利用率并削减了 CPU 空闲时间。Hyper‐Q 增加了主机和 Kepler GK110 GPU 之间的连接总数(工作队列),允许 32 个并发、硬件管理的连接(与 Fermi 相比,Fermi 只允许单个连接)。Hyper - Q 是一种灵活的解决方案,允许来自多个 CUDA 流、多个消息传递接口(MPI)进程,甚至是进程内多个线程的单独连接。以前遇到跨任务虚假串行化的应用程序,限制了 GPU 的利用率,而现在无需改变任何现有代码性能就能大幅度提升。 

温故而知新 Fermi/Kepler架构解析回顾!

Grid Management Unit

    使 Dynamic Parallelism 能够使用先进、灵活的 GRID 管理和调度控制系统。新 GK110 Grid Management Unit (GMU) 管理并按优先顺序在 GPU上执行的 Grid。GMU 可以暂停新 GRID 和等待队列的调度,并能中止 GRID,直到其能够执行时为止,这为 Dynamic Parallelism 这样的强大运行提供了灵活性。GMU 确保CPU‐和 GPU‐产生的工作负载得到妥善的管理和调度。

NVIDIA GPUDirect

    能够使单个计算机内的 GPU 或位于网络内不同服务器内的 GPU 直接交换数据,无需进入 CPU 系统内存。GPUDirect 中的 RDMA 功能允许第三方设备,例如 SSD、NIC、和 IB 适配器,直接访问相同系统内多个 GPU 上的内存,大大降低 MPI 从 GPU 内存发送/接收信息的延迟。还降低了系统内存带宽的要求并释放其他 CUDA 任务使用的 GPU DMA 引擎。Kepler GK110 还支持其他的GPUDirect 功能,包括 Peer‐to‐Peer 和 GPUDirect for Video。 

Kepler 架构概述

    Kepler GK110 专为英伟达 Tesla打造,其目标是成为世界上并行计算性能最高的微处理器。GK110 不仅大大超过由 Fermi 提供的原始计算能力,而且非常节能,显著减少电力消耗,同时产生的热量更少。 

完整 Kepler GK110 实施包括 15 SMX 单元和六个 64 位内存控制器。不同的产品将使用GK110 不同的配置。例如,某些产品可能部署 13 或 14 个 SMX。在下面进一步讨论的该架构的主要功能,包括: 

新 SMX 处理器架构

增强的内存子系统,在每个层次提供额外的缓存能力,更多的带宽,且完全进行了重新设计,DRAM I/O 实施的速度大大加快。 

贯穿整个设计的硬件支持使其具有新的编程模型功能 

Kepler GK110 支持新 CUDA Compute Capability 3.5。

    Kepler 架构的一个主要设计目标是提高电源效率。设计 Kepler 时,英伟达工程师应用从 Fermi中积累的经验,以更好地优化 Kepler 、实现高效运行。台积电的 28nm 制造工艺在降低功耗方面起着重要的作用,但许多 GPU 架构需要修改,以进一步降低功耗,同时保持出色的性能。 

温故而知新 Fermi/Kepler架构解析回顾!

     Kepler 每一个硬件设备都经过设计和擦洗,以提供卓越的性能/功率比。出色性能/功率比的非常好的案例是 Kepler GK110 新流式多处理器 (SMX) 中的设计,与最近 Kepler GK104 引入的 SMX 单元的许多方面类似,但计算算法包括更多双精度单位。  

流式多处理器 (SMX) 架构 

    Kepler GK110 的新 SMX 引入几个架构创新,使其不仅成为有史以来最强大的多处理器,而且更具编程性,更节能。 SMX: 192 个单精度 CUDA 核、64 个双精度单元、32 个特殊功能单元 (SFU) 和 32 个加载/存储单元 (LD/ST)。  

SMX 处理核架构

    每个 Kepler GK110 SMX 单元具有 192 单精度CUDA 核,每个核完全由‐浮点和整数算术逻辑单元组成。Kepler 完全保留 Fermi 引入的 IEEE 754-2008 标准的单精度和双精度算术,包括积和熔加 (FMA) 运算。 

    Kepler GK110 SMX 的设计目标之一是大大提高 GPU 的双精度性能,因为双精度算术是许多HPC 应用的核心。Kepler GK110 的 SMX 还保留了特殊功能单元 (SFU) 以达到和上一代 GPU 类似的快速超越运算,所提供的 SFU 数量是 Fermi GF110 SM 的 8 倍。 

    与 GK104 SMX 单元类似,GK110 SMX 单元内的核使用主 GPU 频率而不是 2 倍的着色频率。2x 着色频率在 G80 Tesla 架构的 GPU 中引入,并用于之后所有的 Tesla 和 Fermi‐架构的GPU。在更高时钟频率上运行执行单元使芯片使用较少量的执行单元达到特定目标的吞吐量,这实质上是一个面积优化,但速度更快的内核的时钟逻辑更耗电。对于 Kepler,我们的首要任务是的性能/功率比。虽然我们做了很多面积和功耗方面的优化,但是我们更倾向优化功耗,甚至以增加面积成本为代价使大量处理核在能耗少、低 GPU 频率情况下运行。 

温故而知新 Fermi/Kepler架构解析回顾!

Quad Warp Scheduler

    SMX 以 32 个并行线程为一组的形式调度进程,这 32 个并行线程叫做 Warp。而每个 SMX 中拥有四组 Warp Scheduler 和八组 Instruction Dispatch 单元,允许四个 Warp 同时发出执行。Kepler 的 Quad Warp Scheduler 选择四个 Warp,在每个循环中可以指派每 Warp 2 个独立的指令。与 Fermi 不同,Fermi 不允许双精度指令和部分其他指令配对,而 Kepler GK110 允许双精度指令和其他特定没有注册文件读取的指令配对 例如加载/存储指令、纹理指令以及一些整数型指令。 

    每个 Kepler SMX 包含 4 组 Warp Scheduler,每组 Warp Scheduler 包含两组 Instruction Dispatch 单元。单个 Warp Scheduler 单元如上所示。其中包括: 

a) 记录长延迟操作(纹理和加载)的寄存器 

b) Warp 内调度决定(例如在合格的候选 Warp 中挑选出非常好的 Warp 运行) 

c) 线程块级调度(例如,GigaThread 引擎) 

    然而,Fermi 的 scheduler 还包含复杂的硬件以防止数据在其本身数学数据路径中的弊端。多端口寄存器记录板会纪录任何没有有效数据的寄存器,依赖检查块针对记录板分析多个完全解码的 Warp指令中寄存器的使用情况过,确定哪个有资格发出。 

    对于 Kepler,我们认识到这一信息是确定性的(数学管道延迟是不变量),因此,编译器可以提前确定指令何时准备发出,并在指令中提供此信息。这样一来,我们就可以用硬件块替换几个复杂、耗电的块,其中硬件块提取出之前确定的延迟信息并将其用于在 Warp 间调度阶段屏蔽Warp,使其失去资格。  

新 ISA 编码:每个线程 255 个寄存器 

    可由线程访问的寄存器的数量在 GK110 中已经翻了两番,允许线程最多访问 255 个寄存器。由于增加了每个线程可用的寄存器数量,Fermi 中承受很大寄存器压力或泄露行为的代码的速度能大大的提高。典型的例子是在 QUDA 库中使用 CUDA 执行格点 QCD(量子色动力学)计算。基于 QUDA fp64 的算法由于能够让每个线程使用更多寄存器并减少的本地内存泄漏,所以其性能提高了 5.3 倍。 

Shuffle 指令 

    为了进一步提高性能,Kepler 采用 Shuffle 指令,它允许线程在 Warp 中共享数据。此前,Warp 内线程之间的数据共享需要存储和加载操作以通过共享内存传递数据。使用 Shuffle 指令,Warp 可以读取来自Warp 内其他线程中任意排列的值。Shuffle 支持任意索引引用(即任何线程读取任何其他线程)。有用的 Shuffle 子集包括下一线程(由固定量弥补抵消)和 Warp 中线程间 XOR “蝴蝶”式排列,也称为 CUDA 性。 

    Shuffle 性能优于共享内存,因此存储和加载操作能够一步完成。Shuffle 也可以减少每个线程块所需共享内存的数量,因为数据在 Warp 级交换也不需要放置在共享内存中。在 FFT 的情况下,需要共享一个 Warp 内的数据,通过使用 Shuffle 获得 6%的性能增益。 

纹理改进 

    GPU 的专用硬件纹理单元对于需要取样或过滤图像数据的计算机程序来说是宝贵的资源。Kepler中的纹理吞吐量与 Fermi 相比有明显提高,每个 SMX 单元包含 16 纹理过滤单元,对比 FermiGF110 SM 提高了 4 倍。 

    此外,Kepler 改变了管理纹理状态的方法。在 Fermi 时代,为让 GPU 引用纹理,必须在固定大小绑定表中分配“槽”才能启动 Grid。表中槽数量最终限制程序一次可以读取多少个独特的纹理。最终,在 Fermi 中限制程序仅可以同时访问 128 纹理。 

温故而知新 Fermi/Kepler架构解析回顾!

    Kepler 中有无绑定纹理,不需要额外步骤:纹理状态已保存为内存中的对象,硬件按需获取这些状态对象,绑定表过时。这有效地消除了计算程序引用独特纹理数量的任何限制。相反,程序可以在任何时间映射纹理和通纹理处理周围,因为他们将任何其他指针 

Kepler 内存子系统 – L1、L2、ECC 

    Kepler 的内存层次结构与 Fermi 类似。Kepler 架构支持统一内存加载和存储的请求路径,每个SMX 多处理器有一个 L1 缓存。Kepler GK110 还使编译器指示为只读数据增设一个新的缓存,如下所述。 

    Kepler GK110 设计的初衷就是利用卓越的电源效率达到最大化计算性能和吞吐量。该架构有很多创新,如 SMX、Dynamic Parallelism 和 Hyper‐Q 使混合计算大大简化和加快了编程,适用于更广泛的应用。Kepler GK110 GPU 将用于许多系统,从工作站到超级计算机,解决 HPC 中最严峻的挑战。 

9
相关文章