上尉
- 注册时间
- 2009-7-24
- 金币
- 1378 个
- 威望
- 0 个
- 荣誉
- 0 个
累计签到:6 天 连续签到:0 天 [LV.20]漫游旅程
|
HPC中国研发团队+ i6 G1 x9 Y+ l ^" N. F8 U
微软中国研发集团服务器与开发工具事业部高性能开发团队的中文博客。
A7 m( ~5 [" U• Home ' P2 r( a- b! C0 h7 X
• Email 7 Q( I$ l2 m" P1 j- q
• RSS 2.0 3 Q: d9 h7 F7 r; I
• Atom 1.0
, O, Y2 _; x6 M9 ~/ HRecent Posts3 F* {( ^, H6 X8 B" v% C
• 思之以实,取之以略,行之以果*
) r/ K# V+ Q! M$ p+ g• HPC,相约TechEd 2009
1 g# _5 c* D$ g* r% `$ o2 c• Visual Studio 2008 HPC SOA C# 调试器插件
/ W8 o+ ~: l- j' r• 高性能计算系统栈的推倒和重建(四)微处理机初期
/ a( N* f! n$ m7 M6 L/ _4 [• 高性能计算系统栈的推倒和重建(二) 专有机时期B - T5 M2 s S8 [% g) Y4 i$ C
Tags6 H; I: l$ b5 c
• BeautyFromAsh
, V+ q! u: O1 j• Cray ' A( i: y) r }- w
• TOP 500 $ K! I2 X2 u8 Y# H$ f' E
• Windows Compute Cluster Server 2003
; q% c! W5 v3 x5 U0 {" b: A2 o8 W• Windows HPC Server 2008
, U/ l# P: a3 U# p2 v5 `- n% {• 业界动态
' J; J* n2 u$ C% ?% s4 _# r• 产品介绍
( r7 l; l l% r: q. t• 产品发布 ; R; G/ i( r' w( s8 e
• 关于我们
% c& a# d& V2 N+ E! B: Z1 R• 员工故事
5 P4 I5 X7 E. n( i4 ? j' m! p• 实习故事 7 m, e4 Z7 |1 p6 P( B7 D. J# x
• 客户交流 ) s0 x& j! b8 P! d7 F
• 技术活动
+ [" C' g7 @% q/ f9 y3 ^ r2 s• 转载引用
M* a2 n5 C! C8 t: I其他 HPC 博客" |2 f8 b3 e1 J9 Y
• Windows HPC Team Blog
J- |- n4 {( A微软服务器与开发工具事业部(中国)博客- k, J( O0 L5 A) j
• 微软服务器与开发工具事业部(中国)
' e+ f& o* Z' b# p) r x$ D• CLR & Silverlight中国研发团队
1 z8 ^# J2 v4 X/ Y5 `2 k; V• SQL Server中国研发团队
) ^; W9 t2 ]5 Z0 H n; X. |- l" r# \• SBS中国研发团队 ! e$ @8 n+ Z- V1 `; |7 c8 Y
• EBS中国研发团队 + Y+ Z# h0 _# F$ _/ r
• WCF Tools 中国研发团队
3 i5 [; e& ?1 n% X4 c) O; f9 h1 q• Soma的博客中文版 , D5 n+ S/ L; j
• System Center Configuration Manager中国研发团队 0 B M. n5 t- f* Q4 ]/ m
Archives
. v1 L0 ~& q0 ~/ n9 t. S) d- C• January 2010 (1)
, R) z+ [7 I$ Z: Q8 A• November 2009 (1) - e% Y' Z# Z3 v- {. l+ K
• September 2009 (4) ' O f X- ]* v5 P4 H7 P& T0 F3 k
• August 2009 (1)
) o" j; }+ y; Z9 z* q• May 2009 (2) 3 C/ Y- |7 O4 R# N6 I. s
• April 2009 (2)
; D$ u' h9 `% v/ v8 h: g3 v) |• February 2009 (2)
) a- s: n; k2 u3 m; X) ^• January 2009 (1)
( F& H/ Q9 i% W8 x( A- v" |$ d1 Y5 S• December 2008 (3) * W* j8 V, q* h: N+ p6 @
• October 2008 (1)
1 e! y# Q5 _$ m( f; [( t• September 2008 (2) 5 t7 h& s/ ^8 |/ @* I6 R, T- O+ K
• August 2008 (3) " |$ p0 ~0 f; i! Q9 `
• July 2008 (1)
2 W* q) i* L# P* @• June 2008 (1)
. R: X% g3 H* l `• May 2008 (2) - G. v, k0 u# ~/ p) B- |7 z3 H& R& q
• April 2008 (2)
/ z0 B4 w7 {8 e4 |! r. J3 f1 \• March 2008 (3)
) i* U8 |4 M& t1 n• February 2008 (1) 2 I2 X. K& l( @8 |" `( E5 f! O
• January 2008 (1)
) x1 O; x4 _4 e# D/ C# R思之以实,取之以略,行之以果*
* a, w% M0 W4 \& i*注:宋代苏辙在其《新论中》中写道“居之以强力,发之以果敢,而成之以无私”,意谓国家平时要有实力,发动一件事要坚决勇敢,取得成功必须无私。这里借用该格式讲一下在Planning(思)、Design(取)、Execution(行)三个阶段的一点体会。
+ X3 ]2 z3 ?- y" i8 H【题记】细想起来我加入高性能计算中国团队做PM Intern(实习项目经理)已经是去年年初的事啦。在Wei Zhen同学(猛击这里)的不断鼓励之下,我把自己在工作中一些学到的、领悟到的东西分享出来,尽管正确性及普适性值得推敲,我仍然抱着美好的愿望希望将来的实习项目经理能在入职的时候有一个更高的起点,不要像我这样花了大半年时间才渐渐摸索出一些道理(>.<岁月不饶人啊)。$ _! J$ T) }, I: e
什么是PM?我定义不了,不过我老板给出过描述(猛击这里):“PM做得最多的是设计和推动实现功能,确保自己负责的功能可以圆满地成为产品的一部分”。那我就做功能中的planning(规划), design(设计)和execution(执行)三个阶段分享一下心得。4 v- z \; q2 J* Y2 o' _. t9 G2 R
规划% H- P R: l6 ]' w& [
规划阶段要解决的问题之一就是“做什么”。可能实习项目经理在规划阶段的参与比较少(因为一般来说,由于实习生对产品、产品的客户群、产品的市场并没有深入了解,通常是老板叫实习生去考虑某某功能),所以就特别容易从用户使用情景(user scenario)迅速跳到设计,这一跳的直接结果就是把为了有价值主张(value proposition)而做功能,变成了为了做功能而做功能。这种情况下,目标会定义不清且难以区分优先级,设计阶段不断评审功能规范的结果很可能变得不可控,由此,最终虽然能创造价值,但是创造的不一定是正确的价值。事实上,历史上很多很酷很炫但是在商业上却很失败的产品就是因为没有被很好地PM(注意,PM在这里是动词)。所以,在规划阶段一定不要怕花时间弄清楚用户最核心的需求到底是什么,自己要做的东西到底是要创造什么明确的价值(>.<为什么听起来像风险投资者问创业者的问题)。
7 a, z2 p% m) N3 Q" h设计4 v- \8 f2 m! d* y
关于设计阶段,我们先考虑一个问题:假设你的城市在推动经济适用房,而你恰好是该市经适房申请政策制定者。你的顾问A帮你列了10条经适房申请标准,并建议申请者必须提供相应的10份证明材料。可是你的顾问B告诉你,由于申请者太多,从政府现有的预算、人力及效率要求来看,最多只能审查每个申请者的5份材料。你该怎么办呢?
. H8 K6 ?4 d4 o' j2 v% a3 ]一个办法就是将证明材料数量减少到5份。这个办法看似是好的,因为它根据实际的资源限制,做出了调整和让步(就像软件开发工程师资源不够,于是砍掉一些功能)。但其实它是不可行的。为什么?因为只要求提供5份证明材料,就会让另外5条标准形同虚设,而显然,“只有满足标准的人才能申请经适房”这个目标就无法实现。
5 f/ V5 a4 G( v2 {$ R8 B- _0 t% `: V8 q那我们该怎么做才对呢?找正确的做法之前,先要知道错误。事实上,刚刚的想法错就错在它是一个典型的“全部或没有”思维:把“证明材料”和“审查”作为一个整体,觉得有一份材料,就该有相应的审查,没有审查,就索性舍弃对应的材料。/ J ~& X1 Z$ [7 n) h X/ G+ F
抛弃“全部或没有”的想法在设计阶段也同样重要。某次功能规范的评审会上,我们的架构师(猛击这里)说过“每个PM心中都要有个路线图(注:译自Roadmap)”。当时我心中的感觉就是“醍醐灌顶”。 路线图的终点,可能就是那个“全部”,起点就是“没有”。千万不能因为资源不够,就停留在那个起点上。刚做PM,可能会为评审过程中部分功能被砍感到心痛,会觉得一些功能只有作为整体同时存在,才能达到设想的完美效果。作为PM,要舍得功能被砍,但是心里也一定要清楚,每次砍功能,让你从路线图的终点又退回了多少,让你的目标妥协了多少。毕竟一个产品会有多个版本,每个版本的开发中,又有多个里程碑,将来总归可以向终点靠近,更何况很多情况下,达不到终点,也能满足80%的用户的需求。
1 O9 }9 B+ i8 g+ B$ b) x6 O回到最初的问题,打破“全部或没有”的思维,我们就会想到解法:还是要求申请者提供10份材料,只不过审查的时候,忽略其中5份。规定了证明材料却去不审查,确实让证明材料的作用妥协了,但证明材料的存在,至少能让部分不符合条件的申请者望而却步,所以我们的目标没有完全妥协。至于忽略掉的5份材料,可以在将来成本能承受的情况下再去审查。9 l, g, l+ q8 h) |
执行
5 D4 Z( V& B4 }+ p, C执行阶段,我最大的领悟就是不要让自己的执行力在执行阶段下降——听起来很悖论。其实由于规划与设计阶段,自己相对明确自己该做什么,一切也只有靠自己去推动才能有进展,而到了执行阶段,很多事情都是开发工程师在做,我只是跟开发工程师商量一个计划进度,并不断关注实际进度。事实上,价值主张是承载在最终交付上的,所以PM应该要关注去交付产品,去把产品推向市场。同时,这个阶段中,很多实现上的小选择会影响到最终的交付,所以跟开发工程师一定要保持密切的沟通。现在想来,我的很多项目在执行阶段都可以做得更好。 m& W8 t, _" k W* e" J
以上是我针对每个阶段选出的一点感悟,事实上在高性能计算团队近10个月的实习中,每天都在学习,总是逐渐体会、领悟到新的东西,以后会多贴出来与大家分享。:)0 Q# R2 l. \0 c& _9 k! C
Ye
- V9 l; b* U2 d6 U& p实习项目经理9 M- W, \/ n, l# X7 U
Posted: Wednesday, January 20, 2010 2:31 PM by yew | 0 Comments
: q( Y4 }% f8 f$ Q6 H6 ~5 pFiled under: 实习故事% g/ K- A4 u. \& ]# `
HPC,相约TechEd 2009 5 B+ S+ j" h* l- H4 `( I
2009年微软技术大会(TechEd)中国下周就将在北京召开了,服务器与开发工具事业部的中国研发团队将派出31位项目经理、软件设计开发工程师和软件测试开发工程师,与中国程序开发者和IT从业人员分享我们最新的产品开发。以下是HPC相关的课程和专家交流沟通会环节,徐明强博士将在大会现场与大家面对面交流。
1 e& r2 w$ Z+ Q& A) X! g8 o& j课程:11/6, 13:00-14:10 使用Windows 高性能计算服务器高效提速应用(WSV331). m* A/ e. X9 H. \
您的应用中的算法和商业流程是否包含众多独立计算单元而需要冗长的处理时间?您当欣慰是这些应用是高性能计算应用范例。在此讲座中,您可以了解如何使用Windows WCF 和Windows 高性能计算服务器2008 来对此类应用进行多个数量级的提速。 我们将着重演示讲解高性能计算编程模式能够简便地、高效地将客户端应用的计算单元负荷卸载到强大的集群上,以达到可扩展性的提速功效。: F) I" `: B) K
专家交流沟通会:11/6, 15:50-16:35 微软高性能计算在金融和制造业的行业应用(MST006)
1 g- @& d o: j; D. I本沟通会将和大家探讨如何利用微软的高性能计算平台提高金融行业和制造业的生产率。
5 l4 i/ {) V0 ]5 j6 XPosted: Monday, November 02, 2009 2:35 AM by Zhen Wei | 0 Comments $ `7 L2 p8 P' T
Filed under: 客户交流, 技术活动, Windows HPC Server 2008/ \- W B' g* ~) I6 \
Visual Studio 2008 HPC SOA C# 调试器插件 & r8 C# X! M2 o1 w! }$ F4 W
就在这个月,负责微软Developer Devision工作的微软全球副总裁Soma先生写了一篇博客介绍Visual Studio 2008和即将发布的Visual Studio 2010中支持并行程序开发的一系列工具。在这篇博客(中文翻译版)中,Soma先生不仅介绍了用于开发MPI程序的MPI debugger,还介绍了用于开发Windows HPC Server 2008中集群面向服务架构(Cluster SOA)应用的SOA Debugger插件。在我们前面一篇博客中已经对MPI Debugger的功能做了介绍,其实SOA Debugger也是我们小组努力工作的成果。通过本篇博客,我想请大家和我一道预览即将发布的HPC SOA C# Cluster Debugger插件。' v6 [: j+ Q6 f0 ?
大家知道集群面向服务架构是我们随Windows HPC Server 2008的发布而新推出的并行应用架构和编程模型。通过集群面向服务架构,我们可以把原先运行在单机上的WCF应用扩展成运行在`Windows HPC Server集群环境中的并行应用。要创建一个SOA应用程序大致上需要经历以下的三步:创建服务(WCF Service);将服务部署到集群中;创建客户端应用。如果我们想调试包括客户端和服务在内的整个应用,还要加上如下的步骤:1)在运行服务的计算节点上安装并运行远程调试器(msvsmon.exe);2)在Visual Studio中运行并调试客户端程序;3)在SOA会话(SOA Session)被创建以后,将Visual Studio调试器附加(attach)到计算节点上的服务宿主进程(HpcServiceHost.exe)上从而调试服务进程。这样调试一个SOA应用一共需要3+3=6个步骤,这还不包括每次修改服务的代码还需要重新执行服务部署的过程。听上去是不是很复杂?别急,下面随我看看SOA Debugger如何为你简化SOA应用开发和调试的体验!/ p. v# U5 r F }6 _
安装SOA Debugger插件后,在Visual Studio的新建C#项目的对话框中,我们看到了一个新的项目类型:SOA Client。没错,就是它了!
5 s! j$ D) P) R/ G/ u
3 X$ m: @$ k' K4 s0 j建立一个SOA Client项目并把它命名为MySOAClient。在我们研究这个新项目之前,还是让我们进行SOA开发的第一步:创建服务程序。大家知道SOA服务程序其实就是一个WCF服务,你可以把现有的WCF服务项目添加到刚刚的MySOAClient解决方案中,也可以在这个解决方案中新建一个WCF服务项目。在我的示例中,我在解决方案中新建了一个叫“EchoService”的简单WCF服务。在创建完服务之后,让我们跳过下一步“将服务部署到集群中”,因为下面我们将看到SOA Debugger可以自动帮我们完成服务部署的工作。* b. M# G) H7 @7 j1 U0 ]* k
下面让我们回到客户端项目来创建客户端应用程序。大体上编码SOA客户端程序和编码普通的WCF客户端程序比较类似,在此就不一一赘述,具体信息大家可以参看Cluster SOA架构白皮书。客户端编码完成之后,我们还需要对项目的一些属性进行设置才能进行集群上的调试工作。在Visual Studio的解决方案浏览器中右键点击MySOAClient项目,点击属性打开项目属性页面,如下图,
" ~" f" {9 M3 {: ] / M5 L4 X$ B) V% B( ~, _" b8 ?% [
我们可以看到这个项目比一般的C#项目多了一个SOA Settings的属性标签。在SOA Setting的属性页中,我们首先在Head node下拉列表中选择我们的集群头节点名。这里的头节点名必须与我们在客户端代码中创建的会话启动信息相一致。比如在我的代码中,
2 M- I1 W# [8 U9 R a9 L/ ^……
; y% p5 {( P Y! ~0 CSessionStartInfo startinfo = new SessionStartInfo("SHPC-0052", "EchoService");
2 Y" v8 h a1 ], B1 t& u……
+ g# w( V8 P# d8 s- ~5 j于是这里我就选择头节点为“SHPC-0052”。接下来我们需要在Available service列表中勾选需要调试的WCF服务。在这个列表中会列出当前解决方案中的所有WCF服务类型的项目,我们只需要选择客户端代码调用的服务(或者多个服务)即可。这里的服务名和服务项目名称以及会话启动信息中的服务名都应该是相同的(在这里是“EchoService”)。除了头节点名和被调试的服务以外,其他的属性都有合适的默认选项,我们暂时不要改变它们的设定。好了,调试的准备工作全部完成了,让我们开始调试吧!: @/ X; X) K6 w
首先将MySOAClient项目设置为调试的启动项目,随后我们在客户端程序创建SOA会话(Microsoft.Hpc.Scheduler.Session.Session.CreateSession(startinfo))的代码后放置一个断点。按“F5”启动调试器,MySOAClient程序会运行到CreateSession()之后中断。这时SOA会话以及SOA服务job已经创建完成了,让我们来看一看Visual Studio是不是已经附加到所有的服务进程上。从调试菜单打开进程工具窗口,我们可以看到,9 L* B# d; D* A d- d, W( b
1 t, D" D6 E# N! [Visual Studio调试器已经附加到所有的服务宿主进程上。WCF服务部署,远程调试器的启动以及附加远程进程的工作都被SOA Debugger自动完成了,是不是有WOW!的感觉呢?既然我们已经完成了服务进程的附加步骤,我们就可以直接调试WCF服务的代码了。所有现有的调试器功能我们都可以使用,包括在在服务代码的断点上中断,F10/F11的单步调试,表达式求值(Watch)以及条件断点等等。当调试结束后,SOA Debugger还会自动完成服务的清理工作。
+ B' Z0 U, W- H我们已经完成了整个SOA开发/调试的过程,回头看看是不是很简单呢?原先的六个步骤最终被简化为:1)创建服务;2)创建客户端程序并设置SOA调试选项;3)F5!这三步,是不是很简单呢?( G; r/ M" t/ ]$ B4 _+ u, T
以上就是对SOA Debugger的简介,SOA Debugger中还有很多很cool的功能,包括:调试不在Visual Studio解决方案中的WCF服务; 为被调试的服务部署额外的文件;只调试运行在特定计算节点上的服务;只调试某些特定的服务请求(Service Request)。对于这些功能我就不一一介绍了,我期待你试用我们即将发布的SOA Debugger之后自己亲身体验所有这些实用的功能!我们的开发工作还在进行之中,在最终发布之一定还会有一些改动,如果大家有什么意见或者问题,欢迎回帖。谢谢!4 l l' S. J" v1 G9 } Y
Ps.,Visual Studio 2008中的MPI Debugger 插件已经发布了,欢迎大家从这里免费下载使用。Visual Studio 2010中的MPI Debugger将随Visual Studio 2010发布,敬请期待。. {! d9 h$ D2 W4 y+ R `; k
Posted: Monday, September 21, 2009 10:47 AM by Keshuang | 0 Comments
) V1 |$ X& k6 [# a: @7 {8 TFiled under: Windows HPC Server 2008, 产品介绍
4 ]! W' N) z# P2 u5 R高性能计算系统栈的推倒和重建(四)微处理机初期
2 x& t. z' Y( i5 x1 S3 p逃匿MPI进程
6 w; @3 a& W9 Q3 Z2 U1993年我加入阿冈国家实验室数学和计算机科学部做Ian Foster 的博士后。, N4 `; v$ {3 [( ~0 O- G* d
3 O5 B x! z" W& V- H; nIan 告诉我,现在科研经费的要求和实际实用应用相结合。为此,我们不能再搞什么logic / functional 语言了。必须和Fortran/C有关。 此时他发明了一个新的语言Fortran-M (M- 代表message passing)。 这个语言实在太像Occam了。Occam 里有Channel, Fortran-M 叫port. Occam的Channel 是强类型的,Fortran-M Port 也是强类型的。Occam 里有Process,Fortran也有,并且,Process可以动态产生!
- Y; V8 s9 y5 N: y2 ~- L1 k/ Z @! k
% u3 \" A# ^ M5 f& pSource: ) P7 J0 H/ {2 N3 m! X, G3 w
我为这个语言写了编译器。Steve Tuecke (后来的globus 架构师)和Bob Olsen写了运行时系统。我倒是非常享受这个项目。那时的我,就是喜欢往系统栈的底层钻。当时的我,觉得世界上没有任何其他的研究比创建并行语言的编译和运行时系统更有吸引力。我当时觉得,并行计算的栈MPI 已经差不多完善了。而并行语言和运行时系统将是把并行计算推向主流的关键技术。
; S% H- E- ^9 h* v7 k$ \
( I* U- ~/ M4 D& |, U4 \不过,一件事情改变了我的看法。* V, y, q; J$ o, X# E. t
一次,我正在做MPI 和Fortran-M 的性能比较实验。结果Rusty Lusk来到我的办公室。满脸不悦。他说我在他的机器上运行了一个MPI 程序,使他的机器非常慢。问我是否可以杀掉它。我觉得很奇怪,我是用了他的机器跑了mpirun. 不过我已经Ctrl-C停掉了我的mpirun。怎么还会在他的机器上跑呢? 后来才知道,他写的MPIRUN是使用rsh 在远程机器上启动MPI 进程。Rsh可以将远程进程的stdout, stderr 转到客户端,使用户有个透明的感觉。但是,当用户键入Ctrl-C 的时候,只是把mpirun 进程杀掉,而远程的进程就逃匿了。 不光没有被杀掉,而且在背景里跑得非常欢。 结论是,Rusty是“自食其果”。
8 K% _4 ^7 s. S& P: L我搜索了网络,发现这种逃匿MPI进程(Runaway MPI Processes)是许多超级计算机中心中造成极大的破坏。用户总是抱怨,怎么超级计算机越用越慢!其实都是因为每次mpirun 非正常中断后,在远程节点就会有逃匿进程出现。管理员最头痛地就是要时不时地登陆到几十个甚至上百个节点上去清除这些逃匿进程。 V c4 Q3 p9 w
后来当我加入Platform Computing时候,周松年问我能为MPI做什么?我就说我要解决逃匿进程问题。在1996年我花了半年写了一个Parallel Application Support Software. 能够完全解决逃匿进程,并且还能精确地采集计算资源使用数据。后来成为公司LSF Parallel产品。: Q) L+ D! v6 b
今天您使用HPC服务器的MSMPI,您也不会发现逃匿进程。这就是投入生产使用的运行时系统和学术界软件的区别。 这点,我们必须归功于那次Rusty Lusk和我的小小的不愉快。这点小不愉快,让我开始关注到许多用户因受MPICH的启动方式而导致的逃匿进程之苦。
3 A6 g$ k$ O& x0 ePosted: Monday, September 07, 2009 8:01 AM by mingqxu | 0 Comments
5 ]5 N, ~3 C9 |Filed under: 业界动态, 员工故事, BeautyFromAsh0 [0 w/ X, j5 `* ~$ N, a
高性能计算系统栈的推倒和重建(二) 专有机时期B % [/ t; z6 d. i# t9 q9 p/ S
Speed beats beauty( L& B# \5 H- d& w7 C& Q4 {
并行机在专有机时代分两大阵营,共享内存和分布式内存结构。
8 V( t+ w" @( H( p# l. l # |7 p) e' `3 }1 z/ v
共享内存所提供的编程界面是非常优雅的。分布式内存机器的编程界面是基于消息传输库,不够优雅。串行程序的并行化相对容易的多,因为任何一个线程都可以访问到所有的数据,因此不需要对原来串行程序在结构上作大的改动。 而为分布式内存机器写程序却不同,首先应用域的数据就要分块,每个进程不光需要本地数据,还要边界数据。在本地计算完后,还要和邻进程交换数据。程序结构上要做大改动。
) @* i+ q. p, o0 y* U2 Y$ T7 g共享内存最大的缺陷是物理上的。是因为其扩展性差。当时80年代的处理机是很慢的了,可是到了32个就出现瓶颈。 这无法能够满足美国能源部许多宏大挑战性问题(Grand Challenge Problems)。所以当时分布式内存的拥护者流行的一句话就是:“Speed beats beauty”。# K* I- }/ i, R p& p9 |
一个很自然生发的美好愿望就来了:能不能使用物理分布式内存,在其上建立共享内存的界面。 这样我们不是就取两者精华去两者之糟粕吗? 分布式共享内存(Distributed Shared Memory – DSM)这样的机器就成为了专有机时代最后一个大创举。
" L. @7 {& ~! u$ D. W$ Y这个基因杂交出来的机器却有致命性的DNA缺陷。我一九九一年加入了曼彻斯特大学新奇计算中心 (CNC) (Centre for Novel Computing) 在John Gurd教授下作研究员。John Gurd 是数据流机器的知名学者。3 Z2 O- y* N$ a2 _( B/ ]- A
4 p3 ~' M/ B/ j% _我加入后不久,CNC就拿到一笔科研补助金(research grant) ,Gurd 教授在诸多的专有机厂商中挑选了一个Kendal了 Square Research (KSR)。其用意在于这个中心的名字里有个“新奇”。九十年代初的英国,爱丁堡和不利索托(Bristol)的中心里有不少大型专有机。绝大部分都是分布式内存。所以,Gurd教授觉得再买一个属于重复。正好KSR 是一个分布式共享内存的机器。这也就给了我一个和这个杂交机器零距离接触的机会。在这个机器上可以用标准的Pthread库,可以用锁来同步对于共享内存的访问。操作系统自动将不同线程分布到不同的节点上。而节点之间的操作系统实现了定制的多机内存的一致性协议。这样编程的确简单了。 机器及软件环境的细节大家可以参考维基百科:http://en.wikipedia.org/wiki/Kendall_Square_Research。 恕不赘复。
+ T: k5 B+ S4 F+ @, Q/ P我当时对于这种新奇机器是充满热忱。在短短半年内,我移植了许多并行逻辑和功能性语言(Parallel Logic and Functional language) e.g. Strand, PCN 等。我之所以能够很快地移植这些语言,是因为共享内存不需要对程序结构有大的改动。
1 }+ U8 |( M1 s9 b( d那么KSR致命DNA弱点在哪里呢?就是性能和扩展性差。为什么物理分布内存还会有性能和扩展性问题呢?8 Q) V( X) P" G- ?; p
首先,它是在硬件和操作系统实现内存缓存一致性协议。为此它的RISC 芯片是专有定制的。这就意味着它无法和业界的豪门IBM, Sun, SGI, HP等RISC 芯片的性能匹敌。第二,也就是最关键的, 这点还是后来我加入Platform Computing后和公司的CEO周松年聊起后受的启发。周松年说:“DSM 在性能上无法和消息传输库并行化的比拟的原因是,DSM的管理单元是进程的地址空间的页(page),它无法反映应用对数据的访问情况(access pattern)。而消息传输库使程序员能够充分利用应用对数据访问的知识来优化并行算法数据访问的局部性(locality)“。 他的透视使我顿悟。缺乏对于应用访问数据的知识,就无法优化对于数据的访问的局部性。 分布式内存的机器造成了多层内存(本地和远程内存)状况,影响应用性能最大的因素,就是是否能够极大限度地访问本地内存。% _3 U8 c+ C, b/ X3 p
自KSR 破产后,我再没有看见过一个DSM的机器。
' K0 q2 F' v1 y7 D7 I) l(待续) |
|