24小时热门版块排行榜    

CyRhmU.jpeg
查看: 122  |  回复: 1
当前主题已经存档。

yyqiao

金虫 (小有名气)

[交流] 【转帖】分布式编程概要

韩宪平

由于多核心、多处理器也多计算机日渐成为主流计算模式,分布式编程对开发人员的技术素养提出新的挑战和新的要求,无论对系统开发还是对于应用程序开发都是一样。一般来说,我们可以这样理解,共享内存的多个处理单元就是多核心,每个有本地内存的多个独立处理器共享总线的就是多处理器,没有共享资源通过网络连接的是多计算机。因为在单核单处理器下面已经发展了并行编程技术,比如处理不同进程之间或者同一进程的多个线程之间的协同,所以分布式编程在不久的将来会成为从业人员的标准技能,以后可能没有不是分布式的编程了

首先必须明了进程和线程的区别才好理解分布式编程的概念。这是两个最常用而又最模糊的概念。

进程和线程都是程序,进程是计算机操作完成某种任务的最基本的资源分配单位,线程就不能独立分配资源,而是在进程分配到的资源中获得自己的资源。从完成任务的观点看,有一个例子很形象,一个工程师按照菜谱做生日蛋糕,这就相当于进程,现和面、加水、加糖、加鸡蛋、搅拌,然后放进烤箱里,定时间,打开开关等等;做着做着工程师的儿子把玩儿刀子把手给切破流血了,工程师放下手里在做的活儿,给儿子包扎伤口,这相当于线程;把儿子安排停当以后又重新开始做生日蛋糕,这个时候又有人敲门,这相当于另外一个线程,答应了来访者以后工程师又回来完成做生日蛋糕的任务,继续执行原来的进程。有的书上就把进程叫做任务。

分布式编程包含两类重要技术:一是用于给多核心和多处理器编程的并行处理;二是给多计算机系统编程的基于消息传递界面的技术。而且这两类技术是重叠的,因为分布式和并行处理在语义学上几乎是相同的,两个术语在强调不同的方面,分布式强调空间分离的特征,而并行强调时间上同时并发的性质。关于分布式和并行两个概念的相同和区别我在前面有了一个解释。不同的平台上,实现分布式编程的战略(Strategy)不一样,但是都要解决进程间、准确地说是解决线程间通信问题,这一点则是共同的。因为不同的进程在操作同一个对象的时候都必须要处理好互相干涉和内存不一致的问题;而对于多计算机系统,另外提出了处理与网络连接和数据传输协议相关的要求,多核心和多处理器系统就不存在这样的问题。例如,Python的战略是使用“消息传递界面Message Passing Interface”就是MPI、集群技术以及网格技术来处理多计算机系统,而用许多Python Parallel类库如pp、pprocess等等来处理对称多处理(SMP)并行计算问题。Java实现分布式编程的技术叫RMI(Remote Method Invocation),好像应该翻译成“远程方法调用”,我记得C++里是叫远程方法调用的,就是Remote Method Call。相应的API是java.rmi.Remote,包含在他们说的“分布式对象应用Distributed Object Application”这个更一般的概念的框架下面。我这里有一个关于分布式编程的参考书目,想必与题目相关的重要经典著作都搜罗在这里了,可惜我一本也没有看。我想直接从Python或者Java看它们是怎样具体处理的,这样做更容易入门,掌握技术,了解理论概念。Python的好处是开宗明义旗帜鲜明,有并行处理和分布式编程的Wiki页和各种专门技术的社区和讨论组,但是许多没有完善的文档;Java没有亮出分布式的旗帜,但是他们的文档帮助还是最好的,更容易上手。
http://www.blogchina.com/20080623558976.html
回复此楼
博客:blog.sina.com.cn/nkuqiao;应用化学:blog.sina.com.cn/nkapc;化学工程:blog.sina.com.cn/nkceg
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yyqiao

金虫 (小有名气)

多核形成新的战略资源

韩宪平

这几年我一直在鼓吹多内核、多进程和多处理技术,这是这一两年来新形成的战略资源。在中国只有土地被认为是资源,还不知道自由的人的头脑是资源,生物基因是资源,也不知道多核是资源,有必要现在自己开发一个古董CPU吗?这是个战略路线问题。弹丸小国日本能欺辱中国泱泱大国,就是因为两个国家利用的资源不同。

Gartner的一篇文章指出:政府和组织还没有消化多核提供的处理能力;这方面存在两种限制:硬的限制和软的限制。硬的限制例如操作系统用一个八位的域(Field)描述多核,就只能管理256个处理器内核,但是现在要管理的处理器内核有成千上万个;软的限制是软件设计的限制,应用程序、数据库、虚拟化、中间件等都是在单核平台上设计开发的,这样的状况已经持续了四十年了,现在IT的领导和业者要重新学习计算;还说,政府和组织要利用多核,利用多核实现战略优势就赶紧采用相适应的计算机操作系统,就是Linux!因为,差不多所有TOP500都用Linux!

