前言:在熟悉了CPU-Z和GPU-Z的使用和参数之后,大多数爱好者已经能分辨自己的硬件配置和基本性能,不过最新推出的CUDA-Z你又是否了解呢?在我们的网站博客里,已经有网友开始了对NVIDIA显卡GPU功能的进一步挖掘,不但玩了很多新奇的软件,也使用GPU加速了很多经典老软件。但是对于CUDA-Z这款基础测试软件,很多网友显然比较难下手,虽然参数不多,但是这款软件涉及到专业性较强的CUDA架构特点和名词解释。今天希望用这篇文章和大家交流,更好地了解我们身边的GPU,了解正在成长中的GPU通用计算能力。
● CUDA通用计算代表GPU发展新方向
CUDA是NVIDIA公司于2007年推出的GPU通用计算产品。CUDA是Compute Unified Device Architecture(统一计算架构)的简称,是建立在GPU基础之上的通用计算开发平台,它是一个全新的软硬件架构,可以将GPU视为一个并行数据计算的设备,对所进行的计算进行分配和管理。利用CUDA能够充分的将GPU的高计算能力开发出来,并使得GPU的计算能力获得更多的应用。
CUDA最为关键也最受推崇的原因很简单——它是业界第一款不需要图形学API就能使用类C语言进行通用计算的开发环境和软件体系。这大大增强了CUDA的普及速度和普及成本。
NVIDIA提出的CUDA通用计算方案
CUDA能够有效利用GPU强劲的处理能力和巨大的存储器带宽进行图形渲染以外的计算,广泛应用于图像处理、视频传播、信号处理、人工智能、模式识别、金融分析、数值计算、石油勘探、天文计算、流体力学、生物计算、分子动力学计算、数据库管理、编码加密等领域,并在这些领域中对CPU获得了一到两个数量级的加速。取得了令人瞩目的成绩。
CUDA从发布开始,到目前已经到了3.0版,从NVIDIA提出CUDA这个概念,已经有三年多时间,在这一年时间里CUDA发展迅速,在NVIDIA CUDA网站上每天都有很多网友提交自己的CUDA软件作品。在轻量级的小软件中,CUDA已经如雨后春笋般的涌现,从IE图象插件PICLENS,到PHOTOSHOP CS4 开始支持CUDA的插件。视频编码解码是CUDA发展最迅速的方面之一,目前已经有大量的软件开始支持CUDA GPU加速,同时支持CUDA应用大型软件也出现了不少。
我们今天的测试正是使用了不同时期的4代NVIDIA显卡代表之作,将它们围绕CUDA-Z软件做性能分析,通过CUDA-Z测试的底层计算能力,来判断显卡架构变革带来的性能提升。
濮元恺所写过的技术分析类文章索引(持续更新) | |||
显卡只能玩游戏? 10年GPU通用计算回顾 |
|||
别浪费你的电脑 分布式计算在中国 |
Computex独家泄密 解析AMD下代GPU |
● 传统意义上的超级计算机与GPU编程
在传统的GPU种,Shader单元从出现(2001年DirectX 8发布标志着Shader单元出现)到运算能力迅速提升(2007年Geforce 8800GTX发布,通用计算影响力显著扩大)经过了很长时间。在这段时间里,显卡对于高端大规模并行运算是毫无价值的,即使有少量业界先行者开始了思考和研究,也无法形成对整个产业的影响力。
这个阶段在超级计算机与集群中,往往要拆除“多余的”显卡以节能功耗,而自从AMD公司的Stream架构NVIDIA公司的CUDA架构奠定了GPU通用计算地位之后,现在的设计开始逐渐采用大量GPU来获得更加廉价和绿色的计算能力。CUDA的强大性能引发了一场通用计算革命,这场革命将极大地改变计算机的面貌。
中国天河一号超级计算机
2009年10月29日,国防科技大学成功研制出的峰值性能为每秒1206万亿次的“天河一号”超级计算机在湖南长沙亮相。我国成为继美国之后世界上第二个能够研制千万亿次超级计算机的国家。天河一号采用6144个Intel通用多核处理器和5120个AMD图形加速处理器GPU,其中GPU的型号正是大家熟悉的ATI上一代高端GPU产品HD 4870X2。截止2009年11月17日,“天河一号”超级计算机在第34届TOP500榜单中排名第五,这也是中国超级计算机目前为止达到的最高排名成绩。
随着GPU的可编程性不断增强,GPU的应用能力已经远远超出了图形渲染任务,利用GPU完成通用计算的研究逐渐活跃起来,将GPU用于图形渲染以外领域的计算成为GPGPU(General Purpose computing on graphics processing units,基于GPU的通用计算)。GPGPU计算通常采用CPU+GPU的异构模式,但是传统的GPGPU受硬件可编程性和开发方式的制约,应用领域受到了限制,开发难度也很大。
2007年6月推出的CUDA是一种将GPU作为数据并行计算设备的软硬件体系。CUDA不需要借助于图形学API,并采用了比较容易掌握的类C语言进行开发。开发人员能够从熟悉的C语言比较平稳地从CPU过度到GPU,而不必重新学习语法。当然,要开发高性能的GPU通用计算程序,开发人员仍然需要掌握并行算法和GPU架构方面的基本知识。
● CUDA-Z软件界面解析
CUDA-Z就像我们常用的CPU-Z或者GPU-Z,但是具体参数就变成了针对CUDA应用方面的信息,支持CUDA信息查询,还可以测试电脑CUDA的速度。目前该软件更新到了0.5.95版,该程序需要与NVIDIA公司的GeForce 8000,9000,GT100和GTX200系列,或者Quadro和Tesla卡和ION离子芯片显卡相搭配。该程序仅2.25MB,属于免费版系统检测软件。
CUDA-Z的启动界面 它识别到笔者安装的GeForce GTS 250显卡
此版本可以显示GPU核心运算能力和性能、显存容量和带宽。它显示了所有CUDA技术的单精度浮点和整数运算性能。同时它也显示了支持双精度操作的GT200芯片的最新显卡特性。该软件还可以生成一个HTML格式和TXT纯文本文件报告,方便用户参考。
打开CUDA-Z软件后,可以很清楚地看到上面的4个选项卡,分别是Core(核心)、Memory(内存,这里值本地显存)、Performance(性能)、About(相关信息)。通过这4个界面,我们可以很清楚地了解到自己的NVIDIA显卡在通用计算方面的性能,当然这些都是硬件配置和理论性能。
下面,我们逐一分析每个页面的参数及其所表示的含义。
● CUDA-Z软件Core核心界面
这个界面是CUDA-Z软件首先呈现给我们的界面,我们可以在这里看到自己的GPU基本信息。在开始具体的讲解之前,我们有必要简单了解CUDA的硬件单元映射。
CUDA计算单元示意图
1、计算单元:上图是CUDA GPU计算单元简图。其中,SM代表流多处理器(Stream Multiprocessors),即CUDA的计算核心部件。每个SM又包括8个标量流处理器SP(Stream Multiprocessor),以及少量的其他计算单元。在商业宣传中,GPU往往被说成拥有数百个“核”,这里的“核”指的通常是SP单元的数量。实际上SP只是执行单元并不是完整的处理核心。拥有完整前端(Front-End)的处理核心,必须包括取指、解码、分支逻辑和执行单元。因此,将SM称为“核”更加贴切。隶属于同一SM的8个SP共用一套取指与发射单元,也共用一块共享存储器。
2、线程结构:CUDA将计算任务映射为大量的可以并行执行的线程,并且硬件动态调度和执行这些线程。Kernel以线程网格(Grid)的形式组织,每个线程网格由若干个线程块(block)组成,每个线程块又由若干个线程(thread)组成。实质上,kernel是以block为单位执行的,CUDA引入grid只是用来表示一系列可以被并行执行的block的集合。各block是并行执行的,block间无法通信,也没有执行顺序。目前一个kernel函数中有一个grid,而未来支持DX11的硬件采用了MIMD(多指令多数据)架构,允许在一个kernel中存在多个不同的grid。
3、Block:CUDA中的kernel函数实质上是以block为单位执行的,同一block中的线程需要共享数据,因此它们必须在同一个SM中发射,而block中的每一个线程(thread)则被发射到一个SP上执行。一个block必须被分配到一个SM中,但是一个SM中同一时刻可以有多个活动线程块(active block)在等待执行,即在一个SM中可以同时存在多个block的上下文。当一个block进行同步或者访问显存等高延迟操作时,另一个block就可以“趁虚而入”,占用GPU资源,最大限度利用SM的运算能力。
4、Warp:在实际运行中,block会被分割为更小的线程束,这就是warp。线程束的大小由硬件的计算能力版本决定。在目前所有的NVIDIA GPU中,一个线程束由连续的32个线程组成。warp中的线程只与thread ID有关,而与block的维度和每一维的尺度没有关系,这种分割方式是由硬件决定的。简单地说,warp中包含32条线程是因为每发射一条warp指令,SM中的8个SP会将这条指令执行4遍。在硬件中实际运行程序时,warp才是真正的执行单位。虽然warp是一个由硬件决定的概念,在抽象的CUDA编程模型中并不存在,但是其影响力绝对不容忽略。
5、执行模型:CUDA采用了SIMT(Single Instruction,Multiple Thread,单指令多线程)执行模型,SIMT是对SIMD(Single Instruction,Multiple Data,单指令多数据)的一种改进。SIMD中的向量宽度受到硬件制约,是显式的,固定的,数据必须打包成向量后才能被处理。而在SIMT中,执行数据的宽度将作为硬件细节被隐藏起来,硬件可以自动地适应不同的执行宽度。例如一个block有若干个warp组成,执行宽度可以在1~512线程之间变化。如果按照SIMD模型设计CUDA,每个block的执行宽度都必须是一个warp,即32个线程,这无疑会大大降低编程的灵活性。另外一个不同是SIMD的向量中的元素相互之间可以自由通信,因为它们存在于相同的地址空间(位于同一寄存器);而SIMT中的每个线程的寄存器都是似有的,线程之间只能通过共享存储器和同步机制进行通信。
● CUDA-Z软件核心界面分析(二)
下面结合刚才所提及到的重要概念,让我们进入CUDA-Z的具体界面中。第一个参数Name表示NVIDIA给GPU的命名,这里的Name不是复杂难懂的核心代号,而是市场上经常能看到的GPU核心型号名称。
Compute Capability翻译为计算能力,它表示该GPU的运算层级而不是性能。在下表中大家可以找到自己的GPU型号并做对比,表中仅列出桌面级GPU,专业级GPU用户请和桌面级芯片对对比,找到自己的计算能力定位。
Compute Capability(设备计算能力) | ||
GPU核心 | ||
核心代号 | 计算能力 | |
Geforce 8系列 GPU 8800 GTS、GTX、Ultra | G80 | 1.0 |
其他Geforce 8系列 GPU和Geforce 9全系列 | G92 | 1.1 |
Geforce GT 200系列(GT210、220、240) | ||
GT215 | 1.2 | |
Geforce GTX 200全系列 | GT200 | 1.3 |
Geforce GTX 400全系列 |
GF100 |
2.0 |
Compute Capability 计算能力说明 | |
计算能力1.0规格说明 |
每个Block中的最大线程数量为512; |
计算能力1.1规格说明 |
在计算能力1.0的基础上; |
计算能力1.2规格说明 |
在计算能力1.1的基础上; |
计算能力1.3规格说明 |
在计算能力1.2的基础上; |
在Clock Rate中,我们可以看到自己的CUDA设备运行频率,当然这里的频率已经不是GPU的核心频率,而是流处理器频率。因为CUDA的运算部件就是GPU中曾今的着色器——流处理器。当然这个说法也不是完全准确,因为GPU核心中的某些单元,比如说仲裁器和Atomic单元工作频率还是和固定单元(也就是GPU核心)一样,这些单元为流处理器提供的源源不断的数据支持和控制,当然他们几乎没有参与实际的运算工作。
CUDA-Z软件的Core核心界面
Multiprocessors代指流多处理器,也被称为SM(Stream Multiprocessors),在CUDA架构GPU,8个流处理器为一组,当然每个SM还包括两个SFU(Super Function Unit)特殊运算单元,GTX200架构中每个SM中增加了一个DPU(Double Precision Unit)双精度运算单元。
Warp Size表示每个warp块包含的线程数,也可以称作粒度。线程发射粒度越小,代表GPU线程管理能力越强,但这会付出很大的硬件开销代价。目前市面上的所有N卡Warp Size都是32,但特殊情况下存在Half Warp,也就是说可以16个指令发射一次,这样可以进一步提高线程管理能力。
Regs per Block代表每个多处理器的寄存器数量。
Threads per Block代表每个Block中的最大线程数量。
Watchdog Enabled代表GPU“监护人”能力,是一种特殊的防火墙功能。
最下方的Threads Dimentions代表一个线程块的 x、y 和 z 维最大规格。
Grid Dimentions则代表线程块网格各维度的最大规格。
● CUDA-Z软件Memory存储器界面
第二个界面表示了GPU的存储器能力,实际上也就是本地显存状态。
除了编程模型和执行模型,CUDA也规定了存储器模型,线程在执行时,将会访问到处于多个不同存储空间的数据。
每一个线程拥有自己的私有存储器寄存器和局部存储器;每一个线程块拥有一块共享存储器(Shared memory);最后,grid中所有的线程都可以访问同一块全局存储器(Global memory)。除此之外,还有两种可以被所有线程访问的只读存储器:常数存储器(Constant memory)和纹理存储器(Texture memory),它们分别为不同的应用进行了优化。全局存储器、常数存储器和纹理存储器中的值在一个内核函数执行完成后,将被保持,可以被同一程序中的其他内核函数调用。
最新的GF100存储架构
寄存器(Register)是GPU片上高速缓存器,执行单元可以以极低的延迟访问。寄存器的基本单元式寄存器文件(register file),每个寄存器文件大小为32bit。对于每个线程,局部存储器(Local memory)也是私有的。如果寄存器被消耗完,数据将被存在局部存储器中。共享存储器(Shared memory)也是GPU片内的高速存储器。它是一块可以被同一block中的所有线程访问的可读写存储器。它的访问速度几乎和寄存器一样快,所以是实现线程间通信的延迟最小的方法。全局存储器(Global memory)位于显存(占据了显存的绝大部分),CPU和GPU都可以对其进行读写访问。常数存储器(Constant memory)中的数据位于显存,但拥有缓存加速以节约带宽,常数存储器是只读的地址空间。纹理存储器(Texture memory)也是一种只读存储器,由GPU负责纹理渲染的图形专用单元发展而来,具备一些特殊功能。
Total Global代表本地显存容量,这是是扣除了2D帧后缓存的显存容量。
Shared Per Block代表每个block的缓存容量。
Pitch代表最高点,可以理解为最大线性单位缓存,就是每个SM可以在单位周期内使用的缓存总数。
Total Constant代表连续缓存块数。
Texture Alignment代表纹理簇大小。
GPU Overlap翻译为GPU重叠,实际上可以理解为GPU的SLI扩展能力。
● CUDA-Z软件Performacne性能界面
这个界面为我们展示了GPU的存储器速度和整数浮点运算能力。是CUDA-Z最有价值的一个界面,也是它相对于其他信息类软件最为不同的方面。
性能界面分为存储性能和核心性能两个部分,在介绍这部分之前,我们要先熟悉几个专有名词。
CUDA编程模型将CPU作为主机(Host),GPU作为协处理器(co-processor)或者称为设备(Device),在一个系统中可以存在一个主机和多个设备。
在这个模型中,CPU与GPU协同工作各司其职。CPU负责进行对逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务。CPU和GPU拥有各自独立的存储器地址空间:主机端的内存和设备端的显存。CUDA对内存的操作与一般的C程序基本相同,但是增加了一种新的Pinned memory;操作显存则需要调用CUDA API中的存储器管理函数,这些管理操作包括开辟、释放和初始化显存空间,以及在主机端和设备端进行数据传输等。
Performacne性能界面
CUDA-Z的存储性能测试,包括主机到设备(Host to Device)、设备到主机(Device to Host)、设备到设备(Device to Device)3个方面。其中的Pinned指页锁定内存(也被称为page-locked),而Pageable指可分页内存,它们都位于主机(CPU)端。
第二部分GPU核心性能分别测试了单精度浮点运算能力Single-precision Float、双精度浮点运算能力Double-precision Float、32位整数运算能力32-bit Integer和24位浮点运算能力24-bit Integer。G92核心的GTS250没有双精度运算能力,所以这一栏为不支持。GTX200系列以上显卡测试后可以得到相关数据。
需要注意的是这里的测试数据都是理论值,实际运算时,会有很多不同情况出现。比如运算程序中循环和分支过多,都会严重影响GPU的运算能力。衰减程度视架构设计和运算器周边资源配备而定。
下方的选项是:Update Results in Background(后台更新测试数据),选择后数据会实时更新。而Export按钮则可以由用户自行选择生成一个TXT或者HTML报告。
最后的About界面显示了CUDA-Z软件的制作信息,有兴趣的朋友可以点击链接去他们的网站进行了解。
对于CUDA-Z的了解到此为止,在通用计算飞速发展的基础上,各种对于GPU通用计算性能的测试软件也会不断涌现,在以后的显卡测试中,我们会将通用计算作为重要的一个项目。
下面让我们进入实测阶段,看看NVIDIA通用计算概念提出之后诞生的四代产品(G80G92、GT215、GT200、GF100)中,谁拥有最强的通用计算性能,不同架构在遇到不同运算精度的衰减程度到底如何。
实际上在最初策划中,本次测试应该包含G80架构的Geforce 8800GTX显卡,但是非常遗憾我们在文章发布之前没能及时找到这款4年前的显卡。鉴于G80到G92架构在通用计算层面的改进非常有限,我们觉得暂时忽略这款元老级别的显卡,下次更详细的测试一定会弥补这个遗憾,希望读者体谅。
性能测试的硬件、软件平台状况
● 测试系统硬件环境
测 试 平 台 硬 件 | |
中央处理器 | Intel Core i7-975 Extreme Edition |
散热器 | Thermalright Ultra-120 eXtreme |
内存模组 | G.SKILL F3-12800CL9T-6GBNQ 2GB*3 |
(SPD:1600 9-9-9-24-2T) | |
主板 | ASUS P6T Deluxe |
(Intel X58 + ICH10R Chipset) | |
显示卡 | |
NVIDIA 产 品 | |
Geforce GTS 250 | |
(G92 /512MB/ 核心:738MHz / Shader:1836MHz / 显存:2200MHz) | |
Geforce GT 240 | |
(GT215 /512MB/ 核心:600MHz / Shader:1450MHz / 显存:3800MHz) | |
Geforce GTX 285 | |
(GT200 / 1024MB / 核心:648MHz / Shader:1476MHz / 显存:2848MHz) | |
GeForce GTX 480 | |
(GF100 / 1536MB / 核心:700MHz / Shader:1401MHz / 显存:3696MHz) | |
硬盘 | Western Digital Caviar Blue |
(640GB / 7200RPM / 16M | |
电源供应器 | AcBel R8 ATX-700CA-AB8FB |
(ATX12V 2.0 / 700W) | |
显示器 | DELL UltraSharp 3008WFP |
(30英寸LCD / 2560*1600分辨率) |
G.SKILL F3-12800CL9T-6GBNQ
Thermalright Ultra-120 eXtreme
我们的硬件评测使用的内存模组、电源供应器、CPU散热器均由COOLIFE玩家国度俱乐部提供,COOLIFE玩家国度俱乐部是华硕(ASUS)玩家国度官方店、英特尔(Intel)至尊地带旗舰店和芝奇(G.SKILL)北京旗舰店,同时也是康舒(AcBel)和利民(Thermalright)的北京总代理。
● 测试系统的软件环境
操 作 系 统 及 驱 动 | |
操作系统 | |
Microsoft Windows 7 Ultimate RTM | |
(中文版 / 版本号7600) | |
主板芯片组 驱动 |
Intel Chipset Device Software for Win7 |
(WHQL / 版本号 9.1.1.1120) | |
显卡驱动 | |
ForceWare for Win7 | |
(WHQL / 版本号 196.21) | |
|
2560*1600_32bit 60Hz |
测 试 平 台 软 件 | |
通用计算 测试软件 |
CUDA-Z |
Futuremark / 版本号0.5.95 |
各类合成测试软件和直接测速软件都用得分来衡量性能,数值越高越好,以时间计算的几款测试软件则是用时越少越好。
● CUDA-Z理论性能测试:设备到设备带宽
在第一个测试中,我们将检测4代显卡的设备到设备(Device to Device)带宽性能,同时为了消除频率和计算单元数量对GPU的影响,让读者更好地体会架构更替带来的变化,我们将频率和计算单元数量全部除掉,最后形成的1个流处理器1MHz性能,是架构变化的最公正体现。
在这项测试中,我们看到GT200架构体现出了最高性能,GT240显卡则因为频率和规模影响没能战胜其他对手。但是当我们去除频率和运算单元数量影响后,发现Fermi架构的GTX480表现最差,这个效率还无法和G80或G92架构的产品相抗衡。
● CUDA-Z理论性能测试:单精度浮点性能
第二个测试属于更为重要的底层运算单元性能测试,它测试了GPU的单精度浮点能力,这个能力主要由流处理器结构影响。
基于同样原因,我们将频率和计算单元数量全部除掉,最后形成了1个流处理器1MHz性能供读者参考。
我们从测试结果看到,Fermi架构代号为GF100的GTX480在单精度浮点运算中取得了巨大提升。这个提升大约是GT200架构的两倍,单纯从这个数据来看,这是一个可喜的结果。
但是精细到1个流处理器1MHz效率方面,我们看到情况发生了一些变化,实际上NVIDIA从G92到GF100的架构更替中,单个运算单元的单精度浮点性能没什么增长,如果忽略测试误差可以得知,GT200是靠提升芯片规模或者说运算器数量来实现单精度性能提升,GF100同样是靠这种手段。
● CUDA-Z理论性能测试:双精度浮点性能
第三个测试同样属于的底层运算单元性能测试,它测试了GPU的双精度浮点能力,这个能力主要由流处理器结构影响。在GT200架构之前,NVIDIA的通用计算GPU是没有双精度运算能力的,而在GT200和GF100中,双精度能力出现并不断提升。
基于同样原因,我们将频率和计算单元数量全部除掉,最后形成了1个流处理器1MHz性能供读者参考。
按照最后的效率值看,我们认为Fermi架构的GF100桌面产品Geforce系列,在双精度能力上和上一代产品是几乎相同的。GT240和GTS250由于没有双精度计算能力,很遗憾在这项测试中只能得到0分。
当然我们知道,NVIDIA已经在Fermi架构中改进了双精度运算单元,让双精度能力提升到单精度的1/2,但是NVIDIA同时发表声明称:Fermi提供给图形处理的GPU产品中,这个衰减度还是1/8,和GT200一样。只有专门面向通用计算市场的Tesla产品,才拥有1/2的衰减度。我们的测试印证了这个结果。
● CUDA-Z理论性能测试:24位整数性能
第四个测试同样属于的底层运算单元性能测试,它测试了GPU的24位整数运算能力,这个能力主要由流处理器结构影响。
我们知道GPU是从Shader Model 2.0时代开始从整数运算转向浮点运算的,而此后浮点运算能力快速提升,整数性能却被忽略。实际上在通用计算中,整数运算能力也显得尤为重要,所以我们做了这项测试向大家展示GPU的整数性能。
基于同样原因,我们将频率和计算单元数量全部除掉,最后形成了1个流处理器1MHz性能供读者参考。
不知道是我们使用的软件版本对Fermi架构的支持问题,还是Fermi架构效率真的是这样,在最传统的24位整数性能测试中,GTX480面对自己的前辈显现出了比较弱小的状态,不但在实际性能中输给GT200架构,最后的效率值更是不足前三代产品1/2。
我们这次测试使用的是0.5.95版本的软件,我们期待在未来的软件升级后,能对GTX480提供更好的支持。
关于这项结果的分析,我们暂时保留意见,在以后的文章中向各位读者详细讲解。
● CUDA-Z理论性能测试:32位整数性能
第五个测试同样属于的底层运算单元性能测试,它是第四个测试的补充和完善。
GPU最初拥有的整数能力就是24位,随后运算位数出现了提升,当然这种提升是在周边控制单元和寄存器规模不断提升的前提下完成的。越充裕的周边资源,在精度提升时将带来越小的性能衰减。
基于同样原因,我们将频率和计算单元数量全部除掉,最后形成了1个流处理器1MHz性能供读者参考。
看到这个结果,相信各位读者都会有不小的惊喜,Fermi架构的特性和设计飞方向体现地淋漓尽致,在更为科学的运算单元组织形式和更充裕的周边资源配合下,GTX480远远超越了对手。这种超越不但来自于规模的放大,而且来自于底层运算单元的改进。
细心的读者已经发现,GTX480的32位整数性能和24位整数性能实际上是一样的,这款GPU已经达到了完整的32位整数运算能力,我们得到的差距只是测试误差。当然我们还是不能排除软件版本的问题,同时我们暂时保留意见,在以后的文章中向各位读者详细讲解。
● CUDA-Z理论性能测试:性能衰减测试
最后我们要做两个测试,测试的具体数值并不是重点,而对于趋势的分析和认识,才是我们想让读者看到的。
这两个测试分别是整数计算性能衰减和浮点计算性能衰减,为了让大家理解更方便,图表中的表述分别是32位整数衰减和双精度衰减,测试结果也就是衰减比率,都是越小越好。
第一个结果,解释了32位整数性能大幅度领先的原因,它体现出Fermi架构的GTX480可以提供和24位整数性能几乎相同的32位整数性能,这是非常难得的,也是NVIDIA和对手AMD这几年不断追求的目标。
第二个结果,解释了GTX480在双精度方面的运算能力变化,我们认为Fermi架构应该拥有1/2的单精度/双精度能力,只是如NVIDIA所说,这项能力在面向图形计算的产品中,被“限制”了。基于G80核心演化的G92和GT215核心,则没有任何双精度浮点运算能力,也谈不上衰减了。
毕竟基于市场划分的考虑,如果廉价的Geforce产品拥有和高端Tesla产品相同的底层运算性能,将会让Tesla销售大打折扣,所以我们能够理解NVIDIA在Geforce产品中做出的双精度限制。
● CUDA-Z理论性能测试总结
今天我们和所有关注GPU发展的用户一道体会了CUDA-Z软件的界面、硬件架构和使用,同时在测试部分我们列出了NVIDIA近4年间,具备通用计算能力的GPU产品性能。
在性能测试中,我们不强调单个数据对产品的影响,而是使用了两种方法让大家对架构更替带来的底层性能提升更加明确。首先是推算了1个流处理器1MHz性能,这个结果可以有效避免GPU运算单元规模堆砌带来的性能提升。其次是测试了性能衰减,这个结果可以有效反映运算单元周边资源的充裕度变化。
NVIDIA和AMD两家公司都意识到了通用计算的重要性
值得注意的是今天我们测试的全部为底层运算单元性能,而非GPU在实际的科学运算中表现出来的性能。也就是说今天的测试偏重存储资源对运算器效率的影响,而忽略了运算器组织结构对全局速度的影响。
从测试结果中,各位读者可以看到这样一条主线,那就是NVIDIA支持通用计算的GPU运算精度不断提升,高精度下的性能衰减不断下降。虽然在这条发展道路上有不少坎坷和曲折,但是这样的发展方向可以保证GPU适应更多计算环境,基于GPU通用计算的软件也会不断增加。
在以后的通用计算测试中,我们准备逐渐开始测试一些经典的通用计算项目,如基于GROMACS分子动力学引擎的Folding@home项目等,这些项目能够检测到GPU在复杂运算环境下实际能力。
从下周开始,中关村在线显卡频道将持续推出一些大家看得见用得上的显卡通用计算程序,比如让你的标清视频在播放时变为高清规格;网页打开更为流畅,Flash动画占用更少CPU资源;更快捷地处理视频与照片;图形画质效果与游戏AI不断提升;甚至包括用GPU暴力破解密码等等。
不要怀疑自己的眼睛,一个本来面向图形世界设计的GPU,经过十多年演化已经变成了一颗并行计算处理器。它能够做的工作,正在迅速膨胀,越来越多的软件将基于GPU通用计算编程。在这个过程中用户能得到的,将是越来越丰富的使用体验和更多种多样的产品选择。