在Photoshop CS4上通过GPU支持,Photoshop打开一个2GB、4.42亿像素的图像文件将非常简单,对图片进行缩放、旋转也不会存在任何延迟。这就是GPU的强大运算能力的体现,而想要实现这一功能,则需要借助于一个接口——CUDA。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
在传统的发展路线中,电脑显示卡一直在为游戏和3D应用程序服务,但是竞争的激烈、技术的飞速前进客观的成就了GPU的爆炸式发展。GPU的运算能力已经达到了非常高的水平,甚至在浮点运算能力上已经大幅度超越最高级别的处理器产品。研究表明,从1993年开始,GPU的性能以每年2.8倍的速度增长,这个数字大大超过了PC其他子系统的发展速度。一块工作频率为3.0GHz的Pentium 4处理器,其晶体管数目为1.25亿个,即使算上SSE指令集的SIMD(单指令并发多数据流,这种情况是浮点吞运算下吐能力的最理想状况),也只有6GFlops的峰值浮点处理能力,而同期的一块NV40 GPU就有2.22亿个晶体管,峰值浮点运算能力很轻易超过40GFlops,而时间发展的今日,GPU的峰值浮点运算能力已经接近甚至超过了TFlops(1000GFlops)级别,GPU的性能可想而知。
『GPU在很多方面已超越CPU,借助CUDA,GPU将会有大展身手的机会』
于是,由这个问题就导致了两方面的考量:一、GPU拥有如此强大的性能,它能否为其它非游戏类的应用程序进行加速,发挥其性能的优势;二、GPU的浮点运算能力虽然强大,但是其架构一直是专有的,无法和目前的x86处理器相比拟,通过什么方法去使用GPU,通过什么方法去让应用程序利用GPU加速。
上述所讲就是NVIDIA最新的理论构想,那就是让GPU超越游戏,去拓展更为广阔的空间。而超越游戏,让GPU为其它应用程序服务,NVIDIA很早就进行了尝试,比如:NVIDIA早就与Adobe公司合作,为其Adobe Acrobat 8及Adobe Reader 8系列产品提供全新的页面显示着色技术,利用GPU来加速PDF格式下的绘图及显示功能,除了在效能上有所增进外,还可以利用GPU的可编程特性,进一步加强PDF文件中的2D内容展示效果,包括平移、卷动、缩放等,实际上Adobe Reader 8每一项运用到GPU的功能都有着显著的效能增进。使用者过去避免使用的一些应用,例如可进行极精细比例缩放的地图,现在都可以轻易地显示。
而想要实现这些功能,必然需要显卡与应用程序之间有一个良好的程序接口,这就是CUDA。其时早在G80时代,NVIDIA就提出了CUDA的概念,只不过因为那时候CUDA还未成型,所以没有公布,而现在,基于CUDA的应用程序越来越多,因此到了GTX200系列芯片的发布,CUDA才同时正式大范围的推广并介绍给普通消费者。
GPU辅助计算机进行并行运算在近两年来得到了非常迅猛的发展,其实借助GPU进行非图形运算早就有之。而CUDA不同于以往的图形处理技术地方就是它能够抛开原有的图形接口Direct3D或者OpenGL,而直接调用GPU的硬件资源,从这一点上来说,这要比最初的GPGPU技术更为先进。开放性标准使得OpenGL更加具有便携性和普遍性,它们允许不同的图形芯片能够采用完全相同的代码。虽然如此,不过这种方法同样拥有它们的弊端,那就是在提高了编程的灵活性同时,他们不能使用某些显卡上的特殊功能,例如快速共享内存等。
『CUDA的应用范围广泛,而且更容易调用和发挥GPU的效能』
这就是为何NVIDIA公司推出了像CUDA这样的东西,采用C语言编程,拥有自己的编译器来实现调用GPU进行辅助并行计算的功能。当然,为图形处理器编写程序代码并非易事,这是一项非常耗费体力的工作。不过CUDA能够实现更多的功能,让程序员更加轻松的驾驭GPU的性能。最重要的是,NVIDIA的CUDA能够支持G8x、G9x以及GT2xx系列图形核心,也就是说,只要用户或者程序员拥有一块GeForce 8、GeForce 9或者GeForce GT200系列的显卡就可以实现。并且在最新的CUDA 2.0版本当中,还加入了双精度浮点运算功能。另外,CUDA能够支持的操作系统也更为广泛,包括了Windows XP 32/64bit、Windows VISTA 32/64bit、Linux以及MacOS的各种操作系统。
由于GPU的特点是处理密集型数据和并行数据计算,因此CUDA非常适合需要大规模并行计算的领域。目前CUDA除了可以用C语言开发,也已经提供FORTRAN的应用接口,未来可以预计CUDA会支持C++、Java、Python等各类语言。虽然现在更多的应用在游戏、图形动画、科学计算、地质、生物、物理模拟等领域,但是由于GPU本身的通用特性和CUDA提供的方便的开发环境,我们可以放开思维的束缚,想象任何可能的应用场景。