似乎在一夜之间,GPU用于通用计算(General Purpose GPU)及其相关方面的问题成为一个十分热门的话题。GPGPU指的是利用图形卡来进行一般意义上的计算,而不是单纯的绘制。让人们感到惊奇的是,在计算机图形处理器多年巡视发展的进程中,几乎没有人认真的预言过这一重大应用。而在今天,由于GPU具备了极高的性能和前所未有的发展速度以及普及率,使得人们对于GPU的这一新的应用前景给予了空前高的期望和热情。小熊在线www.beareyes.com.cn [图38 随着流水线可编程性的提升,GPU已经能做越来越多非图形处理方面的工作] GPU本身的工作环境就非常适合进行简单但运算量非常大的数学运算。研究表明,从1993年开始,GPU的性能以每年2.8倍的速度增长,这个数字大大超过了PC其他子系统的发展速度。一块工作频率为3.0GHz的Pentium 4处理器,其晶体管数目为1.25亿个,即使算上SSE指令集的SIMD(单指令并发多数据流,这种情况是浮点吞运算下吐能力的最理想状况),也只有6GFlops的峰值浮点处理能力,而同期的一块NV40 GPU就有2.22亿个晶体管。峰值浮点运算能力很轻易超过40GFlops。GPU拥有自己的独立子存储系统--显存,它拥有比系统主内存高得多的带宽。Intel曾经为它的Pentium 4 XE系列处理器所拥有的1066MHz前端总线所提供的8.6GB/S的带宽倍感自豪,而同期一块普通的GeForce 6800就拥有20GB/S以上的显存带宽。小熊在线www.beareyes.com.cn 目前而言,离用户最近的GPGPU应用是游戏种的物理加速。由于拥有大量的平行管线、庞大的显存带宽和Thread,GPU非常适合于进行类似物理加速这样的流处理。自从AGEIA宣布推出世界首款物理处理器,物理就成为游戏业界包括3D工业的瞩目话题。ATi表示他们的GPU具有物理硬件加速能力,而后Havok则宣布了支持GPU加速的物理引擎Havok FX,nVIDIA和Havok联合宣布结成技术伙伴关系。nVIDIA将采用Havok的Havok FX API,使用NVIDIA GPU完成物理加速工作。众多游戏厂商也宣布将推出支持物理加速的游戏。物理特性在一时之间成为了下一代硬件甚至游戏的最大卖点之一。小熊在线www.beareyes.com.cn GPU进行物理运算的先天优势 对于完全Multi-Threading化的G8X来讲,物理运算跟普通图形处理没什么区别,都是将数据线程化,然后送进ALU运算。不同的是数据本身而已。当然,这要求游戏,驱动程序和编译器的共同支持才能实现。小熊在线www.beareyes.com.cn 基于Multi-Threading体系的物理运算
另一方面,物理运算以外的GPGPU应用目前存在的问题还是比较多的,因为图形硬件还存在很大的局限性,GPU毕竟是为了图形渲染而生,其通用性离真正的通用处理器还有很大一段距离。IO方面的问题一直是困扰GPU在通用计算领域迈开脚步的一个重要原因。GPU的显存控制器没有CPU的那么“聪明”,只能通过顶点纹理来读取DRAM中的数据,通过渲染到纹理来写入数据,对于显存没有任何间接的写指令。输出地址只能由光栅化引擎决定,不能由程序改变,无法进行任意的读写操作,因此必须将计算的中间结果保存以避免多次读写,但这无形中降低了GPU的性能。浮点精度是另一个困扰GPU通用计算的问题。DX9的GPU只支持R16F格式的浮点数据类型,这种单精度的IEEE格式对于通常所用的工程计算而言是远远不够的。小熊在线www.beareyes.com.cn 不过,G8X已经决心要改变当前的这些状况。G8X有了一整套针对GPGPU的解决方案,被称作Compute Unified Device Architecture,简称CUDA。CUDA是一个完整的解决方案,包含了API、C编译器等。 CUDA的线程计算架构
CUDA的核心内容就是线程计算(Threading-Computing Architecture)。也就是说,G8X GPU本身并不会去在意输入进来的数据是什么类型,不管要运算的是一段Shader,或者是物理运算,还是其他通用计算程序,GPU都不会去刻意加以区别。线程管理调度器会将接收到的任何数据类型都平行的“塞”到它所维持的线程(Thread)中去,然后根据管理机制和流水线状况将这些线程高效的递给它所管理的ALU去执行。CUDA体系够利用G8X的On-Chip Cache共享各个Thread数据,使数据不必经过内存-显存的反复传输,Shader之间甚至可以互相通信。对数据的存储也不再约束于以往GPGPU的渲染到纹理的方式,存取更加灵活,并且可以充分利用stream out特性。这些特点都将大大提高GPGPU应用的效率。小熊在线www.beareyes.com.cn G8X通过Shared Memory交换Thread之间的数据,效率大大提高 G8X支持微软在DirectX10中首次引入的一种新的显存虚拟体系--显存分页技术,为消除GPGPU时的I/O瓶颈走出了第一步。类似与CPU的虚拟内存技术,虚拟显存体系将虚拟显存段划分成4KB固定大小的单元页,每个页在需要之前可位于显存中,或在主内存里,当这个页面里有GPU流水线所需要的数据时,GPU就能直接对虚拟显存进行寻址,加载这个页面的数据。这个新体系的角色实际上是管理分配实际显存页面帧并且解析程序对虚拟显存页面的引用。在支持这个体系的模型中,所有的纹理、着色信息等被分成的小块,即使在低速总线上也能流畅传输。例如,一个4KB大小的页面相当于一个32X32X32bit的纹理贴图。这样在需要纹理渲染时系统不需要传输太多的“页面”就能完成相应工作,做到这一切只会有和小的性能损失。小熊在线www.beareyes.com.cn DX10开始引入的虚拟显存技术是CPU上的虚拟内存技术的衍生版本 G8X拥有类似CPU的显存管理体系 |