多任务并行处理的瓶颈。有这样的几个实例,南京航空航天大学的飞行器设计实验室曾经从浪潮公司购置过一套十多个节点的高性能计算集群,可用着用着就发现不够用了。他们计划购买一套更大的,升级到 64个计算节点。购买,安装,迁移任务,一切停当,一个奇怪的现象出现了:运算效率不仅并没有提升,反而下降了。研究人员只好请来浪潮的维护工程师,发现问题出在该应用软件的扩展性上——原来的软件根本不能支持这么多CPU。据浪潮公司提供的一份资料显示,虽然数百上千个CPU级别的计算机集群现在已经大量出现,但支持500个CPU以上的应用软件却很少。许多流行的高性能软件,特别是广泛应用的开源软件,如在地震预报、蛋白质计算中运用的软件,并行度并不高,有的甚至还是串行程序。这就好比是好不容易修好了一条高速公路,回头一看,却缺乏好车。“现在的关键是软件跟不上硬件的发展速度,导致超级计算机的计算能力发挥不出来。”浪潮集团高性能服务器产品部总经理刘军说。对此中国科学院超级计算中心主任迟学斌认为,在研发的历史上,我们一直重视有形的东西,忽视无形的东西。计算机固然很重要,但是如果在这个平台上没有要做的事,那也等于是浪费。对上海超算中心来说,困难主要是价格问题。尽管上海市政府给了他们令同行羡慕的的持续经费支持,使他们可以采购中国最好的计算机硬件,却无法将最好的软件也统统搬来。国家天文台可能是中心的用户里对CPU要求最高的之一,他们需要上千个CPU同时工作,以计算海量的天文观测数据。但能支持的软件在国际上也很少,即使有也买不起,他们只好自己编写开源代码。它更自由,却未必好用。再者,能够写此类软件的人才太过稀少。国内高等教育研究生以上学历的教育中,完备、深度的“计算科学”教育既不系统,也不完整,更没有基于并行计算方面的计算科学教育和训练。同时,计算科学和各应用科学的团队在互相协作方面也缺乏机制。美国一个成熟的计算应用软件通常都经历了至少20年以上的持续开发,如计算化学软件NWCHEM,开发团队里化学家、计算数学家、计算机科学家保持了合适的比例,政府也给予了资金支持。跟摩尔定律(Moor Law)共轭的(conjugate)应该有一条“软件危机定律”,意思说:计算机硬件总是革命性的力量,而软件技术和行业总是落后的保守的力量。

“魔方”的诞生将中国的超级计算一下子带入了百万亿次计算时代,但是应用却仍停留在几万亿次到几十万亿次的水平,中间至少相差了一代。因为现在能够写此类软件的人才太过稀少,硬件跟软件的关系就像“修了一条好路,却没有好车”。2009年6月15日,国内首台百万亿次超级计算机“魔方”,在上海正式启用。“魔方”不但是亚洲第一的超级计算机,也是目前美国本土之外唯一计算速度排名进入全球前十的超级计算机,表明中国成为全球第二个能够研发百万亿次超级计算机的国家。上图为超级计算中心主控机房。现在的超级计算机通常都有几千颗CPU,速度已经超过每秒千万亿次,但能支持500颗以上CPU的应用软件却很少。像国家天文台需要上千个CPU的运算却缺少软件可用。上海超级计算中心总共有300多个用户,医生丁海是其中一个。他独立研究的课题涉及较复杂的模拟计算,用普通的电脑根本跑不起来,于是他到超算中心,申请使用一部分计算资源。
128颗CPU的极限
到超算中心排队的单位一直很多。截至2008年,中心装备的曙光4000A型超级计算机CPU使用率已达到88.5%。这台拥有2048颗CPU的超级计算机已经接近“满负荷运转”。2009年6月,“魔方”的加盟将中心可提供的计算能力一下字提升了20倍。它是曾在2008年底排名世界前十的计算机,峰值运算速度达到每秒230万亿次。然而没能进入队列的任务还是很多。丁海只需要用几十颗CPU,但在300多个用户中已经略高于平均数——虽然中心的客户中不乏蛋白质折叠这样的大型科学计算和国产大飞机设计这样的大型工程项目,但大型用户并不占大多数。据上海超算中心2008年12月的简报统计,在当月新增的10个用户里,只有清华大学航空航天学院、南京大学物理系和上海天文台三家占用的CPU资源在128颗以上。“不可能给得太多”,中心副主任袁俊说。中心为了照顾到300多个用户的需要,必须进行协调管理,才能最大发挥其整体效能。成立于2000年的上海超算中心不仅承担着“国家网格”计划的南方主节点任务,还为华东地区乃至全国的科研单位和工程用户提供开放的计算服务。袁俊告诉记者,128颗,往往是上海超算中心为单个任务所能提供CPU数的最大值。事实上,即使资源方面没有限制,很多大型项目也因为技术上的原因用不上那么多运算资源。

