可作CPU的GPU NV GT300显卡架构详细解绍
着AMD在北京时间9月23日正式推出了Cypress(RV870),从而拉开了DX11时代的序幕《三大至尊特性 HD5800显卡发布会报道》,而作为老竞争对手,NVIDIA全新支持DX11技术的显卡Fermi(GT300)也在10月3日的国庆假期内在国外GPU技术会议上曝光《黄仁勋亲展示NV Fermi GT300实物卡》,那么这款NVIDIA的新一代显卡究竟有什么跨时代的技术呢,今天就让我们一起来看看。
相信大家已经了解了有关Fermi(GT300)——NVDIA下一代GPU架构的一些概况,我们已经知道,新的GPU核心,是在现有的GT200架构上进行升级,并且在早期已经公布了某些重要的新设计。
虽然Fermi(GT300)和早前的GT200系列有很多相同的功能,但是Fermi(GT300)完全是一个全新的产品。 NVIDIA的技术白皮书描述了新的结构如下:“GT300是一个统一的图形和计算并行处理器。GT300的功能是GT200最初设想性能的扩展。我们已经采取了一切我们之前两个处理器的技术和所有那些为他们编写的应用程序,并采用了全新的方法来设计,以创造世界上第一个可以实现处理器运算的GPU。“
“计算图形处理器”,“一个数字处理能手”都可以很恰当的称呼Fermi(GT300)。将Fermi(GT300)制造成一个拥有512个流媒体处理器,ECC内存保护,以及IEEE 754-2008浮点算法(Cypress也是如此)和完整的32位整数算法。
关于下一代Fermi(GT300)芯片的关键设计包括以下内容:
晶体管个数超过30亿
使用台积电40纳米工艺
512个着色处理器(NVIDIA 公司可称之为“CUDA技术核心”)
32个CUDA cores per Shader Cluster
384 bit GDDR5显存
1 MB的L1缓存,768 KB二级高速缓存
最多达到6GB显存,1.5GB的消费级显存
IEEE 754二进制浮点数算术标准
本地支持执行CUDA技术、C ++,Fortran语言,支持DirectCompute 11,DirectX 11,OpenGL3.1和OpenCL
从数据上我们知道NVIDIA 公司宣称Fermi(GT300)为“最重要的跨越式发展的GPU架构”确实相当的强悍,但是试想,晶体管个数超过30亿,512着色处理器的核心,那会是多么大的一个核心,要知道相比之下同样工艺的AMD Cypress也才不过21.5亿个。如果二者核心面积是等比例的(当然这不可能),那么GT300将有大约500平方毫米,至少比GT200 576平方毫米小多了,所以可想而知Fermi(GT300)的体积。
Fermi(GT300)采用的NVIDIAGPU无疑在运算上要垮一大步,这显然是新架构的主要目标。我们将会看到,NVIDIA公司已经在实现诸如二进制浮点数算术的重点项目,如支持ECC和高速缓存、切换GPU应用程序之间上下功夫,同时甚至开始了CUDA技术体系结构,同时NVIDIA 公司认为内存技术是并行计算的未来趋势,那么除去性能不说,Fermi(GT300)在某种程度上就像是处理器行业当时的双核心技术,代表着一个行业的未来趋势。
附GT200架构图:
Fermi(GT300)架构详细介绍(一)CUDA技术
如果往高了看,Fermi(GT300)架构的目的直接反映出目前NVIDIA的CUDA技术在向前发展。在这个程序中的执行模式有threads, thread blocks,和grids of thread blocks ,所有都是一种与众不同的内存访问和内核技术,完全和目前的技术不同。
最核心的流处理器(Streaming Processor/SP)现在不但数量大增,而且还有了个全新的名字CUDA核心(CUDA cores per Shader Cluster)。而线程块(thread block)就是有能力相互合作和沟通的线程(thread)集合,通过每块共享内存组。每块可支持多达1536并发线程,各自有独立通道,独立记忆,计数器,etc等;其实每一个控制极(grids of thread blocks)都是一个线程块停止后在运行另外一个相同的线程块,但有能力从整个内存中阵列读写(但只有在内核范围同步)。
这些软件技术与 NVIDIA目前流体处理器和CUDA内核的GPU的形式匹配,在GPU本身对线程块控制极起到调配,每个SM(也可以说是SMs)的组合操作执行一个或多个线程块和CUDA核心(如NVIDIA 公司他们现在所称的那样)执行线程。将32个线程组称为一个“Warp”,这样有助于提高GPU的效率。
这一架构的首次实施,让我们相当盼望GT300的到来,并且会出现一些令人印象深刻的规格: GPU是由30亿个晶体管组成,并采用512个CUDA技术核心(也就是着色处理器)为16组32个流媒体处理器组。该记忆体架构是围绕一个新的GDDR5显存实施的,有6通道64bits,总数为384bits的显存带宽。新的显存系统可以在技术上支持的高达6GB的显存容量——这是高性能计算应用的关键#p#page_title#e#
Fermi(GT300)架构详细介绍(二)双精度浮点
每个SP都包括了32个CUDA技术处理内核(相当于GT200的4倍),可以看到上面也引入了一些新功能,以帮助提高性能。每个处理器包括一个完全流水线整数和浮点单元,它实现了都符合IEEE 754-2008浮点算法和完整的32位整数算法,。AMD公司的Cypress核心也实现了这一标准,因为它增加了对积和熔加运算(Fused Multiply-Add/FMA)的支持,每循环操作数单精度512个、单精度256个(G200仅支持单精度FMA)。所有一切都符合业界标准,计算结果不会产生意外偏差。
此外,在每个SM包括16个加载和存储单元和4个特殊功能单元处理正弦和余弦计算(图形计算领域,所有可见图像都是由无数个三角形组成,所以正弦和余弦计算的能力也就是反映出了GPU的处理能力)。
NVIDIA 公司声称GT300架构双精度性能将大大超过现有GT200的设计改进。
与NVIDIA 声称Fermi(GT300)将要比GT200快4.25倍,这使其双精度预计可达660 GFLOPS的双精度性能的GT300,双精度浮点(FP64)性能大大提升,峰值执行率可以达到单精度浮点(FP32)的1/2,而过去只有1/8,AMD现在也不过1/5,比如Radeon HD 5870分别为单精度2.72TFlops、双精度544GFlops。由于最终核心频率未定,所以暂时还不清楚Fermi的具体浮点运算能力。
Fermi(GT300)架构详细介绍(三)“Warp”
先前我们提到的“warps”——将32个线程组称为一个“Warp”。我们知道,CPU和GPU执行的都是被称作线程的指令集合。而目前高端CPU现在每次最多只能执行8个线程(Intel Core i7),而这样看来,GPU的并行计算能力就是天文数字了,像G80可实现12288个、GT200可实现30720个、而Fermi(GT300)可实现24576个。
可以看到,Fermi(GT300)的线程还没有GT200多,这是因为NVIDIA 发现GPU计算的瓶颈在于共享内存大小,而不是线程数,所以将共享内存从16KB翻两番达到64KB,而将线程减少了20%,每个SM经调度和指派可以控制两个“Warp”,使被命令的CUDA技术核心可同时进行工作。换句话说,就像是一条双车道,16个核心控制和16个加载/存储单元一起工作,然后在执行的情况下实现独立调度和援助。这种双重结构的设计显然让Fermi(GT300)将达到接近其理论性能极限的标准。
而在G80和GT200上,每个时钟周期只有一半Warp被送至SM,换言之SM需要两个循环才能完整执行32个线程;同时SM分配逻辑和执行硬件紧密联系在一起,向SFU发送线程的时候整个SM都必须等待这些线程执行完毕,严重影响整体效率。如果说要论真实水平的话,Fermi(GT300)的线程可实现24576*2个,性能提升相当的可观。
这种线程架构也不是没有缺点,就是要求Warp的每个线程都必须同时执行同样的指令,否则会有部分单元空闲。每组SM每个循环内可以执行的不同操作数:FP32 32个、FP64 16个、INT 32个、SFU 4个、LD/ST 16个。#p#page_title#e#
Fermi(GT300)架构详细介绍(四)GPU缓存
上图可以看到总数为64KB的共享内存和L1缓存,此内存是独一无二的,它是可配置为16KB共享内存和48KB的L1缓存或者48KB共享内存和16KB的L1缓存自由灵活组成的。此功能是为了保证100%兼容现有的基于GPU的应用技术,同时还还提供了灵活性。
GT200的每组TPC还有一个一级纹理缓存,不过当GPU出于计算模式的时候就没什么用了,故而Fermi并未在这方面进行增强。
整个芯片拥有一个容量768KB的共享二级缓存,执行原子内存操作(AMO)的时候比GT200快5-20倍。
在这里你可以看到新的GPU架构和G80和GT200的规范对比。此时来看NVIDIA确实有和AMD新推出的产品竞争的实力,但是光从参数上看没有意义,至于市场如何还需要时间检验。
Fermi(GT300)架构详细介绍(五)指令集架构
除了这些原始的计算能力,当然NVIDIA 公司希望Fermi(GT300)还有一些别的竞争优势。第一个就是是新的ISA(指令集架构),这是一个全新的技术,以支持目前最流行的编程语言C++。通过包括建立统一的寻址空间,简化为一种指令,内存地址取决于存储位置:最低位是本地,然后是共享,剩下的是全局。这种统一寻址空间是支持C++的必需前提。NVIDIA的架构可以支持对象和不受限制的无限指针位置面向对象编程模型的支持。仅此功能就可以帮助到CUDA和GPU计算的许多开发者。
NVIDIA 公司还指出,这一新的ISA完全是为了OpenCL和DirectCompute准备的。并且像线程,线程块和线程块控制器以及共享内存等等,都是为这些即将到来的计算语言做支持的。而且NVIDIA 宣布了一个名为“Nexus”的插件,可以在Visual Studio里执行CUDA代码的硬件调试,相当于把GPU当成CPU看待,难度大大降低。能提高游戏和GPU计算代码的性能。该功能听起来非常类似于分支预测单元
Fermi(GT300)架构详细介绍(六)内存子系统创新
前面我们已经讨论了共享内存和L1缓存的好处,其实从其他应用程序上来说共享内存有很大的灵活性。另外,L1将存储临时数据,从而可以提高整体内存访问时间。
NVIDIA 也包括了768KB的二级缓存,在16个SM中。二级缓存可改善了应用程序在32个CUDA技术核心和各个SM中连接的作用,工作效率大大提高。
NVIDIA还采取新的技术,以执行ECC内存错误校验。虽然不是普通消费者的问题,但是对与服务器的处理有非常大的作用,ECC是一个稳定环境的重要组成部分。L1和L2缓存、和GDDR5内存控制器中都支持ECC
Fermi(GT300)架构详细介绍(七)GigaThread调度
同时更新的线程调度是Fermi(GT300)值得讨论的新功能。首先是将切换功能低至10-20微秒。切换功能可以应用在GPU使用需要上,还可以应用在程序之间的交换,例如渲染和PhysX物理处理图形之间的转换上。这可能让开发人员可以使用GPU来做更多的计算能力应用这些非图形的目的。
第二个主要的更新是与内核同时执行的,可以称为GPU的超线程。其实就是允许一个程序,只使用一个内核(以及它们控制的SMs和CUDA核心),超线程技术让GPU增加稍许的裸晶面积,就可以换来较高的效能提升。这样确实是对GPU技术的颠覆。