|
CUDA,让你梦想成真
CUDA,如今这个名词越来越多的出现在了我们的眼里。虽然说,目前来看,CUDA可能和我们目前的电脑应用并没有太明显的关系,不过相信随着未来越来越多的软件支持,CUDA最终将会走入我们每个人的电脑应用当中。前面我们说的那个例子,虽然现时来看并不太可能实现,不过,我们却很有可能在下一代的PhotoShop当中看到这一功能付诸实践。
在Photoshop Creative Suite Next上通过GPU、物理加速的支持。Photoshop打开一个2GB、4.42亿像素的图像文件将非常简单,对图片进行缩放、旋转也不会存在任何延迟。这就是GPU的强大运算能力的体现,而想要实现这一功能,则需要借助于一个接口——CUDA。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。
在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
CUDA诞生的意义以及CUDA的应用领域
◆CUDA诞生的意义:
在传统的发展路线中,电脑显示卡一直在为游戏和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的性能可想而知。
『早在G80时代NVIDIA就已经提出了CUDA的概念』
而想要实现这些功能,必然需要显卡与应用程序之间有一个良好的程序接口,这就是CUDA。其时早在G80时代,NVIDIA就提出了CUDA的概念,只不过因为那时候CUDA还未成型,所以没有公布,而现在,基于CUDA的应用程序越来越多,因此到了GTX200系列芯片的发布,CUDA才同时正式大范围的推广并介绍给普通消费者。
◆CUDA的应用范围:
由于GPU的特点是处理密集型数据和并行数据计算,因此CUDA非常适合需要大规模并行计算的领域。目前CUDA除了可以用C语言开发,也已经提供FORTRAN的应用接口,未来可以预计CUDA会支持C++、Java、Python等各类语言。虽然现在更多的应用在游戏、图形动画、科学计算、地质、生物、物理模拟等领域,但是由于GPU本身的通用特性和CUDA提供的方便的开发环境,我们可以放开思维的束缚,想象几种可能的应用场景:
搜索引擎中的排序、文本分类等相关算法的应用
数据库、数据挖掘
电信、金融、证券数据分析
数理统计分析
生物医药工程
导航识别
军事模拟
无线射频模拟
图像语音识别
这些领域内的计算都是属于大规模的数据密集型计算,因此我们完全有理由相信,在CUDA的驱动下,GPU能够在这些领域建立一个属于自己的新时代。
应用开发很简单,CUDA的软硬件需求
CUDA是一个全新的软硬件架构,可以将GPU视为一个并行数据计算的设备(通俗来讲,我们可以把它简单的看做是一个用途专一的CPU阵列),对所进行的计算进行分配和管理。
并且,CUDA最大的优势在于,无需像传统GPGPU那样必须将计算映射到API接口上(也就是显卡名词当中常见的OpenGL或者Direct 3D),开发人员只需要懂得C语言,就可以开始对CUDA的软件进行开发了。而对于用户而言,更加简单,只要安装好驱动程序,然后就可以运行基于CUDA开发的程序了。
我们来看看对于CUDA的卡发者和用户群来说,都需要哪些硬件设施。CUDA支持的GPU (CUDA-enabled GPU)包含GeForce、Quadro和Tesla三个系列:GeForce是NVIDIA公司面向消费市场的GPU产品;Quadro是面向专业图形市场的GPU产品;而Tesla则是专门面向GPU计算的产品,它不具备图形输出的功能,因此不能作为图形卡来使用。这三个产品面向不同的应用领域,因此建议在开发和部署CUDA应用的时候需要考虑到产品的应用决定采用不同的GPU。
NVIDIA的CUDA-enabled GPU具有一个完整的产品线,各种用户都可以从中选择到合适自己的产品。对于有高密度计算能力需求的用户来说,Quadro和Tesla则是必须的选择。诸如Quadro Plex 1000 Model S4和Tesla S870在一个1U高度的标准服务器机架机箱内装备了四个GPU,每个GPU具备128个stream processor以及1.5GB的存储器,每个1U装置总共具备512个stream processor和6GB存储器,非常适合于有高密度、大规模数据计算需求的用户。CUDA-enabled GPU的家族还在不断地扩大之中,随着NVIDIA新一代GPU的发布,更多的产品也将加入到这个行列中来。
另外,CUDA对于GPU产品线还涵盖了从笔记本电脑到高性能多GPU的系统中。也就是说,对于普通用户来讲,我们使用的普通笔记本或者台式电脑,只要拥有一块NVIDIA的GeForce 8以上级别的显卡都能够支持CUDA。
◆软件需求:
对于普通的应用者来说,对于软件方面,只要安装了一款能够支持CUDA的驱动程序,就可以了。接下来需要做的就是使用那些能够支持CUDA的软件。对于目前来说,能够支持CUDA的软件还是有些偏少,不过随着越来越多的软件开发者加入CUDA的行列,日后能够支持CUDA的软件将会逐渐完善起来。
而对于CUDA的开发者来说,开发CUDA的软件也非常简单。开发者只要会运用C语言编程,就能够顺利的学会CUDA。因为CUDA就是基于C语言为基础的,CUDA可以支持多种运行在Windows XP和Linux操作系统下的C开发系统诸如Microsoft Visual C++等。CUDA工具集的核其实心是一个C语言编译器,CUDA开发环境的具体内容包括:
· nvcc C语言编译器
· 适用于GPU(图形处理器)的CUDA FFT和BLAS库
· 分析器
· 适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版)
· CUDA运行时(CUDA runtime)驱动程序(目前在标准的NVIDIA GPU驱动中也提供)
· CUDA编程手册
除了编译器外,NVIDIA提供了一些非常实用的函数库。目前有两个数字计算库包含在已经发布的软件包里面,分别是CUDA FFT和CUDA BLAS子程序库。CUDA FFT是快速傅立叶变换(Fast Fourier Transform, FFT)的子程序库,快速傅立叶变换是信号处理之类应用的基本算法。BLAS是基本线性代数的子程序库,提供了高效率的线性代数计算子程序。CUDA FFT和BLAS都是针对GPU高度优化的高性能数学函数库,在CUDA程序中可以方便调用,节省大量的代码编写时间。
另外,CUDA所有软件包都可以从NVIDIA公司的网站上免费下载。NVIDIA还专门建立了一个针对CUDA的名为CUDA Zone社区,网址是 http://www.nvidia.com/object/cuda_home.html。它包含各种程序、文档的下载,并且有几个针对开发者的论坛,里面有专人为各位开发者进行服务,解答各种疑问。
除此以外,NVIDIA提供了开发指南和大量的第三方应用实例,所有这些资料均可以从NVIDIA CUDA Zone里面下载。
为何使用CUDA?CUDA都有哪些优势
首先要说明的一点是,CUDA尤其擅长的是某一方面,而并不是面面俱到。CUDA的开发是基于NVIDIA GPU平台的,因此发挥GPU的并行优势才是最主要的目的。
理论上讲,CUDA对于非图形的计算并没有什么限制,不过它还是相对比较适合高度并行的计算,毕竟这是它的长处。这里所谓的高度并行的数量级为上千个,相对于CPU来讲,双核的CPU也许几个线程就能充满它整个的计算单元,然而CUDA-enabled GPU却能够容纳上千个线程(也就是GPU中数百个SP单元的功力),所以常遇到的高性能计算领域的问题就特别适用于CUDA,而之前通常采用计算机集群的方式来进行计算。
而目前GPU已经发展到十分强大的地步,从GeForce6开始,就能够支持比较复杂的控制指令,比如条件转移、分支、循环和子程序调用等。而到了新一代的显卡,GPU的程序控制能力又增强了很多,支持的程序长度也得到了更大的扩展,也就是说利用GPU还是可以写一些比较复杂的程序。
当然CUDA也有其弱势的地方,其还是主要去做那些能够分成很多个独立线程的数值计算。比如说矩阵的乘法计算,矩阵相对应的元素的计算是没有什么联系的,可以很多个线程同时送入很多个处理器进行并行处理,这就非常适合于用CUDA来解决。当然并不是所有的事情CUDA都能够很好地解决,比如像操作系统这样复杂的指令和纷繁的分支循环而又用很少的线程来处理,这显然就不是CUDA的强项了。高度并行的计算是CUDA的技术特性之一。
『GPU的架构非常合适进行大规模的并行计算』
CUDA已经应用在很多领域,包括在通用计算中的一些GPU加速,游戏中的物理模拟等等,而在科学计算中,CUDA可发挥的功效就更大了。比如有限元的计算、神经元的研究计算、地质分析等等科学研究的领域;当然目前GPU计算的应用还是处于一个早期的阶段,大部分CUDA应用都是专业人员和相关的程序员在开发,随着CUDA的广泛推行,以后会有实际的基于CUDA的程序,更多的程序员能够加入进来,并且开发一些可以给大家日常应用带来好处的程序,只要有支持CUDA的GPU就能够利用到GPU计算的好处。
最后来说明一下某些读者对于CUDA的误解,可能有人认为“有了GPU之后CPU就不需要了”,这也是不对的。显然,GPU和CPU还是做不同的工作的,GPU的计算主要集中在高效率低成本的高性能并行计算,所以事实上在一个系统里面,一个高效的GPU配合一个高效的CPU,整体的效率还是会有明显提升的。
目前能够支持CUDA的应用软件介绍(一)在我们了解了CUDA的需求之后,对于本文的绝大多数读者来说,他们更想要了解的应该就是CUDA对于我们普通用户究竟是否有实际意义,并且,目前真的又能够支持CUDA的应用程序么?这些程序是否如同前面所描述的那么好?下面我们就先来简单了解一下目前常见的几款能够支持CUDA的应用软件:
◆ Google earth需要3D加速
Google earth是一款3D地图显示软件,它能够将地球上某一区域的地貌,以3D图像的形式展现出来。这款软件读者都很熟悉,早期的Google earth从2D起步,但是随着深入发展和商业应用,这款软件也进入了3D化,很显然,这类软件将会逐渐成为我们今后生活的必备软件。
目前能够支持CUDA的应用软件介绍(二)
◆ 连PDF都需要GPU加速
随着计算机的发展,图形、图像的显示成为越来越重要的工作。现在连阅读传统的PDF文件,都离不开GPU的加速了。早在2007年,Adobe就与NVIDIA展开合作,推出了支持GPU加速的PDF版本。
整个从起点到终点都是3D显示周围的实物,其中包括耸立的建筑物、街道等等,如果有NVIDIA GPU的图形加速,可以让这个过程非常流畅。
实际检验GPU能力——视频编码:Badaboom
进行视频编码的操作我们平时经常用到,例如我们要将从网络上下载或者从DVD上获得的视频文件进行重新的编码压缩,才能传到我们手机、IPOD、iPhone以及PSP中观看。一般情况下视频编码完全是由CPU进行计算处理,CPU性能越强,编码速度越快。
不过在应用CUDA技术的GeForce GTX280上,我们可以使用GPU的强大性能来进行视频编码。经过实测,其速度要比CPU编码超出数倍。 |
|