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技术能够带领我们走向新的时代!

CUDA vs GPGPU的更多相关文章

  1. 基于GPU的高分一号影像正射校正的设计与实现

    一 RPC正射校正的原理 影像正射校正的方法有很多,主要包含两大类:一类是严格的几何纠正模型,另一类是近似几何纠正模型.当遥感影像的成像模型和有关参数已知时,可以根据严格的成像模型来校正图像,这种方法 ...

  2. 开源项目OEIP 游戏引擎与音视频多媒体(UE4/Unity3D)

    现开源一个项目 OEIP 项目实现的功能Demo展示 这个项目演示了在UE4中,接入摄像机通过OEIP直接输出到UE4纹理上,并直接把UE4里的RenderTarget当做输入源通过OEIP里GPU管 ...

  3. 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项

    GPGPU OpenCL/CUDA 高性能编程的10大注意事项 1.展开循环 如果提前知道了循环的次数,可以进行循环展开,这样省去了循环条件的比较次数.但是同时也不能使得kernel代码太大. 循环展 ...

  4. GPGPU OpenCL/CUDA 高性能编程的10大注意事项

    转载自:http://hc.csdn.net/contents/content_details?type=1&id=341 1.展开循环 如果提前知道了循环的次数,可以进行循环展开,这样省去了 ...

  5. CUDA程序设计(一)

    为什么需要GPU 几年前我启动并主导了一个项目,当时还在谷歌,这个项目叫谷歌大脑.该项目利用谷歌的计算基础设施来构建神经网络. 规模大概比之前的神经网络扩大了一百倍,我们的方法是用约一千台电脑.这确实 ...

  6. CUDA编程

    目录: 1.什么是CUDA 2.为什么要用到CUDA 3.CUDA环境搭建 4.第一个CUDA程序 5. CUDA编程 5.1. 基本概念 5.2. 线程层次结构 5.3. 存储器层次结构 5.4. ...

  7. CUDA从入门到精通

    http://blog.csdn.net/augusdi/article/details/12833235 CUDA从入门到精通(零):写在前面 在老板的要求下.本博主从2012年上高性能计算课程開始 ...

  8. 利用GPGPU计算大规模群落仿真行为

    0x00 前言 在今年6月的Unite Europe 2017大会上 Unity 的CTO Joachim Ante演示了未来Unity新的编程特性--C# Job系统,它提供了编写多线程代码的一种既 ...

  9. CPU、GPU、CUDA、cuDNN

    CPU擅长逻辑处理控制,GPU适合高强度的并行计算任务,为什么会存在这种差别?今天搜集了些相关资料,摘抄总结如下. 一.什么是GPU GPU这个概念是由Nvidia公司于1999年提出的.GPU是显卡 ...

随机推荐

  1. UITabBarController支持旋转

    1.默认的UITabBarController不支持四个方向,但可以给UITabBarController增加一个类别,实现旋转:具体做法: 在工程添加一个.h和.m文件如下: //Rotation. ...

  2. iOS---->CADisplayLink、比NSTimer更精确的定时器

    什么是CADisplayLink CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器.我们在应用中创建一个新的 CADisplayLink 对象,把它添加到一个r ...

  3. iOS学习笔记49-Swift(九)访问控制

    一.Swift的访问控制 Swift中的访问控制模型基于模块和源文件这两个概念 模块指的是Framework或App bundle.在Swift中,可以用import关键字引入自己的工程. 源文件指的 ...

  4. 《Spark Python API 官方文档中文版》 之 pyspark.sql (三)

    摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...

  5. Golang指针

    学过C语言的老司机都知道,指针就是一个变量,用于存储另一个变量的内存地址. 那么什么是变量呢?在现代计算机体系结构中所有的需要执行的信息代码都需要存储在内存中,为了管理存储在内存的数据,内存是划分为不 ...

  6. bzoj3924 [Zjoi2015]幻想乡战略游戏 点分树,动态点分

    [BZOJ3924][Zjoi2015]幻想乡战略游戏 Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网 ...

  7. Linux System Programming 学习笔记(九) 内存管理

    1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系 ...

  8. FOJ Problem 2260 Card Game

                                                                                            Problem 2260 ...

  9. spring和resteasy 的集成方式

    spring和resteasy集成,三种主要的方式, 对于和jboss as7的集成不需要做任何工作,jboss默认集成了resteasy,只需要对业务pojo做一些jax-rs的注解标注即可.这里讲 ...

  10. 应用seajs 做了个向上滚动的demo

    目录结构式这样滴 sea sea-module jquery-1.10.2.min.js sea.js static css t.min.css img test test.min.js main.j ...