上尉
- 注册时间
- 2009-7-24
- 金币
- 1378 个
- 威望
- 0 个
- 荣誉
- 0 个
累计签到:6 天 连续签到:0 天 [LV.20]漫游旅程
|
高性能计算系统栈的推倒和重建(三)微处理机初期 3 i1 H5 q. w( K5 j/ I+ [
望洋兴叹
' ]6 b: _5 i& P W在专有机时代作并行计算的研究,你得会投“胎”。当时,全球科研的浪尖是在美国,能在Communications of ACM上发表论文的,都是美国大学的。用的HyperCube, Cray,Connection Machine 2 等大型机。而在英国,只有国产Transputer。 更可悲的是,我所在的埃德塞特大学(Exeter University), 我们当时只有四个transputer 节点。当时在英国,可以说是望着大西洋对岸的美国兴叹啊!我看美国人的论文的心情,就好比是一个穷人家的孩子偏偏喜欢上摄影,然后看着有钱人家的少爷拿着长焦、广角镜头,口水只能往里咽。! c5 x: f& D0 b( d( A/ ]
1993年,我到了美国阿冈(Argonne)国家实验室后,我就好像是小孩进了糖果店,因为那里有不少专有机(CM2, Paragon, Sequent等)。我问秘书预订了每个专有机的用户手册。每个手册都有电话簿那么厚,当秘书象我小时搬蜂窝煤一样把几英尺厚的手册搬进我的办公室后,她累得大抒一口气。现在看来,真是浪费了,这些手册我都没有用过。不是我没有用功,而是专有机被第一批微处理机颠覆了!+ B2 a0 ^) [! Y& l
消息传送库pvm, P4和 MPI- C4 {5 \, I' s2 X
在80年代时候,多种消息传输环境被开发出来。有些是为专有机开发的Ncube. 而另外不少是为Unix工作站开发的。比较有名的是Oak Ridge 实验室的PVM (Parallel Virtual Machines) 和阿冈(Argonne) P4 和PICL, Ohio 超级计算机中心的LAM。
- a/ N8 P. q6 I( B! U当我看到PVM 的时候,我也就不望洋兴叹了。因为用工作站组装成一个超级计算机,不用花大钱去买专有机。而且写程序也是用常见的C或Fortran语言。不需要专有的语言。 一下子,高性能计算的世界在我眼前变平了。+ G/ L8 Y6 I+ g0 t# \
到了1992年末,听说又要搞个什么MPI。我和一帮英国同事都在笑,怎么又来一个消息传输库。后来才知道,我们笑得过快。原来,MPI是要吸百家之长、制定工业标准、省得大家重新发明轮子、浪费体力精力脑力人力。 Argonne和Oak Ridge 都是美国能源部的实验室。两个实验室,为了一个消息传输库争夺用户,结果使得能源部的应用开发成本提高两倍,这是实在说不过去。1994年这个标准终于出来了,不到两年的时间出来了这个标准,在HPC领域是相当快的。而且有许多学术界的人士参加的标准Forum, 一向是拖拖拉拉,没有目标导向,企图把海水烧开。为什么MPIForum 能够如此神速地推出此标准呢? ; m, P) R5 O! y, M3 m* N8 h$ l
这要归功于两个人,Bill Gropp 和 Rusty Lusk, 他们都是从阿冈国家实验室的科学家。不要笑,他们的抬头就是“科学家”。
6 c% G% j0 {$ i! u6 ~- V1 y$ ]1 v ' I$ e4 Z. d3 p9 a0 ^9 j7 c1 Y
Bill Gropp Rusty Lusk: O# [ n: P [4 ~. P
他们告诉我,最重要的原因,是MPI一开始就有一个参考实现:MPICH。 是他们两人主写的代码。所以,一旦有了一个可以参考的MPI库。一些应用就可以开始并行化。这样,许多没有任何应用场景的“好主意”,就很容易被扔到“Out of scope”栏目。帮助参加讨论者集中注意力。还有,他们采用的方法是一天早中晚连轴转的方式,如此高强度的讨论,只有那些铁杆、硬核的人才能挺得过去。所以,也把一些不懂行,不委身、但往往容易随机化讨论的人自然淘汰出局。& [4 Q2 {7 X8 h- q! x9 P9 Q. i
很多人把集群的概念归于Beauwolf. 其实,集群已经在九十年代初,就有了。许多人都以为,是beauwolf 集群后,工业界才开始使用。历史并非如此。听我给同学们表来。8 h7 T$ k/ I1 y( Q+ _4 R) r
制造业最早的投入生产的微处理机集群
3 t6 Y2 V1 f7 x6 L% g$ `; p6 r0 P在美国East Hartford,驻扎着著名飞机发动机厂商 Pratt Whitney的设计中心。过去,为了测验叶片的强度,他们要将一个冰冻鸡扔向高速旋转的发动机上,然后分析断面。 毫无疑问,造价极高。后来,他们使用Cray来做模拟仿真。只是能够模拟单叶片。而且Cray成为稀有资源,每个工程师的作业,都要排上两天才能算上题。, A7 P( b3 i% C1 ~* b( W" Y
90年代上半叶,Pratt Whitney的CFD组,开始自主设计、开发一套消息传递系统,Prowess。它可以扩展到上千台太阳工作站。其中带头人名叫Craig Fischberg, 因此在制造业界成名。95年左右,GE 飞机发动机给了他双倍工资并为其妻子安排了很好的工作,把他挖了去。后来,他又用MPI 来为GE建立了同样系统。从此,他在GE 的地位如日中升。/ h9 X3 p$ P: d5 [3 w H6 U; {
一想起工作站资源觅食(Cycle Scavenging)人人都以为最早是由Seti@home. 其实,在九十年代初在Pratt Whitney 已经有了。
; H/ u5 M% V3 u7 Y; ~那么从Cray 到工作站集群到底带来什么大不了的效益,使得GE出血本要挖人才呢? 后来,Craig Fischberg 跟我讲,以前只能在叶片上模拟,后来能够把模拟整个发动机。以前的排队时间长至3天,结果晚上提交,第二天一早就可以看见结果。结果呢,高耗资的物理测试减少了,设计时间缩短了一半,而且飞机引擎的油耗效率大大提高。所以,GE能不受刺激吗?花了双倍工资挖到了Craig Fischberg是非常小的代价。
7 E& g* u+ `5 O成百上千的工作站的计算能力被完全释放出来。他们用的作业调度器是Platform Computing 的LSF。 所以,在九十年代,LSF的用户手册写着“Unleashing the Power” – 释放能力!就是从这儿来的。
6 J1 V3 y6 }( z0 }2 }: X1 X: A商家简介
5 o$ z$ w( S) D/ L U$ O9 `机器厂商 IBM,SGI, HP 和SUN' ~" k( Z( g9 g% ~7 Z
硬件 精简指令芯片
+ _8 P/ b9 S/ b& Y处理器间网络联接 定制化的网络
0 s- y" u+ z! z应用软件编程界面 MPI-工业标准 PVM 和其他 消息传递软件包/ V6 I8 D. U0 ]1 N; V {2 @0 z/ N
作业调度软件 LSF, PBS, Sun Grid Engine (SGE); _% n! l/ m- z/ c8 I
% L. C0 K1 Y: i: z
为什么会有那么多的定制化的网络联接呢?我们下次再说。% M. i, m, U& E- n- ^6 l, x
下次内容: 我和Rusty Lusk 的一个不开心遭遇引发我的奇想。
! T0 j6 R" I7 f2 D& rPosted: Thursday, September 03, 2009 11:13 AM by mingqxu | 1 Comments
) I+ K+ U& G& B# d# n2 s" zFiled under: 业界动态, 员工故事, BeautyFromAsh K' X/ [ E7 ^9 E8 }/ t7 z
高性能计算系统栈的推倒和重建(二) 专有机时期A
/ |, o2 L# _) y" n. P$ h选择并行计算, 被人泼了冷水3 C5 V9 a. Y5 b9 H0 \; d) a8 l
1987年春晚,费翔的故乡的云唱红。歌云:“归来吧,浪迹天涯的游子“。可我那时却踏上了留学之路。在研究人工智能高潮时候,我选择了并行计算。为什么要选并行计算呢? 当时我选主攻方向的标准非常单一,那就是越新越好。我出国的目的就是要学习最新的科学技术,因为当时我坚信只有科学才能救中国。当我把英国导师的研究计划提议书给国内导师过目时,他的第一的评语就是:”我看提议书中的许多参考资料都是当年或近年出的,是国际领先的方向“。7 Q: ]$ g% e$ [7 b! j( Q& ]
在英国1988年的“并行计算专家会议”上,我遇到一位工业界的人士, 互相介绍时候,我兴奋地告诉他我的博士主攻方向。 他的回答是我一生都不能忘记: “并行计算不会有前途的。将来人们将造越来越大的向量机。没有人愿意将自己的应用并行化,因为太难了”。
4 a, `7 C2 ` g) o现在看来,这个专家是大错特错了。 虽然如此,我还是非常赞赏他的坦率。他完全可以不必加什么评论,事不关己,可以高高挂起。他不愿意看见我往火坑里跳的精神可嘉。不过,专家的话也是要分析地去接受。而且,当你和专家有不同意见的时候,也不要迷信。 长江后浪推前浪,新一代要超过前一代。不迷信权威是科学向前发展必要倡导的精神。 b' X) ]- }9 d$ M3 S
我没有相信他的话。
, S: t1 r- P+ ~8 Q8 ]$ n1 z1 C这段时间的高性能计算的生态环境如下: - d! o8 Z5 B o
机器厂商 Cray, Thinking Machines (CM-5), Sequent, Kendal Square Research (KSR), INMOS (Transputers)
7 q* t% J0 d% v, I9 x5 {硬件 定制化的芯片) N2 m' D9 d3 l& o8 e8 {
处理器间网络联接 定制化的网络
_* l1 e5 y1 ]3 u软件 专有语言或FORTRAN的专有指令和工具' t, b1 O1 | T8 D; f' D9 M
我们看见,“定制”“专有”这是造成价格天价的原因。 那时候,CRAY只有少数西方的国家实验室和大型制造业公司才能拥有。 只有少数先进国家才能拥有。杜甫一句诗词,似乎表达了我当时的意愿并有预言性:“安得广厦千万间,大庇 天下寒士俱欢颜”。 高性能计算关乎全世界的一项技术,它的益处不能被一个国家所禁锢和独占。这二十一年,我感觉有支看不见的手,把高性能计算机从国家实验室的围墙里,推出到制造业,电子业、生命科学和制药业,石油业,金融业。 从美国、推向西方先进的国家,又推向东方。 曙光和微软研制的两百万亿次计算机就是一个例子。
) g# q7 B% I- u) j* h8 o小心处理器杀手
3 X" s( @" K9 ~3 z/ ?在一九九零时候,美国劳伦斯Livermore 实验室的Eugene Brooks 说了一句话:“Beware the killer Micros” (小心微处理器杀手)。 他这句话叫许多向量机的生产和设计厂商诚惶诚恐,为什么呢? 我在微软一个同事,Frank Chism, 曾经是Cray 的雇员。他告诉我,那时候每年CRAY的CEO和克莱斯勒的CIO的谈话是非常痛苦的。 克莱斯勒的CIO就问CRAY的CEO:为什么HP的工作站比你们CRAY要快,而我却要支付更贵的机器呢?“。 微处理机的日益强大的性价比使之取向量机而代之的成为必然。/ A( M, f3 K! u+ H- k6 J# z
给我泼冷水的英国专家有句还是说对了,那就是并行化一个程序是很困难的,为什么别人会有人去做呢?不过他的话有个逻辑谬误,那就是:“没有人会去修改应用,因为太困难了“。 出力不讨好的事尚且有人做,更何况出力能讨到好的事情呢?这时候,美国制造业的一个企业,就成功地用工作站替代了向量机来解决计算流体力学的问题。我们下次再聊。
1 F. I8 L# O; m3 W) `: |" \) F对于专有机的Occam语言的三大遗憾8 t- g, }! E5 T7 r
Occam 语言是我接触并行计算的第一个语言。这个语言是以一个哲学家Occam命名。提起他,我们都知道有个Occam剃刀原则(Occam Razor)。 就是:“Keep it simple” 原则。这个语言之简练和直观不逊于其命名。它用Channel, SEQ, PAR 和ALT 等语言部件,可以构建各种并行进程及其通讯和同步场景. 下面程序实现了典型的生产者和消费者通讯的例子:- V2 q! P* N- W; n1 Z
PROC producer (CHAN INT out!): J& r0 ^1 R$ q: Y! q
INT x:. n' f6 T0 z/ J1 C! }( K9 S0 h: j
SEQ9 r& V2 n- H" H8 ]- l7 t( E- I
x := 0
* B- p4 J' H+ @, Z$ n/ n WHILE TRUE7 O/ N$ S8 H. V& y
SEQ
r: v* |; s* T. k- q out ! x" X/ Y$ N+ C# y
x := x + 1
2 x- {; X1 O6 t+ X% Z! T- ]:
4 C$ y# X5 s( E& v3 @2 b" ^2 ]PROC consumer (CHAN INT in?)
" h* @5 n8 x* d0 ] WHILE TRUE* C' C6 O+ M' M% r* q0 L" b
INT v:
% `4 l( { w8 E. ^ SEQ& Z G. [0 X3 Y' [& n
in ? v
* o5 N) w; _2 v. D' G5 S .. do something with `v'% r* V, e# H+ {& A
:
* v: U9 p4 F7 NPROC network ()
/ X+ v- F2 a2 T; F! Y3 {# n CHAN INT c:
9 k- r2 {; z. [4 Z PAR
9 M9 ~5 N) M" b! O' v6 ~+ f0 I producer (c!)
7 v! J2 P8 i! q. t$ A' N$ c" b consumer (c?)
4 L# R7 {# `, _2 c2 Z:/ e0 F) u* p u3 g( i; N& a8 m
我自然是被这个语言着迷。可惜好景不长,我立刻发现Occam 语言的三个局限:
% k0 x- g) X' q/ |遗憾一: 并行进程的静态、编译时决定的。不可能在运行时动态产生进程:* ^6 u6 M$ h. Z. K
PAR I = 1 to N
* p5 J' _, j' F2 O- R3 u* Q Process (I)
) u8 c: L }3 t3 c$ `这里N必须是编译时就确定的常数。这样对编写通用目的程序库带来很大的麻烦。 就好比MPI 用户没有办法根据MPI Rank 和MPI_Size 来动态划分域,只能硬编码其处理单元数量,那么今天恐怕还没有Nastran 等ISV通用库。 和我一起做博士的某英国哥们,他曾说要解决这个问题。我一直很感兴趣,不停地问他技术细节,结果他说了半天,我还是不清楚。说句实话,到今天,我还是没有明白。 后来这个哥们找到了工作,放弃了博士。* v2 e0 }. t- |9 _
到了后来1996年,MPI-2制定的时候,我参加了关于动态创建进程的讨论。当时我已经加入了Platform Computing 作LSF, 可是这些MPI专家们对于如何映像进程到处理机的理解不够透彻。他们没有认识到,动态创建必须基于一个资源管理的调度系统。 而他们没有有效地将需求及时提供给作业调度厂商。结果,现在有许多的MPI2 动态创建进程的实现,但是没有哪个是和著名的作业调度器集成的。 原因就是,大部分作业调度器的资源分配是静态的。一旦资源分配后,就无法改变。到了Windows HPC Server起步在2004 年的时候,我设计作业概念就考虑到作业当能伸能缩的. 因此,Windows HPC Server 是为数不多能够支持MPI 2的作业调度系统。
, U; P: ^: g: p" B8 d2 t, q; `遗憾二: Channel 是没有缓冲的。一个发消息的进程,如果对方不在受的时候,就会被阻。直到有接受消息的。开始还觉得没有什么,结果不知道多少看起来不会死锁的代码,结果给死锁了。比如,两个进程计算后相互交换结果如下,就会死锁。
* Z1 V9 E- ]* z0 P3 }PROC left (CHAN INT toRight!, CHAN INT fromRight)2 S( b5 F4 P" Q f' g7 `
… compute, V' |7 K$ P* d
toRight ! localResult: L' _8 D% n" f+ k# G% V9 H5 E$ x U7 Y
fromRight? neighborResult- T% v. @9 y: d, \1 z
:: m" F9 h( M7 E
PROC right (CHAN INT toLeft!, CHAN INT fromLeft)7 @; g# E& G# Z2 A6 L: h
… compute/ {, |% P- B3 o2 V1 ^6 G
toLeft ! localResult
* o8 h# E$ J: \3 n fromLeft? neighborResult+ L+ H' M4 N. _' p! r8 L- d, p
: W& o' U1 A X& ~3 k
CHAN INT c, d:
- K9 ]; D4 l! g- H. P: Y PAR# B" N1 \, z; X& W/ j" S; i7 X! r
left (c!, d?)" F7 l% [, G+ s V5 g$ _+ Z4 V5 R
right (d!, c?)& ~0 {+ L* s5 q& `- T
原因就是,对于left 进程,toLeft! localResult 会被阻塞,因为right 进程还没有接收消息 。 right进程也同理被阻塞。现在同学们用MPI的时候,已经对于MPI 库中所提供的消息缓冲区习惯了. 当我发现此功能后,顿时心存感激。0 @4 V |1 }$ u9 F ]
遗憾三:进程和物理处理机之间的映射是静态的1 O# Y) ^0 g" ]8 p% V* Q }( C
这是一个致命的局限。如下所示,进程terminal, editor 和network 是在编译时被硬性映像到不同的处理机上。: |1 L: N6 y* E- q9 ?
PLACED PAR% ]# k0 ~. G. l; l: A' e
PROCESSOR 1* Z& O- P3 C/ v# u. T& t# O, r$ A
terminal (term.in, term.out) u) c& V3 }6 N7 K/ I. G
PROCESSOR 2
, H' h; O8 U. f; u6 B W( e editor (term.in, term.out, files.in, files.out)
: R9 Q& P5 {8 [ j0 b& l3 N8 l PROCESSOR 3
6 h* G: a+ [+ d2 Q4 l3 } network (files.in, files.out)
& v4 c5 G/ n4 A+ f0 _对于这个局限的极度不满,心中涌出强烈的愿望想要解决这个问题。人生很有意思,9年后,我终于开始解决这个问题,一作就是近十二年。这个问题就是如何应用动态映射处理机,就是作业调度器(Job Scheduler)的灵魂.3 T! ?8 |7 X( ~* B2 O3 W: x. N
(待续)+ o! z0 B4 C0 q; |: e
Visual Studio 2010 Beta1 中的 MPI Cluster Debugger . f! o2 k4 U& {0 p0 W/ Q
在Windows HPC中写过MPI程序的朋友们应该用过Visual Studio2005/2008中的MPI Cluster Debugger吧。网上也可以搜到不少关于这方面的使用教程(blog, white paper)。在集群中调试MPI程序感觉如何?MPI Cluster Debugger用起来方便吗?Visual Studio 2010 Beta1已经发布,我们HPC组对其中的MPI Cluster Debugger做了很大改进,尽可能地使它变得更加便捷。下面就跟随我一起看看吧!
" L6 J7 j2 i* ~1 N4 J( Y6 t在同样的地方( 项目属性页面) ,我们找到了MPI Cluster Debugger。不同的是,原先寥寥无几的参数被现在的一群参数所取代。不过不必担心,我保证大家很快上手。其实,在大多数的情况下,只要填写其中的3个参数。对于其他参数,MPI Cluster Debugger会使用默认值。) n' L, W6 A% {% ^
7 p4 G# {8 P3 t. Y0 I, q6 r
既然要在Windows HPC Cluster中调试程序,那么总得指定集群的头节点以及运行MPI程序的计算节点吧。“Run Environment”就是我们的第一个必填参数。点击”Edit Hpc Node…”即可进入”Node Selector”对话框。在此框中,我们可以选择想要使用的集群和计算节点。既可以笼统地指定所需要运行的MPI进程的个数,也可以精确地指定在那几个节点上分别运行多少个MPI进程。在选择节点时,我们还能看到各节点CPU实时负载情况。若仅仅想在本机上调试,运行4个MPI进程,则填入”localhost/4”就可以了。
" z" E8 N" v/ u8 Q$ E
8 b$ u1 p! u* z" P& N' x
( l6 f$ }, G/ {1 |0 \另一个必填参数是“Working Directory”。这是MPI程序运行的目录,必须是一个本地路径。若不存在,MPI Cluster Debugger会帮你创建。“Application Command”是第三个必填参数,通常使用宏“$(TargetFileName)”即可。它指定了需要调试的那个MPI程序。
: P* Q9 Q* `+ }+ w' o" d2 X% f & i& z; A. d+ d) ]
“Deployment Directory”参数是可选,默认值是”\\<HeadNode>\CcpSpoolDir\<UserName>”。安装好Windows HPC Cluster后,CcpSpoolDir就会被创建并共享。若不想使用该默认值的话,需要填入一个网络共享路径,并且用户有读写权限。
* a6 g, w4 H2 D3 ^9 e( `% HVisual Studio 从2008 SP1开始就有“Debugger Type”参数,于是我们有了选择调试器的自由。通常选择”Native Only”。若你是用MPI .Net写程序的话,那就选择”Managed Only”。
+ S( {: ^0 d: k+ y5 Z: J' E . e9 G! I8 H: p2 R! G9 Y9 ]
其他参数我就不一一赘述了。每个参数都有解释,相信大家可以看明白。不明白的话,那就回贴问我吧。+ a" f: e2 V' [8 X& C# A7 b( i
填好以上参数,就可以使用MPI Cluster Debugger的基本功能了。按”F5”,你的程序及相应的pdb文件会被部署到刚才选的那些节点上,然后MPI进程就运行起来了。在”Output View”中,你可以看到MPI Cluster Debugger所做的工作。若有错误发生,在这里可以看到详尽的错误信息,不至于手足无措。在”Processes View”中,你将看到正在运行的MPI进程。
6 F: a! W; u6 ]) I1 B8 _ 0 B0 ?2 M9 {& U) x- c+ z; @( F
, D8 _0 e( k7 i4 g8 u# Q/ X( B4 K以上是对MPI Cluster Debugger的简单介绍。在Visual Studio2010正式发布之前可能还会有一些改动。若大家有什么建议,欢迎回帖。谢谢! |
|