CUDA vs GPGPU

http://www.kuqin.com/hardware/20080830/15726.html

一 在硬件和软件之间选择 
    “计算机软件和硬件的逻辑等价性”是计算机组成原理中一个非常重要的理论,意思是指计算机硬件能够完成的功能,逻辑上都能通过软件来同样实现。这一理论带来的实际好处是,使得我们今天的使用的计算机日趋小型化,成本和价格不断降低。比如,多年前我们需要用解压卡才能在PC上观看影碟,今天我们只需通过视频播放软件就行,当然这些都得益于伟大的“摩尔定律”在过去一直发挥的神奇功效。 

    所有的硬件厂商,都挣扎在软件和硬件之间。在设计研发产品时,同样的功能,使用硬件的方式实现还是软件,他们一直在做着艰难的选择。当然,大部分的选择都会受制于当时的其它外围软硬件计算环境。 

    然而,随着时间的推移和技术的发展,硬件技术厂商也感觉越来越难以完成“摩尔定律”的预期,业界对此定律怀疑的声音也甚嚣尘上。这些怀疑的声音也让越来越多的人认识到,并不是所有的硬件都能被或者应该被软件替代,特别是在某些特定的计算领域,如图形成像,多媒体数据处理等。我们不难注意到,在计算机体系结构的发展过程中,大量的硬件已经消失了,但是,部分核心的硬件设备在计算机体系结构中势必会长期存在。这种硬件不断消亡的过程和趋势,会加剧计算机中所剩无几的硬件设备之间的相互争夺,争夺在这个体系结构中的霸主地位。

    目前业界Intel为代表的CPU芯片厂商和独立显卡提供商NVIDIA之间的关于CPU和GPU之争,正是在这种背景下生的。 
尽管从当前来看,在一台均衡计算的计算机系统中,CPU和GPU还是各司其职,除了图形运算,GPU主要集中在高效率低成本的高性能并行数值计算,帮助CPU分担这种类型的计算,提高系统这方面的性能。 

    GPU的计算能力不断加强,能部分取代CPU的计算功能是不争的事实,当NVIDIA通过收购物理处理器厂商AGEIA,推出CUDA(统一计算设备架构)之后,一个让CPU厂商坐立不安的局面似乎要出现了。

    
 
    Cuda做为一个可编程的GPU计算架构,如果这种可编程架构能够影响甚至主导前端的应用,的确能够带给人无尽的遐想。CUDA是否会影响未来企业计算的格局呢? 

资料: 
    CPU微架构的设计是面向指令执行高效率而设计的,因而CPU是计算机中设计最复杂的芯片。和GPU相比,CPU核心的重复设计部分不多,这种复杂性不能仅以晶体管的多寡来衡量,这种复杂性来自于实现:如程序分支预测,推测执行,多重嵌套分支执行,并行执行时候的指令相关性和数据相关性,多核协同处理时候的数据一致性等等复杂逻辑。

    GPU其实是由硬件实现的一组图形函数的集合,这些函数主要用于绘制各种图形所需要的运算。这些和像素,光影处理,3D 坐标变换等相关的运算由GPU硬件加速来实现。图形运算的特点是大量同类型数据的密集运算——如图形数据的矩阵运算,GPU的微架构就是面向适合于矩阵类型的数值计算而设计的,大量重复设计的计算单元,这类计算可以分成众多独立的数值计算——大量数值运算的线程,而且数据之间没有像程序执行的那种逻辑关联性。 

    因此从微架构上看,CPU擅长的是像操作系统、系统软件和通用应用程序这类拥有复杂指令调度、循环、分支、逻辑判断以及执行等的程序任务。它的并行优势是程序执行层面的,程序逻辑的复杂度也限定了程序执行的指令并行性,上百个并行程序执行的线程基本看不到。GPU擅长的是图形类的或者是非图形类的高度并行数值计算,GPU可以容纳上千个没有逻辑关系的数值计算线程,它的优势是无逻辑关系数据的并行计算。

    CPU擅长的:操作系统,系统软件,应用程序,通用计算,系统控制等等;游戏中人工智能,物理模拟等等;3D建模-光线追踪渲染;虚拟化技术——抽象硬件,同时运行多个操作系统或者一个操作系统的多个副本等等。 
