未来就在眼前:CUDA的实用化
NVIDIA其实对Geforce 9000系列产品的3D性能已经非常满意,而在Geforce GTX 280这款产品上NVIDIA更多的是体现其在3D之外的性能表现上。流处理器和统一架构的出现,进一步增加了GPU的并行处理能力,而并行处理在3D渲染能力上非常重要外,在很多科学运算中同样重要,NVIDIA看到了用户在这方面的需求,推出了专用于计算的Tesla产品和CUDA。
基于游戏但是超越游戏的NVIDIA GPU应用
而在今天,NVIDIA不仅推出了具有强悍3D性能的Geforce GTX 280,还为我们送来了并行处理能力更强的Geforce GTX 280,随其一并到来的还有全新CUDA 2.0。
在此次新品发布上NVIDIA称Geforce GTX 280为拥有240核的处理器,相对于桌面级CPU而言240核还是一个天文数字。上图为一颗主流中高端双核CPU Core 2 Duo E8400与Geforce GTX 280的核心对比,右侧是对比Intel的Core 2 Duo E8400和顶级Core 2 Extreme 9650浮点运算处理能力,即使是顶级Core 2 Extreme 9650四核处理器的浮点处理能力也仅为Geforce GTX 280的1/10能力,足见这颗接近1TFLOPS(1T=1024G,floating-point operations per second=flops)级别处理能力的Geforce GTX 280强悍。
● CUDA简介
说了半天CUDA也许很多读者对它仅是一知半解,而且很多用户很容易将它与GPGPU混淆,下面笔者将会对其做一个简介。
虽然GPGPU也是由NVIDIA提出并且要实现的目的也相同,但是CUDA是一种更加优化、更加易于操作使用的并行处理技术。CUDA全称Compute Unified Device Architecture,它不需要像GUGPU一样基于图形API运算,这样的设计降低了开发者的要求。首先减免了软件开发者使用CUDA必须了解图形API的痛苦,其次CUDA专用API更接近C语言和Fortran语言,能够令绝大多数软件开发者在极短时间内上手。
● 为何GPU更适合高密度并行计算
由于图形渲染需要高密度、并行计算,因此GPU不会像CPU一样将更多的晶体管投入到数据缓存和流量控制,而是将绝大多数晶体管用于数据处理(例如Geforce GTX 280的240个流处理器)。图形渲染这点需求上与很多科学运算不谋而合,GPU的多流处理器在解决一个问题上实现独立并行高速处理,可以大大降低运算复杂度,并且多数据元素高运算密度可以近似忽略内存访问的延迟,这也就为GPU应用于科学计算奠定基础。
实际上,在图形渲染和处理领域外还有很多算法同样可以通过并行数据处理得到加速,从一般信号处理或物理模拟、到金融计算或者生物计算等。目前主要应用于数学运算、金融分析、医学检查、气像预测、电子线路设计、生物分子结构分柝、光学模拟运算等传统借助超级电脑作运算的领域。
● 如何构建运行CUDA平台
如果想要使用CUDA技术,并不是安装基于CUDA的软件即可,还需要硬件及驱动的支持,目前支持CUDA技术的GPU请看下表:
GeForce | Tesla | Quadro |
9800 GX2 | C870 | FX 5600 |
9800 GTX | D870 | FX 4600 |
9600 GT | S870 | FX 3700 |
8800 Ultra | FX 1700 | |
8800 GTX | FX 570 | |
8800 GTS | FX 370 | |
8800 GT | NVS 290 | |
8800 GS | FX 3600M | |
8600 GTS | FX 1600M | |
8600 GT | FX 570M | |
8500 GT | FX 360M | |
8400 GS | Quadro Plex 1000 Model IV | |
8800M GTX | Quadro Plex 1000 Model S4 | |
8800M GTS | NVS 320M | |
8700M GT | NVS 140M | |
8600M GT | NVS 135M | |
8600M GS | NVS 130M | |
8400M GT | ||
8400M GS | ||
8400M G |
上表为目前已发布并支持CUDA的GPU,当然还要包括今天新鲜出炉的——Geforce GTX 280。
俗话说“万事俱备、只欠东风”,拥有了支持CUDA的显卡还需要专用驱动的搭配。目前Geforce GTX 280需要ForceWare 177.34,非Geforce GTX 280显卡需要174.55。
在支持CUDA的驱动中我们能够看到nvcuda.dl_的专有文件。