规模再大软件控制不了
南京航空航天大学的飞行器设计实验室曾经从浪潮公司购置过一套十多个节点的高性能计算集群,可用着用着就发现不够用了。他们计划购买一套更大的,升级到64 个计算节点。购买,安装,迁移任务,一切停当,一个奇怪的现象出现了:运算效率不仅并没有提升,反而下降了。研究人员只好请来浪潮的维护工程师,发现问题出在该应用软件的扩展性上——原来的软件根本不能支持这么多CPU。据浪潮公司提供的一份资料显示,虽然数百上千个CPU级别的计算机集群现在已经大量出现,但支持500个CPU以上的应用软件却很少。许多流行的高性能软件,特别是广泛应用的开源软件,如在地震预报、蛋白质计算中运用的软件,并行度并不高,有的甚至还是串行程序。这就好比是好不容易修好了一条高速公路,回头一看,却缺乏好车。“现在的关键是软件跟不上硬件的发展速度,导致超级计算机的计算能力发挥不出来。”浪潮集团高性能服务器产品部总经理刘军说。对此中国科学院超级计算中心主任迟学斌认为,在研发的历史上,我们一直重视有形的东西,忽视无形的东西。计算机固然很重要,但是如果在这个平台上没有要做的事,那也等于是浪费。对上海超算中心来说,困难主要是价格问题。尽管上海市政府给了他们令同行羡慕的的持续经费支持,使他们可以采购中国最好的计算机硬件,却无法将最好的软件也统统搬来。国家天文台可能是中心的用户里对CPU要求最高的之一,他们需要上千个CPU同时工作,以计算海量的天文观测数据。但能支持的软件在国际上也很少,即使有也买不起,他们只好自己编写开源代码。它更自由,却未必好用。再者,能够写此类软件的人才太过稀少。国内高等教育研究生以上学历的教育中,完备、深度的“计算科学”教育既不系统,也不完整,更没有基于并行计算方面的计算科学教育和训练。同时,计算科学和各应用科学的团队在互相协作方面也缺乏机制。美国一个成熟的计算应用软件通常都经历了至少20年以上的持续开发,如计算化学软件NWCHEM,开发团队里化学家、计算数学家、计算机科学家保持了合适的比例,政府也给予了资金支持。
跨越“软”“硬”鸿沟
“魔方”的诞生将中国的超级计算一下子带入了百万亿次计算时代,但是应用却仍停留在几万亿次到几十万亿次的水平,中间至少相差了一代。曙光公司总裁历军认为, “机器和应用之间有一代的差距是可以理解的。上一代的曙光4000A刚出来时也面临有没有人用的问题,但到今天我们国家的大飞机设计、神舟飞船、基因研究、石油勘探上面都用上了,可见机器带动应用是现阶段的必经之路。”看来,超级计算机超前于应用的发展似乎不完全是坏事,只有有了更加强大的计算机,应用软件和算法研究人员也才可能发现原有软件和算法的问题。大规模并行软件的开发是个累活,周期很长,不像硬件升级那样见效快。在过去,软件都是串行编写,假定在一个CPU上面执行任务。超级计算机把这种情况彻底打破了,转而强调“并行计算”。高性能计算的原理其实并不复杂,就是将一个任务分成几份,每个服务器完成一份,但并行化的基础是对此代码涉及的应用科学有透彻的了解,在理解的基础上,再进行合理的任务切分,精细地处理负载平衡、通信等问题。因此才出现了能够写并行软件的高级人才少之又少的局面。事实上,为超级计算机编程更是数学家的工作。他们不仅要有精湛的数学头脑,懂得各种编程语言,还要熟悉计算机硬件。更重要的是,他们必须愿意投入时间来设计各种算法和进行软件编程,最后,还要确保软件经过调试能够在超级计算机上使用。名噪一时的“深蓝之父”许峰雄就是这样一个人。这个对于人机对弈有着狂热兴趣的天才,更像是一名有着发达数学头脑的软件程序员。还在念大学时,他几乎每天吃饭路上脑子里都在琢磨如何在计算机上实现更快的出棋步数。为了战胜卡斯帕罗夫,许峰雄和他的同事前后用了十多年。2009年6月,国内服务器行业的领军企业浪潮集团和中国超级计算领域的“专家团”——中科院超算中心签署了一项战略合作协议,试图联手攻克“软硬失衡”这一困扰超级计算机多年的难题。浪潮有丰富的市场经验,能准确把握用户的需求,可以安排大量的经验丰富的一线软件工程师和系统维护人员,而中科院超算中心则在体系架构、硬件设计上提供理论上的支持。这是一项艰巨的系统工程,其成效果尚需时日。下一代千万亿次计算机已经在研制了。这台名为曙光6000A的超级计算机已经被深圳市预订,但如果软件水平不能迅速跟上,“软硬失衡”的“魔咒”将给它带来更大的麻烦——那可是千万亿次。
博客:blog.sina.com.cn/nkuqiao;应用化学:blog.sina.com.cn/nkapc;化学工程:blog.sina.com.cn/nkceg
2楼2009-11-12 11:37:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yyqiao 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见