GPU擅长的:图形类矩阵运算,非图形类并行数值计算,高端3D游戏。

二 GPU与CPU之争对企业计算的影响 
    客观地讲,在这二者的争论没有明确的胜负之前,不会给企业计算带来任何影响,企业计算领域对任何趋势性的技术的反应程度相较个人领域,往往要慢上3-5年。 

   回忆一下,2008年的IDF大会在这个问题上显得火药味十足。英特尔高级副总裁兼数字企业事业部总经理基辛格在演讲中表示:“在下一代视觉计算中,显卡产业已经走到了尽头,取而代之的是可编程的显示计算通用架构芯片。在三四年之后,随着相关技术、产品成熟上市,显卡产业将会消亡。” 

   按照他的观点,随着CPU在未来应用中占据越来越重要的地位,显卡会慢慢被集成化所取代。GPU将最终成为CPU的“一部分”。在具体动作上,也身体力行,英特尔开发了一套面向可编程的显示计算通用架构芯片的全新架构———Larrabee架构,这种架构可支持更多的可编程核心。英特尔希望通过推出CPU新架构,令CPU内整合图形处理芯片成为现实。 

   英特尔“显卡走到尽头”的观点立刻引起独立显卡龙头厂商NVIDIA的强烈反击。NVIDIA的CEO黄仁勋甚至公开质疑英特尔的整合图形芯片组“完全是一个笑话”。
 
   NVIDIA的副总裁RoyTaylor更是直言,“CPU与GPU的战争已经开始,CPU已死亡。”他称,“现在PC里唯一需要提升性能的是GPU,而这就是NVIDIA努力的方向。”NVIDIA提出的“GPGPU(通用图形处理器)”的概念,就是要将CPU整合到GPU中去 

   笔者认为,GPU和CPU目前的竞争目标有些错位,大家都是希望能互相取代对方,而不是优势互补。而优势互补是目前能看到的结局,当然不排除这期间厂商突破某些核心技术。 

   据了解,CUDA GPU运算广泛适用于需要处理大量数据的应用。例如,在游戏中我们可以使用CUDA来让GPU承担整个物理计算,而玩家将会获得另他们感到惊奇的性能和视觉效果。另外,用于产品开发和巨量数据分析的商业软件也可以通过它来使用一台工作站或者服务器完成以前需要大规模的计算系统才能完成的工作。这一技术突破使得客户可以任何地方进行实时分析与决策。同时,一些以前需要很先进的计算技术来达到的强大计算能力的科学应用程序,也不再受限在计算密度上;使用CUDA的计算可以在现有的空间里为平台提供更强大的计算性能。 

   我们知道,企业计算的核心问题是性能和高可用,Cuda在性能方面给出了单使用CPU无法达到的完美憧憬,不过其编程难度也不容忽视。Cuda如果想在基于通用计算模式的大量企业应用中有所作为,必须解决编程的难度和编译工具的易用性。众所周知,即便在通用计算领域,能熟练开发多线程和分布式应用的程序员也不是很多。 

   就cuda目前提供的应用案例来看,其应用分布在科学计算和高性能应用方面,如分子动力学模拟、傅立叶立体成像等仿真和模拟计算等。CUDA技术的创始人之一David Kirk博士在清华讲座时提到了一些基于cuda的有趣应用。中科院物理所的一位老师做的分子流体模拟,就是把分子的范德化力(其模型相对复杂)考虑进去。他制作了一个包含几亿个分子水滴,然后进行 模拟。由于每个水滴之间的范德华力只在周围的范围内有效,因此可以把每个分子的受力状况看做是不相干的或弱相干的。这种应用场景,就非常适于CUDA。 

   上面的例子是在科学计算领域,如何将cuda的高性能计算扩展到常规的高性能企业应用,比如,让一个基于cuda的服务程序来处理手机短信网关收到的上千万条并发短信请求。
 
   再比如股票分析软件。它是以复杂计算为基础,进行整个美国股市的实时分析的一个软件。由于股票之间的情况异常复杂,造成经济学上的公式无法准确预测时间稍微一点的大盘情况。然而,有了CUDA,我们就可以在几百毫秒之内计算出当前的全美的大盘走势,这通常将花费数分钟时间,等我们得到结果之后,它已经没用了。CUDA让股票分析软件从不可能成为了可能。 
