孟岩ID:myan
[修改头像]
1552938次访问,排名6好友1人,关注者32
总是在思考存在的问题
myan的文章
原创 146 篇
翻译 0 篇
转载 3 篇
评论 5196 篇
最近评论
lschou520:怎么会忘记印度、日本和欧洲呢?
daijunhua:支持,中华儿女,互相护持地走!
ranzj:我只抱怨自己的努力不够。
ranzj:我毫不怀疑 SilverLight 是个“钱”途无量的玩意儿。
winvc:还有 之前已经看到过一篇署名孟岩的文章了 也是自称学计算机的 在MOP发的文章 题目是《不知名的程序员写给想学编程的朋友》(最后署名前还特别声明了下自己是初中文化全靠自学的 大哥 这样的人全国有几千万 没几个比你这种货色差的)

那文章是看的我想吐 不知道是你还是重名了 不过咋跟你这篇文章风格这么像呢 都是不懂 逻辑混乱 瞎喷
你是自己想不明白问题 但认为自己想……
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    测试
    友情链接
    老赵的博客
    存档

    原创 计算基础正在发生根本变革——解读“计算2.0”

    新一篇: 程序员是真正的主角——SD2.0大会有感

     

    计算基础正在发生根本变革——解读“计算2.0

    孟岩

     

    从本质上看,软件实际上只是夹在人与硬件之间的一个中间层,人们使用软件的根本目的还是要让硬件运转起来为自己服务。硬件平台如果长期稳定,软件就能够安稳发展,建起高楼大厦,硬件基础如果打个喷嚏,软件就会得一场感冒。过去十几年来,我们的计算环境已经发生了很多变化,比如RISC的兴起,大规模服务器集群的发展,SIMD的普及,特别是网络的大发展,令人印象深刻。每一项变化都给软件带来一定程度的冲击。不过大部分情况下,这种冲击力度有限:只需要有一小部分人去关注就好了,他们会尽可能把这些变化包装起来,从而使得其余的绝大部分人不受影响,而又能够享受硬件发展带来的免费午餐。比如说,RISC跟硬件平台带来的变革是非常巨大的,但是只有编译器和操作系统开发者真正需要关注它。SIMDMMX3DNow!SSEx)的发展使普通计算机处理多媒体数据的能力获得了本质提升,但是厂商们也推出了一系列封装库,使应用软件开发者们在不需对开发方式做重大改变的情况下享受这些发展成果。

     

    然而站在今天这个时间点上往前看,就会看到,情况在发生的变化。发生在若干个不同领域的硬件进展,几乎在同时达到了可以被称之为“本质变化”的状态。而所有这些变化结合起来,则使我们面对一个自1980年代初PC崛起以来从来没有过的局面,一个可以毫不夸张地称之为“变革”的局面,我们称之为“计算2.0。在“计算2.0的时代里,软件开发者面对的平台会发生巨大的变化,而且这些变化很多是非常本质的,无法简单地使用“包装”的手段屏蔽掉,从而要求软件开发的实践也必将随之发生巨大的变化。这对软件产业的每一个人来说,是历史上很少会遇到的情况,给我们带来巨大的挑战和机遇。

     

    下面就让我们一起来展望一下“计算2.0将给我们带来的冲击。

     

    1. 多核与并发编程[1]

    自从2005年初C++标准委员会主席Herb Sutter发表《并发的革命——免费午餐已经结束》的著名文章以来,多核已经成为整个软件社群里热门话题。在那篇文章里,Herb Sutter断言说,CPU频率的提高已经接近极限,摩尔定律的发展今后将依赖多核化进行下去,因此,软件若要在未来的环境下生存,必须考虑并发问题。接着,Herb Sutter做出了更大胆和更惊人的语言,那就是不存在解决多核编程问题的银弹,不存在可以简单地将并发编程问题化解掉的工具,开发高性能的并行程序必须要求开发者从根本上改变其编程方法。从某种意义上来说,这不仅仅是要改变50年来顺序程序设计的工艺传统,而且是要改变数百万年来人类顺序化思考问题的习惯,其困难程度可想而知!

     

    将近3年后的今天,Herb Sutter的预言似乎初步得到了印证。单核机器现在已经成了过时货,并且很快就会加入古董的行列。而多核机器的价格正在迅速下降。如今花2万块钱人民币,可以买下“三个8”的刀片服务器——两个4核至强+8G内存+四块200G硬盘。再过一段时间,这个配置中的每项数据都会翻番。如果说在双核时代我们还可以假装一切都没有发生,那么当一台机器上出现16个核的时候,敢于去忽略这种体系结构上的根本变革的人,一定是疯子。

     

    人们正在紧张地寻找着解决多核编程难题的方法。到目前为止,进展不太大。目前最理想的结果,就是类似Intel C++Intel Fortran这样的编译器,可以自动识别可并行化的循环运算,然后实施自动并行化。但是这距离全面并发还很遥远。类似MPIOpenMP这样的解决方案虽然早就存在,但是要得到普及难度不小。至于其他的一些常规方案,无非是优化多线程中的一些问题,比如无锁数据结构尝试避免加锁和解锁带来的巨大开销,而事务型内存也是为了优化多线程程序共享资源的性能和可靠性。专门为并发系统设计的语言Erlang,被很多人视为多核时代的Java,但是Erlang的长项在于并发任务的分发和同步,用它来处理计算密集型的任务,如图形图像多媒体处理和数值计算,效率之低令人无法接受。也许把Erlang当成计算的dispatcher,而让每个核上都继续以传统的单线程方式运行C程序是解决这类问题的办法。但是所有这些方法,都首先要求将任务分解成可同时并行的多个单元,并且将并行计算中的若干问题定义清楚。也就是说,这些方法都无法解决那个最大的挑战:人的思维方式转变问题。不改变我们编写应用程序的传统线性思维,所有这些工具都没有太大帮助。毫无疑问,这是摆在我们面前的最大难题之一。

     

    2. 新计算设备

    写作此文时,Amazon刚刚发布了电子书阅读器Kindle,这款产品的出现,基本上等于宣告电子阅读时代的降临,它所将引起的冲击必将是划时代的。然而对于开发者来说,它却只不过是在一个已经很长的新计算设备名单里又加上了一项。这个名单中包括:PS2/3XBox/XBox360Wii TivoGame BoyGame Boy AdvancePSPiPhoneWindows MobileSymbianLinux MobileBlackberryiPod,车载导航仪,当然,还有最最激动人心的机器人。有人大而化之将它们统称为“嵌入式设备”,然而这是一个非常具有误导性的说法,这些设备中的每一项都不是传统意义上的“嵌入式设备”,而是更接近于计算机的通用计算设备,更确切的说法应该是“专用的通用计算设备”。

     

    仅仅十几年以前,我们可以安全地认为,世界上每台计算机都是PC,每台PC都用X86 CPU,都安装了DOS/Windows。随着最近几年来新的计算设备如雨后春笋般涌现,PC包打天下的时代已经一去不返,这一点已经非常清楚不过了。

     

    然而,软件开发者并没有从过去20多年形成的单一平台迷思中摆脱出来。在软件系统开发中合理运用多平台特长,充分注重可移植性的思维尚未形成,大部分应用还是为传统PC平台开发的。这一点显然已经落后于时代的发展。当然,这也就给那些有识之士提供了难得的机遇,充分利用多平台整合的优势,就可以开发出革命性的新型应用。

     

    3. GPGPU

    CPU——中心处理单元,计算机的核心和大脑,一切的一切的主宰。”

     

    教科书上这么告诉我们。

     

    很遗憾,这种说法早就不是事实了。自从类似DMA这样的技术出现,CPU就在不断地“减负”。事实上一台计算机里有许多块不同的芯片,它们各自有各自的绝活,让整台计算机高速运转。不过,不管怎么说,CPU还是整台电脑里最强有力的中心,它最强大,最能干。对吗?

     

    很遗憾,连这个说法也变得非常脆弱了。在那些装备有高级图形卡的电脑玩家的机器中,CPU已经不是最强大的计算单元了,取而代之的是GPU

     

    GPU原本只是为了进行3D图形加速而诞生的芯片,由于其专用性,体系结构较之CPU大大简化,从而可以高度优化设计,进行大规模的浮点数并行计算。当代GPU在这方面的性能远远超过了CPU。在浮点数计算速度上,NVIDIA最新的GPU超过Intel最快的CPU10倍以上,而据称,这一差距在未来几年内会达到数百倍。单就这一点来说,GPU早就是计算机中最快的芯片了。

     

    然而,由于GPU的专用性,大部分通用计算任务是无法用GPU来完成的。例如,连最最简单的分支语句,GPU都无法完成。因此,GPU永远不可能取代CPU。但是,GPU强大的计算能力如果仅仅给高性能图形程序和游戏来使用,也无疑是一种巨大的计算资源浪费,有没有可能将GPU的计算资源暴露给应用程序员,由他们将适合于GPU计算的任务转交给GPU完成,而把CPU解放出来干CPU擅长的工作呢?没错,这就是通用GPU计算(General Purpose GPU computing)的宗旨。

     

    眼下,NVIDIAAMD(不久前收购ATI)都在加速推出对GPGPU开发的支持,而据传Intel也将在2008年推出自己的独立显卡,加入战局。这也就意味着,不出几年,每台电脑里都会存在两个强大的计算单元,一个是CPU,一个是GPU。软件开发人员将面临新的挑战——只有把任务合理地分配给CPUGPU,并且进行统一调度,才能够达到效率上的最佳化。此外,那时候的CPU8个或更多的核,而GPU本身更是高度并行化的计算单元,计算任务不仅要合理分布,还需要充分并行,这其中蕴含的挑战之大,足够令人心惊胆寒。然而,也正正创造了英雄横空出世的条件,谁能够横刀立马,谁就能功成名就。

     

    4. 无处不在的网络

    回到Kindle,这个产品最有趣的部分在于,你可以随时通过无线网络下载你想看的书,而且这些下载的书被保存在网络上你的一个私人空间里。你永远不会买不到想要的书,也永远不用担心家里太小,放不下这些书。如果你的Kindle丢失了或者你想换一台,没关系,你庞大的图书馆会毫发无损。

     

    你觉得怎么样?非常好,对吗?但这需要一个条件,一个重要的条件——无所不在的网络,特别的,无所不在的无线网络。

     

    不出几年,将不会再存在Internet的死角,在任何地方你都可以高速访问Internet。对软件开发者来说这意味着什么?这意味着很多过去惯用的软件设计思路将不再是最优的了,关于网络访问限制的很多担忧也变得不必要了。应用可以保证永远连网,用户数据也最好保存在网络上,密集的计算任务交给网络上的高速节点来执行,可能比本地执行更快。一言以蔽之,网络计算将全面取代单机计算,无论是对PC来说,还是对各种各样的小设备来说。

     

    更重大的变化可能来自人们的生活方式,当互联网——这个目前世界上规模最大、最自由的网络——无处不在并且速度飞快的时候,其他的通信网络还有存在的必要吗?我们还需要使用中国移动的专有网络并且每个月为之付出不菲的费用吗?我们还需要忍受诸如“脑白金”那样的烂广告和矫揉造作的烂主持人吗?我们还需要买日报和杂志吗?可能都不需要了。互联网就是电视,互联网就是电话,互联网就是报纸,一切媒体归于互联网。这种局面会给人类的生存方式带来一个重大的变革,在其中蕴含着巨大机会、挑战和财富。在这个意义上,Google的成功只不过是一个序曲而已。

     

    如上所述,相信您已经意识到我们处在一个怎样的变革当中!令我们兴奋不已的是,软件开发者在这个变革中处于前锋的位置,我们准备好了吗?



    [1] 在多核CPU上的多线程并行程序设计,究竟应该被称为“并行(parallel)”还是“并发(concurrency)”,并没有统一的认识。通常将“并行”定义为在多个计算单元上同时执行多个任务,而将“并发”定义为在单个计算单元上以分时的方式“同时”执行多个任务,由于多核CPU有多个计算单元,因此似乎成为“并行”更加合适。但又因为单个多核CPU对外只表现为一个计算单元,因此似乎“并发”也很合适。对这个问题缺乏统一的认识。从软件开发上来看,无论是否执行在多个核上,编程方法本身必须发生变化,这种变化了的编程方法通常被称为“并发编程”,表明这样方式编写的程序既可以跑在多个计算单元上,也可以以分时的方式执行在一个计算单元上。

    发表于 @ 2007年11月28日 10:19:00|评论(loading...)|编辑

    旧一篇: 从SaaS到S+S:以退为进

    评论

    #newpeak 发表于2007-11-28 13:25:14  IP: 202.96.202.*
    并发可以看作在一定时间内有多个任务需要处理
    并行则是在任何时间都有多个任务需同时处理
    两者的区分是很明显的
    erlang关注的是并发而非并行,因此不能拿对并行要求高的计算型任务来要求它
    #newpeak 发表于2007-11-28 13:27:14  IP: 202.96.202.*
    并发可以看作在一定时间内有多个任务需要处理
    并行则是在任何时间都有多个任务需同时处理
    两者的区分是很明显的
    erlang关注的是并发而非并行,因此不能拿对并行要求高的计算型任务来要求它
    #newpeak 发表于2007-11-28 13:30:13  IP: 202.96.202.*
    并发可以看作在一定时间内有多个任务需要处理
    并行则是在任何时间都有多个任务需同时处理
    两者的区分是很明显的
    erlang关注的是并发而非并行,因此不能拿对并行要求高的计算型任务来要求它
    #white_dos 发表于2007-11-28 15:39:01  IP: 59.61.216.*
    期待,学习
    #fxsjy 发表于2007-11-29 09:56:23  IP: 159.226.43.*
    关注!
    #bonny95 发表于2007-11-29 10:57:50  IP: 219.143.205.*
    学习了!
    谢谢孟岩老师!
    #suen 发表于2007-11-29 15:06:34  IP: 222.240.84.*
    孟老师可否谈谈我们程序员具体要加强哪方面的学习。因为文章谈到的东西网上早就说了,我也一直在关注,但是就是不太清楚自己要加强哪方面。另外是否每个程序员都需要了解并行计算我也仍在怀疑,孟老师对网格可有研究,如果高性能计算网格真的出现,我想计算能力已经不再是瓶颈了。
    #todingding 发表于2007-11-30 10:38:24  IP: 58.217.224.*
    如果每个程序员都要学习、了解并行计算,我想程序设计是否倒退了,对程序员的要求是否太高了,是否会引起效率的更低下?
    #ZiSheng 发表于2007-11-30 15:33:02  IP: 218.28.23.*
    积极的面对未来
    #loadfuture 发表于2007-11-30 15:41:52  IP: 222.241.211.*
    yes sir!
    #chchzh 发表于2007-12-01 08:54:51  IP: 59.44.18.*
    并行或并发,关键是程序或任务的组织结构,也就是说程序结构,因此,本人赞成他的观点,应该转变程序模式思维,从串行思维到并行思维,这样才能设计出完美的,能充分利用计算资源的程序.
    #Abcix 发表于2007-12-01 15:13:00  IP: 210.87.131.*
    前景是美好的,道路是曲折的,说不定到那时,我又成了计算机盲!
    #ruqifu 发表于2007-12-01 16:21:44  IP: 222.172.224.*
    计算机的发展速度事惊人的呀!机遇与挑战并存!
    #mmgsi 发表于2007-12-02 17:47:35  IP: 61.141.174.*
    看了这篇文章才知道原来我是这么old的
    #solo_coder 发表于2007-12-02 21:29:38  IP: 221.218.121.*
    应该有挑战的,
    有挑战,才会有进步...

    期待这次的计算革命能够在人工智能上有所突破
    #uzone 发表于2007-12-03 15:48:42  IP: 59.69.74.*
    我的导师是研究并行计算和网格的。记得2年前做并行计算的课程设计,在mpi平台下写程序,感觉特别的别扭,和串行的思维完全两码事,你必须时刻想着通信,时刻想着如何把任务更好的分配和回收,思维较之串行程序确实有很大的不同。
    看了您的文章,真的感触很深。可以想象,在将来网格、并行计算将是计算的一个主要方式,至少是之一。
    现在国内的高校做并行、网格研究的人也不少,但是感觉都是小打小闹。没有让人振奋地成果。
    大家都在说中国软件没有核心技术,这也是一个机会啊,虽然硬件的核心的东西还在外国人手里,但是在新的革命到来的时候,能在软件方面有核心的东西也不错啊。
    #jamesandy 发表于2007-12-04 17:55:11  IP: 116.30.37.*
    看到“计算2.0” 就想起了所谓的“Web2.0”

    我对于孟先生的炒作能力毫不怀疑,简直可以去做记者,投身娱乐圈了。

    如果不是故意装着“计算2.0”以及“革命”的嚎头来写这边文章,本来还有其积极的启发意义的。特别是其中关于GPU的说法,也令人有所启发。但是,说成了“革命”,还弄了一个“计算2.0”的莫名其妙的观点,就言过其实了。

    我相信,不会有多少人需要理会所谓的GPGPU的开发。我更相信由于多核的出现,最后会导致GPU和cpu合并为同一种东西。即,根据实际显示运算的需要,会分一个到多个cpu的核心用于充当GPU,尽管目前看来这样不太可能。

    至于无处不在的网络,其实就是3G的普及。这个带来的变化,更多是软件向手机的发展,这是一个巨大的变化。
    而笔记本,廉价笔记本的出现,也只是更多的普及PC而已,带来更多的网络服务需求。这里才是真正的革命性的地方。一旦网络无处不在(手机无处不在),人们的生活方式确实会发生根本性的变革。但是,这种变革,目前看来,谁也没有准备好,因为,好像这种无处不在的网络还没有成为我们的生活习惯,我们可以不需要它。


    #sevencat 发表于2007-12-05 11:53:53  IP: 218.242.214.*
    GPU方面INTEL和AMD的做法不一样。INTEL是准备出一个通用的专门计算用的GPU(不是显卡部门出来的,而且传统芯片部门的产品,可能明年或者后年会发布吧,我感觉主要用在大量的科学计算领域,包括游戏领域,而我们大部分编编一些程序的人可能也无关紧要),而AMD还是倾向于GPUCPU,GPU面向像处理的。

    intel本来要推出几款比较好的显卡的,但现在又很大的缩水了。这方面的介绍我个人认为<微型计算机>上面写得更加专业,更为权威。上面的就是我看这本杂志的感觉。

    MC(微型计算机)对手机操作系统的评价也比CSDN好多了,至少不会把LINUX摆在那么高的位置(其实真的很少)。
    #jorge 发表于2007-12-06 14:14:57  IP: 218.249.153.*
    不知孟老师对基于FPGA的可重构计算看法如何?现在此种技术正在逐渐渗透到计算的各个方面。
    #groovy2007 发表于2007-12-22 00:54:33  IP: 218.22.21.*
    "Amazon刚刚发布了电子书阅读器Kindle,这款产品的出现,基本上等于宣告电子阅读时代的降临,它所将引起的冲击必将是划时代的。"
    Kindle是什么? 一个读书的软件 还是 一种类似超星的东东? 不管怎么样, 我总觉得传统的纸书和传统的读书方式是不可能被替代的。 当年很多书籍被做成电子版的时候,就有人预言纸书将要被电子书代替, 但是很多年过去了这件事情仍然没有发生。 除了买不起、买不到或者手册之类的书, 人们还是喜欢把书捧在手里读。
    #curve 发表于2008-01-02 17:02:30  IP: 212.61.137.*
    Kindle宣告电子阅读时代的降临?你对电子阅读了解有多少?在Kindle之前,其他的厂商早就开始了电子阅读的步伐,iRex, Sony,做的产品比Kindle好多了。
    你有没有买Kindle?研究过吗?
    Bullshit!
    Shut up!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 孟岩