当有许多类似于这样的应用产生时,cuda架构才真正走进了企业计算。

三 Cuda编程如何普及 
   降低cuda编程的难度是普及cuda编程的基本条件。 

   尽管CUDA运行在GPU上,“CUDA编程”和“GPGPU编程”并不相同。以前,为GPU编写软件意味着使用GPU语言编程。CUDA允许开发者使用熟悉的编程概念开发能在GPU上运行的软件。它可以通过将软件直接编译到硬件(例如,GPU汇编语言)避免图形层API的性能开销,这样可以提供更好的性能。 

   尽管cuda编程相比传统GPU编程已经接近了开发者很多,但是有开发人员在尝试后发现,CUDA编程的难度还是相当大。一位名叫Bryan O"Sullivan的研发人员表示,CUDA的复杂性令人难以置信,迫使程序员不得不在三种不同的存储器类型、繁复的线程层次、无法自动完成多数任务的编译器之间苦苦挣扎。他在博客说:“细细阅读开发说明是非常有必要的,不然就无法理解CUDA是多么复杂,以及开发人员不得不同时记住多少不同的条条框框。” 

   毕竟传统计算模式下的编程发展了多年,轻松的编程方式和快捷的工具数不胜数。Cuda想要俘获开发人员还需要在这些方面做更多的努力。 

资料: 
使用CUDA的软件开发 
   CUDA开发包是一个完整的使用GPU的软件开发方案。在SDK包含了标准的FFT和BLAS库、使用NV GPU的C编译器和运行时驱动。CUDA运行时驱动是与常用的同DX和GL协同工作的驱动独立的。同时CUDA对Linux和XP的支持也是相同的。 

技术特性
CUDA为线程计算提供了一个统一的硬件和软件解决方案来使用支持CUDA的GPU 
可支持CUDA的GPU为高性能计算提供并行数据缓冲和线程执行管理器的支持 
可以在GPU上使用的标准C语言 
提供了标准数值库FFT和BLAS 
为计算提供了独立的CUDA驱动 
优化了GPU和CPU之间的数据通信路径 
CUDA驱动可以在图形设备之间互操作 
支持 LINUX 与 XP 操作系统 
从高性能的专业图形解决方案到移动和嵌入式GPU均能使用 
为高计算密度程序内建多GPU支持 
为程序开发和优化提供硬件调试的性能测试的支持

四 cuda技术展望 
    近期盛行于网络的IT十大技术预测中,其中提到一条,今后10年之内,将会出现集成了操作系统的主板。这个预测的本质无非是向人们彰显芯片技术的发展以及硬件的力量。在处理器芯片向多核迈进的同时,计算机的计算能力也从CPU向横向的硬件设备发展,这就是计算机系统结构中的多计算单元架构。 

    集成了高性能芯片的其它计算单元带来的计算革命将是罕见和空前的,它将会给今后的软件开发技术带来极大的挑战,而基于GPU的cuda技术架构便是其中的先行者。 

    GPGPU是一个神奇的事物,因为如果处理得好的话,那么可以几千倍的打破摩尔定律,而跳跃到下一个时代。GPGPU的问题就在于编程的痛苦性太高, CUDA就是为此目的而设计,尽管编程难度还需进一步降低,但至少已经使开发者可以依据现有经验编程了。 

    正如David Kirk博士所言,计算性能提高十倍会使现在的工具变得很方便,计算性能提高一百倍会使现在的软件更新换代。而计算性能提高一千倍,则会彻底改变人们的工作方式。曾经不可能的慢慢变为可能。我们期待着CUDA技术以及未来的新的GPGPU技术能够带领我们走向新的时代!

原文地址:https://www.cnblogs.com/baiyw/p/3470291.html