Welcome to TechNet Blogs Sign in | Join | Help

HPC中国研发团队

微软中国研发集团服务器与开发工具事业部高性能开发团队的中文博客。
送给四川山区的儿童一份礼物 -- 希望小学 Give the gift of education and change someone's life!

各位朋友:

大家可能已经知道,HPC团队去年探访了四川省一所条件艰苦的村小,那也是HPC dev魏臻的家乡所在地。我们当时带去一些教学物资,捐了7000多人民币,之后其他团队有的同事也表示出了捐助的意愿。在此,我恳请大家更进一步地支持慈善、传递爱心 –– 我们将会争取在二月份募捐到20万人民币(约3万美元),为那里的孩子们建立一所希望小学。

· 目标简介 我们想与明日中华教育基金会(CTEF)合作,捐建一所小规模的小学。CTEF,是在西雅图注册的非盈利组织,旨在帮助改善中国农村教育状况,他们与微软以及华协(CHIME) 有长期良好的合作关系。如果能募集到20万人民币(包括微软对员工的等额匹配捐款),我们就能为70多个孩子和他们的家庭拥有一所学校的美梦成真。

· 背景动机 我们团队去四川旅游的时候,在网上偶然得知当地南充日报对魏臻家乡的一所“夫妻小学”的报道。该山区以务农为主,主要收入来源为外出打工的农民工,人均月收入只有 600元左右。三年以前,很多孩子辍学在家,因为乡中心小学距离太远,低龄儿童无法独立上下学或住校生活。鉴于此,一对夫妻老师建立了这个民办村小,教书育人,这也重新燃起了许多家庭的希望。因经济拮据,他们租用农民房作为两间教室,一间土坯房,一间砖瓦房,房屋破旧,光线昏暗。该村小的运营费用,包括教师工资、蒸饭工人工资和房租等,仅靠幼儿园学生缴纳的学费和国家财政为每个小学生配发一年250元的补贴。由于房租年年上涨,连这样简陋的小学也渐渐难以为继。在探访期间,我们被孩子们的求知渴望和老师的无私奉献所深深感动,详情请参阅我们发在微软亚太研发集团博客上的文章

· 请您行动

o 我们会在春节后组织一场项目介绍会,期待您的参加。到时您可以选择现场捐款,或是之后通过银行转帐到我们的专户里面(详情届时更新)。我们计划在学校的介绍铭牌刻上捐款达到或超过1000元(或200美元)的热心朋友的名字。

o 口口相传:转发这封email或转讲这个故事给您的家人朋友。

clip_image001 clip_image002

clip_image003 clip_image004

· 问题解答

o 本次募捐仅限于微软技术计算(TC, Technical Computing)部门吗?

§ 不是,这一慈善努力由我们TC部门员工发起,乐于接受所有热心人的捐助。

o 如何确保合理使用我的捐款?

§ 魏臻,将作为CTEF的志愿者担任本项目的项目经理,负责跟踪和监控捐款的使用情况。我们找到一位信得过的乡中心小学副校长作为当地联系人,将会详细记录和报告捐款使用情况,并在学校建设的各个阶段发送照片。

o 新学校的所有权归谁?各利益相关方都协调好了吗?

§ 我们已经与村小老师、村委会领导、乡中心小学校长和县教育局官员达成书面协议:新学校归村委会所有,仅限于教育目的。CTEF董事会也同意了我们的项目提议。

o 该小学位置在哪?

§ 四川省南充市营山县合兴乡糖房村大垭口http://cn.bing.com/ditu/?v=2&encType=1&cid=806B47350BB8F7FC!3502.

o 如果这两位老师不能继续上课了怎么办,特别是政府最近在推行“清退民办教师”的政策?

§ 乡中心小学的校长称没有接到任何通知,在当地师资力量有限的情况下清退民办教师不太现实,就算以后清退了,他承诺会安排其他正规教师来这里上课。

o 小学的占地面积和每平方米成本是多少?

§ 占地约400平方米,预算建设成本约500元/平米。由于两个原因成本比预想的略高:1)该址交通不便,从县城开车4小时,还要走30分钟山路,故而运费较高;2)经实地考察拟建校位置,地基需要打得比较深。

o 捐款仅限于二月吗?小学什么时候竣工?

§ 无此限制,二月的捐款将用于修建小学,计划于今年秋季开学前竣工。二月以后的捐款将被用于购买教学用具:桌椅、书籍、乒乓球台等。

o 其他问题或建议?

§ 请Email联系魏臻George Yan

后续的捐款、进度情况也会在这个博客上列出。天寒人心暖,让我们伸出温暖的手,送给四川山区的儿童一份礼物 -- 希望小学。恭祝大家新春快乐!

As you may have known,  HPC Shanghai team visited a poor-condition village school in Zhen Wei (HPC dev)’s hometown, Sichuan last year after the major earthquake; we donated over 7K RMB on the spot. I’m writing this email hoping for your support on the next phase of this charity effort – try to raise 200k RMB (or 30k USD) in this February to build a small school.

· What we want to do  We would like to help build a small elementary school, partnering with a Seattle-based Non-Profit Organization China Tomorrow Education Foundation (CTEF, aiming to improve the education in rural China). If we can raise 200k RMB (30k USD) with Microsoft’s match for employee’s donation counted, then we can make the school a dream come true for 70+ students and their families.

· Why we want to help We went to Sichuan for morale trip and happened to know this “Couple-Run School” from a local newspaper’s report in Zhen Wei’s hometown. The mountain area has only agriculture as the major industry. While the main incoming comes from migrant labor force working in big cities far away, the average incoming is about 600  RMB (less than 100USD) per month. 3 years ago, many students there discontinued studies because it’s too far away to go to the only one central primary school ran by government. At that time, 2 teachers (husband and wife) founded this small school outside of government education system, to keeping the education for the local children -- the hope for many families. The teacher are running this small school with 250 RMB/year for each elementary school child from country finance and kindergarten students’ tuition fee and need to cover rental. Due to limited income, they are renting 2 terrible-condition classrooms from a peasant and barely able to afford the increasing rental fee. During the trip, we are deeply moved by the children’s hunger for learning and the teachers’ devotion for education. Microsoft China R&D blog has forwarded our trip report.

· What help we need from YOU

o Come to the project introduction meeting after Chinese New Year. Then you can choose to donate on the spot or later, cash or bank account transfer. We plan to make a plaque listing the donor names above $200 (or 1000 RMB).

o Spread the word: Forward this email or tell this story to you family and friends.

· FAQ

o Is this donation restricted in Technical Computing organization, Microsoft?

§ No, we as TC team is initiating this charity effort and appreciate donations from all warm hearted people.

o How do I know the money will be well utilized for the school project?

§ Zhen Wei will be the project manager, as a CTEF volunteer, responsible for tracking donation usage and monitoring the construction periodically. He has identified a vice-principal of the central village school as a worthwhile coordinator, and will report detailed donation usage and send photos for each important construction milestone.

o Who will be the new school owner? Do all stakeholders agree with this plan?

§ We’ve got written agreement from the teachers, village head, central school principals and county education bureau officers:  New school will be founded for education purpose only, and will be owned by village governing committee. CTEF board meeting has agreed our project proposal.

o Where does the project locate?

§ Dayakou, Tangfang, Hexing, Yingshan, Sichuan. http://cn.bing.com/ditu/?v=2&encType=1&cid=806B47350BB8F7FC!3502.

o What if the 2 teachers cannot sustain, especially when government pushes the “Forcing unofficial teachers to quit” policy:

§ The central village school principal doesn’t think this can be executed in the coming years, and commits to arrange other teachers there if that happens.

o What’s the school floor area and cost per square meter?

§ It’s about 400 square meters and 500 RMB/square meter. The cost is higher than expected because of 2 reasons: 1)the transportation material transportation fee is high due to terrible traffic and long distance – 4 hours’ drive from county and 30 minutes’ walk from road to the school. 2) It needs deep digging to build a good foundation after experiment.

o Is February a hard stop for donation? When can the school be built up?

§ No, donation in February will be used for school construction. The school is planned to be put to use for next semester(September). So donation after February and before September will be used for buying desks, books, Ping-Pong tables, etc.

o Other questions or suggestions?

§ Just drop Zhen Wei and George Yan an email.

Following donation and progress can be tracked on this blog. Give the gift of education and change someone's life! Wish you a happy New Year!

school

Page1

Page2

思之以实,取之以略,行之以果*

*注:宋代苏辙在其《新论中》中写道“居之以强力,发之以果敢,而成之以无私”,意谓国家平时要有实力,发动一件事要坚决勇敢,取得成功必须无私。这里借用该格式讲一下在Planning(思)、Design(取)、Execution(行)三个阶段的一点体会。

【题记】细想起来我加入高性能计算中国团队做PM Intern(实习项目经理)已经是去年年初的事啦。在Wei Zhen同学(猛击这里)的不断鼓励之下,我把自己在工作中一些学到的、领悟到的东西分享出来,尽管正确性及普适性值得推敲,我仍然抱着美好的愿望希望将来的实习项目经理能在入职的时候有一个更高的起点,不要像我这样花了大半年时间才渐渐摸索出一些道理(>.<岁月不饶人啊)。

什么是PM?我定义不了,不过我老板给出过描述(猛击这里):“PM做得最多的是设计和推动实现功能,确保自己负责的功能可以圆满地成为产品的一部分”。那我就做功能中的planning(规划), design(设计)和execution(执行)三个阶段分享一下心得。

规划

规划阶段要解决的问题之一就是“做什么”。可能实习项目经理在规划阶段的参与比较少(因为一般来说,由于实习生对产品、产品的客户群、产品的市场并没有深入了解,通常是老板叫实习生去考虑某某功能),所以就特别容易从用户使用情景(user scenario)迅速跳到设计,这一跳的直接结果就是把为了有价值主张(value proposition)而做功能,变成了为了做功能而做功能。这种情况下,目标会定义不清且难以区分优先级,设计阶段不断评审功能规范的结果很可能变得不可控,由此,最终虽然能创造价值,但是创造的不一定是正确的价值。事实上,历史上很多很酷很炫但是在商业上却很失败的产品就是因为没有被很好地PM(注意,PM在这里是动词)。所以,在规划阶段一定不要怕花时间弄清楚用户最核心的需求到底是什么,自己要做的东西到底是要创造什么明确的价值(>.<为什么听起来像风险投资者问创业者的问题)。

设计

关于设计阶段,我们先考虑一个问题:假设你的城市在推动经济适用房,而你恰好是该市经适房申请政策制定者。你的顾问A帮你列了10条经适房申请标准,并建议申请者必须提供相应的10份证明材料。可是你的顾问B告诉你,由于申请者太多,从政府现有的预算、人力及效率要求来看,最多只能审查每个申请者的5份材料。你该怎么办呢?

一个办法就是将证明材料数量减少到5份。这个办法看似是好的,因为它根据实际的资源限制,做出了调整和让步(就像软件开发工程师资源不够,于是砍掉一些功能)。但其实它是不可行的。为什么?因为只要求提供5份证明材料,就会让另外5条标准形同虚设,而显然,“只有满足标准的人才能申请经适房”这个目标就无法实现。

那我们该怎么做才对呢?找正确的做法之前,先要知道错误。事实上,刚刚的想法错就错在它是一个典型的“全部或没有”思维:把“证明材料”和“审查”作为一个整体,觉得有一份材料,就该有相应的审查,没有审查,就索性舍弃对应的材料。

抛弃“全部或没有”的想法在设计阶段也同样重要。某次功能规范的评审会上,我们的架构师(猛击这里)说过“每个PM心中都要有个路线图(注:译自Roadmap)”。当时我心中的感觉就是“醍醐灌顶”。 路线图的终点,可能就是那个“全部”,起点就是“没有”。千万不能因为资源不够,就停留在那个起点上。刚做PM,可能会为评审过程中部分功能被砍感到心痛,会觉得一些功能只有作为整体同时存在,才能达到设想的完美效果。作为PM,要舍得功能被砍,但是心里也一定要清楚,每次砍功能,让你从路线图的终点又退回了多少,让你的目标妥协了多少。毕竟一个产品会有多个版本,每个版本的开发中,又有多个里程碑,将来总归可以向终点靠近,更何况很多情况下,达不到终点,也能满足80%的用户的需求。

回到最初的问题,打破“全部或没有”的思维,我们就会想到解法:还是要求申请者提供10份材料,只不过审查的时候,忽略其中5份。规定了证明材料却去不审查,确实让证明材料的作用妥协了,但证明材料的存在,至少能让部分不符合条件的申请者望而却步,所以我们的目标没有完全妥协。至于忽略掉的5份材料,可以在将来成本能承受的情况下再去审查。

执行

执行阶段,我最大的领悟就是不要让自己的执行力在执行阶段下降——听起来很悖论。其实由于规划与设计阶段,自己相对明确自己该做什么,一切也只有靠自己去推动才能有进展,而到了执行阶段,很多事情都是开发工程师在做,我只是跟开发工程师商量一个计划进度,并不断关注实际进度。事实上,价值主张是承载在最终交付上的,所以PM应该要关注去交付产品,去把产品推向市场。同时,这个阶段中,很多实现上的小选择会影响到最终的交付,所以跟开发工程师一定要保持密切的沟通。现在想来,我的很多项目在执行阶段都可以做得更好。

以上是我针对每个阶段选出的一点感悟,事实上在高性能计算团队近10个月的实习中,每天都在学习,总是逐渐体会、领悟到新的东西,以后会多贴出来与大家分享。:)

Ye
实习项目经理

HPC,相约TechEd 2009

2009年微软技术大会(TechEd)中国下周就将在北京召开了,服务器与开发工具事业部的中国研发团队将派出31位项目经理、软件设计开发工程师和软件测试开发工程师,与中国程序开发者和IT从业人员分享我们最新的产品开发。以下是HPC相关的课程和专家交流沟通会环节,徐明强博士将在大会现场与大家面对面交流。

课程:11/6, 13:00-14:10 使用Windows 高性能计算服务器高效提速应用(WSV331)

您的应用中的算法和商业流程是否包含众多独立计算单元而需要冗长的处理时间?您当欣慰是这些应用是高性能计算应用范例。在此讲座中,您可以了解如何使用Windows WCF 和Windows 高性能计算服务器2008 来对此类应用进行多个数量级的提速。 我们将着重演示讲解高性能计算编程模式能够简便地、高效地将客户端应用的计算单元负荷卸载到强大的集群上,以达到可扩展性的提速功效。

专家交流沟通会:11/6, 15:50-16:35 微软高性能计算在金融和制造业的行业应用(MST006)

本沟通会将和大家探讨如何利用微软的高性能计算平台提高金融行业和制造业的生产率。

Visual Studio 2008 HPC SOA C# 调试器插件

就在这个月,负责微软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插件。

大家知道集群面向服务架构是我们随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应用开发和调试的体验!

安装SOA Debugger插件后,在Visual Studio的新建C#项目的对话框中,我们看到了一个新的项目类型:SOA Client。没错,就是它了!

clip_image002

建立一个SOA Client项目并把它命名为MySOAClient。在我们研究这个新项目之前,还是让我们进行SOA开发的第一步:创建服务程序。大家知道SOA服务程序其实就是一个WCF服务,你可以把现有的WCF服务项目添加到刚刚的MySOAClient解决方案中,也可以在这个解决方案中新建一个WCF服务项目。在我的示例中,我在解决方案中新建了一个叫“EchoService”的简单WCF服务。在创建完服务之后,让我们跳过下一步“将服务部署到集群中”,因为下面我们将看到SOA Debugger可以自动帮我们完成服务部署的工作。

下面让我们回到客户端项目来创建客户端应用程序。大体上编码SOA客户端程序和编码普通的WCF客户端程序比较类似,在此就不一一赘述,具体信息大家可以参看Cluster SOA架构白皮书。客户端编码完成之后,我们还需要对项目的一些属性进行设置才能进行集群上的调试工作。在Visual Studio的解决方案浏览器中右键点击MySOAClient项目,点击属性打开项目属性页面,如下图,

clip_image004

我们可以看到这个项目比一般的C#项目多了一个SOA Settings的属性标签。在SOA Setting的属性页中,我们首先在Head node下拉列表中选择我们的集群头节点名。这里的头节点名必须与我们在客户端代码中创建的会话启动信息相一致。比如在我的代码中,

……

SessionStartInfo startinfo = new SessionStartInfo("SHPC-0052", "EchoService");

……

于是这里我就选择头节点为“SHPC-0052”。接下来我们需要在Available service列表中勾选需要调试的WCF服务。在这个列表中会列出当前解决方案中的所有WCF服务类型的项目,我们只需要选择客户端代码调用的服务(或者多个服务)即可。这里的服务名和服务项目名称以及会话启动信息中的服务名都应该是相同的(在这里是“EchoService”)。除了头节点名和被调试的服务以外,其他的属性都有合适的默认选项,我们暂时不要改变它们的设定。好了,调试的准备工作全部完成了,让我们开始调试吧!

首先将MySOAClient项目设置为调试的启动项目,随后我们在客户端程序创建SOA会话(Microsoft.Hpc.Scheduler.Session.Session.CreateSession(startinfo))的代码后放置一个断点。按“F5”启动调试器,MySOAClient程序会运行到CreateSession()之后中断。这时SOA会话以及SOA服务job已经创建完成了,让我们来看一看Visual Studio是不是已经附加到所有的服务进程上。从调试菜单打开进程工具窗口,我们可以看到,

clip_image006

Visual Studio调试器已经附加到所有的服务宿主进程上。WCF服务部署,远程调试器的启动以及附加远程进程的工作都被SOA Debugger自动完成了,是不是有WOW!的感觉呢?既然我们已经完成了服务进程的附加步骤,我们就可以直接调试WCF服务的代码了。所有现有的调试器功能我们都可以使用,包括在在服务代码的断点上中断,F10/F11的单步调试,表达式求值(Watch)以及条件断点等等。当调试结束后,SOA Debugger还会自动完成服务的清理工作。

我们已经完成了整个SOA开发/调试的过程,回头看看是不是很简单呢?原先的六个步骤最终被简化为:1)创建服务;2)创建客户端程序并设置SOA调试选项;3)F5!这三步,是不是很简单呢?

以上就是对SOA Debugger的简介,SOA Debugger中还有很多很cool的功能,包括:调试不在Visual Studio解决方案中的WCF服务; 为被调试的服务部署额外的文件;只调试运行在特定计算节点上的服务;只调试某些特定的服务请求(Service Request)。对于这些功能我就不一一介绍了,我期待你试用我们即将发布的SOA Debugger之后自己亲身体验所有这些实用的功能!我们的开发工作还在进行之中,在最终发布之一定还会有一些改动,如果大家有什么意见或者问题,欢迎回帖。谢谢!

Ps.,Visual Studio 2008中的MPI Debugger 插件已经发布了,欢迎大家从这里免费下载使用。Visual Studio 2010中的MPI Debugger将随Visual Studio 2010发布,敬请期待。

高性能计算系统栈的推倒和重建(四)微处理机初期

逃匿MPI进程

1993年我加入阿冈国家实验室数学和计算机科学部做Ian Foster 的博士后。

clip_image001

Ian 告诉我,现在科研经费的要求和实际实用应用相结合。为此,我们不能再搞什么logic / functional 语言了。必须和Fortran/C有关。 此时他发明了一个新的语言Fortran-M (M- 代表message passing)。 这个语言实在太像Occam了。Occam 里有Channel, Fortran-M 叫port. Occam的Channel 是强类型的,Fortran-M Port 也是强类型的。Occam 里有Process,Fortran也有,并且,Process可以动态产生!

clip_image002

Source:

我为这个语言写了编译器。Steve Tuecke (后来的globus 架构师)和Bob Olsen写了运行时系统。我倒是非常享受这个项目。那时的我,就是喜欢往系统栈的底层钻。当时的我,觉得世界上没有任何其他的研究比创建并行语言的编译和运行时系统更有吸引力。我当时觉得,并行计算的栈MPI 已经差不多完善了。而并行语言和运行时系统将是把并行计算推向主流的关键技术。

clip_image004

不过,一件事情改变了我的看法。

一次,我正在做MPI 和Fortran-M 的性能比较实验。结果Rusty Lusk来到我的办公室。满脸不悦。他说我在他的机器上运行了一个MPI 程序,使他的机器非常慢。问我是否可以杀掉它。我觉得很奇怪,我是用了他的机器跑了mpirun. 不过我已经Ctrl-C停掉了我的mpirun。怎么还会在他的机器上跑呢? 后来才知道,他写的MPIRUN是使用rsh 在远程机器上启动MPI 进程。Rsh可以将远程进程的stdout, stderr 转到客户端,使用户有个透明的感觉。但是,当用户键入Ctrl-C 的时候,只是把mpirun 进程杀掉,而远程的进程就逃匿了。 不光没有被杀掉,而且在背景里跑得非常欢。 结论是,Rusty是“自食其果”。

我搜索了网络,发现这种逃匿MPI进程(Runaway MPI Processes)是许多超级计算机中心中造成极大的破坏。用户总是抱怨,怎么超级计算机越用越慢!其实都是因为每次mpirun 非正常中断后,在远程节点就会有逃匿进程出现。管理员最头痛地就是要时不时地登陆到几十个甚至上百个节点上去清除这些逃匿进程。

后来当我加入Platform Computing时候,周松年问我能为MPI做什么?我就说我要解决逃匿进程问题。在1996年我花了半年写了一个Parallel Application Support Software. 能够完全解决逃匿进程,并且还能精确地采集计算资源使用数据。后来成为公司LSF Parallel产品。

今天您使用HPC服务器的MSMPI,您也不会发现逃匿进程。这就是投入生产使用的运行时系统和学术界软件的区别。 这点,我们必须归功于那次Rusty Lusk和我的小小的不愉快。这点小不愉快,让我开始关注到许多用户因受MPICH的启动方式而导致的逃匿进程之苦。

高性能计算系统栈的推倒和重建(二) 专有机时期B

Speed beats beauty

并行机在专有机时代分两大阵营,共享内存和分布式内存结构。

clip_image002clip_image004

共享内存所提供的编程界面是非常优雅的。分布式内存机器的编程界面是基于消息传输库,不够优雅。串行程序的并行化相对容易的多,因为任何一个线程都可以访问到所有的数据,因此不需要对原来串行程序在结构上作大的改动。 而为分布式内存机器写程序却不同,首先应用域的数据就要分块,每个进程不光需要本地数据,还要边界数据。在本地计算完后,还要和邻进程交换数据。程序结构上要做大改动。

共享内存最大的缺陷是物理上的。是因为其扩展性差。当时80年代的处理机是很慢的了,可是到了32个就出现瓶颈。 这无法能够满足美国能源部许多宏大挑战性问题(Grand Challenge Problems)。所以当时分布式内存的拥护者流行的一句话就是:“Speed beats beauty”。

一个很自然生发的美好愿望就来了:能不能使用物理分布式内存,在其上建立共享内存的界面。 这样我们不是就取两者精华去两者之糟粕吗? 分布式共享内存(Distributed Shared Memory – DSM)这样的机器就成为了专有机时代最后一个大创举。

这个基因杂交出来的机器却有致命性的DNA缺陷。我一九九一年加入了曼彻斯特大学新奇计算中心 (CNC) (Centre for Novel Computing) 在John Gurd教授下作研究员。John Gurd 是数据流机器的知名学者。

clip_image006

我加入后不久,CNC就拿到一笔科研补助金(research grant) ,Gurd 教授在诸多的专有机厂商中挑选了一个Kendal了 Square Research (KSR)。其用意在于这个中心的名字里有个“新奇”。九十年代初的英国,爱丁堡和不利索托(Bristol)的中心里有不少大型专有机。绝大部分都是分布式内存。所以,Gurd教授觉得再买一个属于重复。正好KSR 是一个分布式共享内存的机器。这也就给了我一个和这个杂交机器零距离接触的机会。在这个机器上可以用标准的Pthread库,可以用锁来同步对于共享内存的访问。操作系统自动将不同线程分布到不同的节点上。而节点之间的操作系统实现了定制的多机内存的一致性协议。这样编程的确简单了。 机器及软件环境的细节大家可以参考维基百科:http://en.wikipedia.org/wiki/Kendall_Square_Research。 恕不赘复。

我当时对于这种新奇机器是充满热忱。在短短半年内,我移植了许多并行逻辑和功能性语言(Parallel Logic and Functional language) e.g. Strand, PCN 等。我之所以能够很快地移植这些语言,是因为共享内存不需要对程序结构有大的改动。

那么KSR致命DNA弱点在哪里呢?就是性能和扩展性差。为什么物理分布内存还会有性能和扩展性问题呢?

首先,它是在硬件和操作系统实现内存缓存一致性协议。为此它的RISC 芯片是专有定制的。这就意味着它无法和业界的豪门IBM, Sun, SGI, HP等RISC 芯片的性能匹敌。第二,也就是最关键的, 这点还是后来我加入Platform Computing后和公司的CEO周松年聊起后受的启发。周松年说:“DSM 在性能上无法和消息传输库并行化的比拟的原因是,DSM的管理单元是进程的地址空间的页(page),它无法反映应用对数据的访问情况(access pattern)。而消息传输库使程序员能够充分利用应用对数据访问的知识来优化并行算法数据访问的局部性(locality“。 他的透视使我顿悟。缺乏对于应用访问数据的知识,就无法优化对于数据的访问的局部性。 分布式内存的机器造成了多层内存(本地和远程内存)状况,影响应用性能最大的因素,就是是否能够极大限度地访问本地内存。

自KSR 破产后,我再没有看见过一个DSM的机器。

(待续)

高性能计算系统栈的推倒和重建(三)微处理机初期

望洋兴叹

在专有机时代作并行计算的研究,你得会投“胎”。当时,全球科研的浪尖是在美国,能在Communications of ACM上发表论文的,都是美国大学的。用的HyperCube, Cray,Connection Machine 2 等大型机。而在英国,只有国产Transputer。 更可悲的是,我所在的埃德塞特大学(Exeter University), 我们当时只有四个transputer 节点。当时在英国,可以说是望着大西洋对岸的美国兴叹啊!我看美国人的论文的心情,就好比是一个穷人家的孩子偏偏喜欢上摄影,然后看着有钱人家的少爷拿着长焦、广角镜头,口水只能往里咽。

1993年,我到了美国阿冈(Argonne)国家实验室后,我就好像是小孩进了糖果店,因为那里有不少专有机(CM2, Paragon, Sequent等)。我问秘书预订了每个专有机的用户手册。每个手册都有电话簿那么厚,当秘书象我小时搬蜂窝煤一样把几英尺厚的手册搬进我的办公室后,她累得大抒一口气。现在看来,真是浪费了,这些手册我都没有用过。不是我没有用功,而是专有机被第一批微处理机颠覆了!

消息传送库pvm, P4和 MPI

在80年代时候,多种消息传输环境被开发出来。有些是为专有机开发的Ncube. 而另外不少是为Unix工作站开发的。比较有名的是Oak Ridge 实验室的PVM (Parallel Virtual Machines) 和阿冈(Argonne) P4 和PICL, Ohio 超级计算机中心的LAM。

当我看到PVM 的时候,我也就不望洋兴叹了。因为用工作站组装成一个超级计算机,不用花大钱去买专有机。而且写程序也是用常见的C或Fortran语言。不需要专有的语言。 一下子,高性能计算的世界在我眼前变平了。

到了1992年末,听说又要搞个什么MPI。我和一帮英国同事都在笑,怎么又来一个消息传输库。后来才知道,我们笑得过快。原来,MPI是要吸百家之长、制定工业标准、省得大家重新发明轮子、浪费体力精力脑力人力。 Argonne和Oak Ridge 都是美国能源部的实验室。两个实验室,为了一个消息传输库争夺用户,结果使得能源部的应用开发成本提高两倍,这是实在说不过去。1994年这个标准终于出来了,不到两年的时间出来了这个标准,在HPC领域是相当快的。而且有许多学术界的人士参加的标准Forum, 一向是拖拖拉拉,没有目标导向,企图把海水烧开。为什么MPIForum 能够如此神速地推出此标准呢?

这要归功于两个人,Bill Gropp 和 Rusty Lusk, 他们都是从阿冈国家实验室的科学家。不要笑,他们的抬头就是“科学家”。

clip_image001 clip_image002

Bill Gropp Rusty Lusk

他们告诉我,最重要的原因,是MPI一开始就有一个参考实现:MPICH。 是他们两人主写的代码。所以,一旦有了一个可以参考的MPI库。一些应用就可以开始并行化。这样,许多没有任何应用场景的“好主意”,就很容易被扔到“Out of scope”栏目。帮助参加讨论者集中注意力。还有,他们采用的方法是一天早中晚连轴转的方式,如此高强度的讨论,只有那些铁杆、硬核的人才能挺得过去。所以,也把一些不懂行,不委身、但往往容易随机化讨论的人自然淘汰出局。

很多人把集群的概念归于Beauwolf. 其实,集群已经在九十年代初,就有了。许多人都以为,是beauwolf 集群后,工业界才开始使用。历史并非如此。听我给同学们表来。

制造业最早的投入生产的微处理机集群

在美国East Hartford,驻扎着著名飞机发动机厂商 Pratt Whitney的设计中心。过去,为了测验叶片的强度,他们要将一个冰冻鸡扔向高速旋转的发动机上,然后分析断面。 毫无疑问,造价极高。后来,他们使用Cray来做模拟仿真。只是能够模拟单叶片。而且Cray成为稀有资源,每个工程师的作业,都要排上两天才能算上题。

90年代上半叶,Pratt Whitney的CFD组,开始自主设计、开发一套消息传递系统,Prowess。它可以扩展到上千台太阳工作站。其中带头人名叫Craig Fischberg, 因此在制造业界成名。95年左右,GE 飞机发动机给了他双倍工资并为其妻子安排了很好的工作,把他挖了去。后来,他又用MPI 来为GE建立了同样系统。从此,他在GE 的地位如日中升。

一想起工作站资源觅食(Cycle Scavenging)人人都以为最早是由Seti@home. 其实,在九十年代初在Pratt Whitney 已经有了。

那么从Cray 到工作站集群到底带来什么大不了的效益,使得GE出血本要挖人才呢? 后来,Craig Fischberg 跟我讲,以前只能在叶片上模拟,后来能够把模拟整个发动机。以前的排队时间长至3天,结果晚上提交,第二天一早就可以看见结果。结果呢,高耗资的物理测试减少了,设计时间缩短了一半,而且飞机引擎的油耗效率大大提高。所以,GE能不受刺激吗?花了双倍工资挖到了Craig Fischberg是非常小的代价。

成百上千的工作站的计算能力被完全释放出来。他们用的作业调度器是Platform Computing 的LSF。 所以,在九十年代,LSF的用户手册写着“Unleashing the Power” – 释放能力!就是从这儿来的。

商家简介

机器厂商

IBM,SGI, HP 和SUN

硬件

精简指令芯片

处理器间网络联接

定制化的网络

应用软件编程界面

MPI-工业标准 PVM 和其他 消息传递软件包

作业调度软件

LSF, PBS, Sun Grid Engine (SGE)

 

为什么会有那么多的定制化的网络联接呢?我们下次再说。

下次内容: 我和Rusty Lusk 的一个不开心遭遇引发我的奇想。

高性能计算系统栈的推倒和重建(二) 专有机时期A

选择并行计算, 被人泼了冷水

1987年春晚,费翔的故乡的云唱红。歌云:“归来吧,浪迹天涯的游子“。可我那时却踏上了留学之路。在研究人工智能高潮时候,我选择了并行计算。为什么要选并行计算呢? 当时我选主攻方向的标准非常单一,那就是越新越好。我出国的目的就是要学习最新的科学技术,因为当时我坚信只有科学才能救中国。当我把英国导师的研究计划提议书给国内导师过目时,他的第一的评语就是:”我看提议书中的许多参考资料都是当年或近年出的,是国际领先的方向“。

在英国1988年的“并行计算专家会议”上,我遇到一位工业界的人士, 互相介绍时候,我兴奋地告诉他我的博士主攻方向。 他的回答是我一生都不能忘记: “并行计算不会有前途的。将来人们将造越来越大的向量机。没有人愿意将自己的应用并行化,因为太难了”。

现在看来,这个专家是大错特错了。 虽然如此,我还是非常赞赏他的坦率。他完全可以不必加什么评论,事不关己,可以高高挂起。他不愿意看见我往火坑里跳的精神可嘉。不过,专家的话也是要分析地去接受。而且,当你和专家有不同意见的时候,也不要迷信。 长江后浪推前浪,新一代要超过前一代。不迷信权威是科学向前发展必要倡导的精神。

我没有相信他的话。

这段时间的高性能计算的生态环境如下:

机器厂商

Cray, Thinking Machines (CM-5), Sequent, Kendal Square Research (KSR), INMOS (Transputers)

硬件

定制化的芯片

处理器间网络联接

定制化的网络

软件

专有语言或FORTRAN的专有指令和工具

我们看见,“定制”“专有”这是造成价格天价的原因。 那时候,CRAY只有少数西方的国家实验室和大型制造业公司才能拥有。 只有少数先进国家才能拥有。杜甫一句诗词,似乎表达了我当时的意愿并有预言性:“安得广厦千万间,大庇 天下寒士俱欢颜”。 高性能计算关乎全世界的一项技术,它的益处不能被一个国家所禁锢和独占。这二十一年,我感觉有支看不见的手,把高性能计算机从国家实验室的围墙里,推出到制造业,电子业、生命科学和制药业,石油业,金融业。 从美国、推向西方先进的国家,又推向东方。 曙光和微软研制的两百万亿次计算机就是一个例子。

小心处理器杀手

在一九九零时候,美国劳伦斯Livermore 实验室的Eugene Brooks 说了一句话:“Beware the killer Micros” (小心微处理器杀手)。 他这句话叫许多向量机的生产和设计厂商诚惶诚恐,为什么呢? 我在微软一个同事,Frank Chism, 曾经是Cray 的雇员。他告诉我,那时候每年CRAY的CEO和克莱斯勒的CIO的谈话是非常痛苦的。 克莱斯勒的CIO就问CRAY的CEO:为什么HP的工作站比你们CRAY要快,而我却要支付更贵的机器呢?“。 微处理机的日益强大的性价比使之取向量机而代之的成为必然。

给我泼冷水的英国专家有句还是说对了,那就是并行化一个程序是很困难的,为什么别人会有人去做呢?不过他的话有个逻辑谬误,那就是:“没有人会去修改应用,因为太困难了“。 出力不讨好的事尚且有人做,更何况出力能讨到好的事情呢?这时候,美国制造业的一个企业,就成功地用工作站替代了向量机来解决计算流体力学的问题。我们下次再聊。

对于专有机的Occam语言的三大遗憾

Occam 语言是我接触并行计算的第一个语言。这个语言是以一个哲学家Occam命名。提起他,我们都知道有个Occam剃刀原则(Occam Razor)。 就是:“Keep it simple” 原则。这个语言之简练和直观不逊于其命名。它用Channel, SEQ, PAR 和ALT 等语言部件,可以构建各种并行进程及其通讯和同步场景. 下面程序实现了典型的生产者和消费者通讯的例子:

PROC producer (CHAN INT out!)

  INT x:

  SEQ

      x := 0

     WHILE TRUE

         SEQ

             out ! x

             x := x + 1

:

PROC consumer (CHAN INT in?)

    WHILE TRUE

       INT v:

       SEQ

           in ? v

           .. do something with `v'

:

PROC network ()

    CHAN INT c:

    PAR

       producer (c!)

       consumer (c?)

:

我自然是被这个语言着迷。可惜好景不长,我立刻发现Occam 语言的三个局限:

遗憾一: 并行进程的静态、编译时决定的。不可能在运行时动态产生进程:

PAR I = 1 to N

    Process (I)

这里N必须是编译时就确定的常数。这样对编写通用目的程序库带来很大的麻烦。 就好比MPI 用户没有办法根据MPI Rank 和MPI_Size 来动态划分域,只能硬编码其处理单元数量,那么今天恐怕还没有Nastran 等ISV通用库。 和我一起做博士的某英国哥们,他曾说要解决这个问题。我一直很感兴趣,不停地问他技术细节,结果他说了半天,我还是不清楚。说句实话,到今天,我还是没有明白。 后来这个哥们找到了工作,放弃了博士。

到了后来1996年,MPI-2制定的时候,我参加了关于动态创建进程的讨论。当时我已经加入了Platform Computing 作LSF, 可是这些MPI专家们对于如何映像进程到处理机的理解不够透彻。他们没有认识到,动态创建必须基于一个资源管理的调度系统。 而他们没有有效地将需求及时提供给作业调度厂商。结果,现在有许多的MPI2 动态创建进程的实现,但是没有哪个是和著名的作业调度器集成的。 原因就是,大部分作业调度器的资源分配是静态的。一旦资源分配后,就无法改变。到了Windows HPC Server起步在2004 年的时候,我设计作业概念就考虑到作业当能伸能缩的. 因此,Windows HPC Server 是为数不多能够支持MPI 2的作业调度系统。

遗憾二: Channel 是没有缓冲的。一个发消息的进程,如果对方不在受的时候,就会被阻。直到有接受消息的。开始还觉得没有什么,结果不知道多少看起来不会死锁的代码,结果给死锁了。比如,两个进程计算后相互交换结果如下,就会死锁。

PROC left (CHAN INT toRight!, CHAN INT fromRight)

    … compute

    toRight ! localResult

    fromRight? neighborResult

:

PROC right (CHAN INT toLeft!, CHAN INT fromLeft)

    … compute

    toLeft ! localResult

    fromLeft? neighborResult

:

CHAN INT c, d:

    PAR

    left (c!, d?)

    right (d!, c?)

原因就是,对于left 进程,toLeft! localResult 会被阻塞,因为right 进程还没有接收消息 。 right进程也同理被阻塞。现在同学们用MPI的时候,已经对于MPI 库中所提供的消息缓冲区习惯了.  当我发现此功能后,顿时心存感激。

遗憾三:进程和物理处理机之间的映射是静态的

这是一个致命的局限。如下所示,进程terminal, editor 和network 是在编译时被硬性映像到不同的处理机上。

PLACED PAR

  PROCESSOR 1

  terminal (term.in, term.out)

  PROCESSOR 2

  editor (term.in, term.out, files.in, files.out)

  PROCESSOR 3

  network (files.in, files.out)

对于这个局限的极度不满,心中涌出强烈的愿望想要解决这个问题。人生很有意思,9年后,我终于开始解决这个问题,一作就是近十二年。这个问题就是如何应用动态映射处理机,就是作业调度器(Job Scheduler)的灵魂.

(待续)

Visual Studio 2010 Beta1 中的 MPI Cluster Debugger

在Windows HPC中写过MPI程序的朋友们应该用过Visual Studio2005/2008中的MPI Cluster Debugger吧。网上也可以搜到不少关于这方面的使用教程(blog, white paper)。在集群中调试MPI程序感觉如何?MPI Cluster Debugger用起来方便吗?Visual Studio 2010 Beta1已经发布,我们HPC组对其中的MPI Cluster Debugger做了很大改进,尽可能地使它变得更加便捷。下面就跟随我一起看看吧!

在同样的地方( 项目属性页面) ,我们找到了MPI Cluster Debugger。不同的是,原先寥寥无几的参数被现在的一群参数所取代。不过不必担心,我保证大家很快上手。其实,在大多数的情况下,只要填写其中的3个参数。对于其他参数,MPI Cluster Debugger会使用默认值。

image

既然要在Windows HPC Cluster中调试程序,那么总得指定集群的头节点以及运行MPI程序的计算节点吧。“Run Environment”就是我们的第一个必填参数。点击”Edit Hpc Node…”即可进入”Node Selector”对话框。在此框中,我们可以选择想要使用的集群和计算节点。既可以笼统地指定所需要运行的MPI进程的个数,也可以精确地指定在那几个节点上分别运行多少个MPI进程。在选择节点时,我们还能看到各节点CPU实时负载情况。若仅仅想在本机上调试,运行4个MPI进程,则填入”localhost/4”就可以了。

clip_image002

clip_image003

另一个必填参数是“Working Directory”。这是MPI程序运行的目录,必须是一个本地路径。若不存在,MPI Cluster Debugger会帮你创建。“Application Command”是第三个必填参数,通常使用宏“$(TargetFileName)”即可。它指定了需要调试的那个MPI程序。

clip_image004

“Deployment Directory”参数是可选,默认值是”\\<HeadNode>\CcpSpoolDir\<UserName>”。安装好Windows HPC Cluster后,CcpSpoolDir就会被创建并共享。若不想使用该默认值的话,需要填入一个网络共享路径,并且用户有读写权限。

Visual Studio 从2008 SP1开始就有“Debugger Type”参数,于是我们有了选择调试器的自由。通常选择”Native Only”。若你是用MPI .Net写程序的话,那就选择”Managed Only”。

clip_image005

其他参数我就不一一赘述了。每个参数都有解释,相信大家可以看明白。不明白的话,那就回贴问我吧。

填好以上参数,就可以使用MPI Cluster Debugger的基本功能了。按”F5”,你的程序及相应的pdb文件会被部署到刚才选的那些节点上,然后MPI进程就运行起来了。在”Output View”中,你可以看到MPI Cluster Debugger所做的工作。若有错误发生,在这里可以看到详尽的错误信息,不至于手足无措。在”Processes View”中,你将看到正在运行的MPI进程。

clip_image006

clip_image007

以上是对MPI Cluster Debugger的简单介绍。在Visual Studio2010正式发布之前可能还会有一些改动。若大家有什么建议,欢迎回帖。谢谢!

旅行中的志愿者

4月24日到29日,HPC中国研发团队和一些家人朋友,还有现已回到美国工作的前部门经理Alex Sutton,一行22人去了四川省旅游,不仅游览了绮丽秀美的九寨黄龙,还访问了震区都江堰的受灾群众安置点,最开心的是在我家乡的山村小学里见到了好多可爱的小朋友。相信不少朋友都听说过“多背一公斤”这样号召旅行者出行时多背一些物品给贫困山区小孩的故事,而这次把我们的集体旅游与志愿者行动结合起来,则是我们HPC全体成员的共同心愿。成行之前,作为一名积极的志愿者,我推荐了两个选项:去都江堰市龙池镇云华村,捐献旧笔记本电脑协助上海市闸北区热爱家园青年社区志愿者协会(下文简称“热爱家园”)开展电脑培训班,这是我去年曾经实地考察参与了前期调研的项目; 或是访问捐助我家乡县城里大山深处的“夫妻小学”,我搜到的南充日报报道来看他们的确非常需要帮助。让人喜出望外的是,最后我们不仅去了云华村,大多数的同事还去了我的家乡,好好利用了我们公司的每人每年三天的志愿者假期。我相信我们大多数人都乐于助人,但往往有这样那样的顾虑让我们不能成行,身体力行做个志愿者,并没有想象的那么困难。

24日,从上海飞到成都,我们没时间休息,就汇同热爱家园的职员陈佩赶赴云华村,到了都江堰,“岷江黄浦江水水相融, 上海都江堰心心相连”的大幅标语格外显眼,有名的板房区“幸福家园”显得秩序井然,路边很多楼房的裂缝仍然清晰可见,但更多的是推土机和起重机在热火朝天地重建家园。而我在将近一年的离别之后重访故地,忍不住客串做起了导游,向大家介绍眼前的情景和地震时的故事:这块空地,曾经停放了好多军车搭建了好多帐篷,“铁军来了”、“有困难,找铁军”的横幅格外暖心;那条二王庙后门的公路上,曾经有检疫人员不辞辛劳地向来往车辆喷洒消毒剂;还有多次出现在新闻联播的紫坪铺水库,曾经有无数冲锋舟运走受灾群众,运来物资运来官兵运来希望。

clip_image001 clip_image002

  (多次出现在新闻联播的紫坪铺水库)               (仍在抢修中的龙池隧道

clip_image003 clip_image004

                (云华村板房区)                                 (搬运物资到板房区)

车开了近三个小时,穿过还在施工中的隧道,开过还在修建的龙池公路,终于到了龙池镇云华村的受灾群众安置点,也就是上海建工援建的板房区,上次来这里调研的时候,我还在上海建工的厨房蹭了几顿饭呢。可能是乡亲们还在劳动,小孩们还在上学,我们并没有见到太多村民,把5台笔记本电脑、若干路由器集线器插线板和长长短短的网线放在热爱家园的云华图书室后,我们走进一家农户,一位大姐和一位老奶奶热情地和我们聊了起来,从她们那熟悉的乡音中,我听到隐隐的伤痛,却流露出更强的坚韧与希望,还有一份真诚的感谢。我们带的东西并不多,也没有时间把网络环境全部搭好,只希望这一点点帮助对即将开展的电脑培训班有些作用。大山里的孩子和青年,急需电脑和互联网来获取信息,学习知识,建设自己的家乡。在返程的车上,我代表四川人由衷地感谢我的同事们愿意大老远地来看看震区,大家都说我太客气了,Ming更是说道:打在手上,全身都会痛,四川人民受灾了,全国人民都心痛。地震过去快一年了,我们见证灾区同胞自强不息重建家园,我们祝福灾区同胞平安幸福安居乐业。

clip_image005 clip_image006

              (等待图书室管理员)                     (村民们搬进板房前的临时居所)

clip_image007 clip_image008

               (Ming与老乡聊天)                         (我们在云华图书室外的合影)

4月28日,游完九寨沟和黄龙的美景之后,超过半数的同事跟我回家乡南充市营山县。不巧的是,连接成都和营山的达成铁路因为扩建施工暂时关闭,于是我们从成都十陵汽车站搭乘客车,耗时4个小时,匆匆吃了午饭,又坐上县团委老师帮我们联系的面包车沿着盘山公路开了2个小时,最后在崎岖的山路上步行了半个小时,到达了我们的目的地合兴乡糖房村大垭口“夫妻小学”。当我们抬着黑板提着礼物走近小学,远远地就听到了小孩子们嘹亮的歌声,心一下子被感动充满了。紧走几步,我看到了眼前的画面,廖老师正领着站得整整齐齐的小孩子们大声唱歌,他们最大的也只是在上二年级啊,歌声轻灵稚气,眼神清澈纯净,笑容天真无邪。还有不少学生家长,围了上来,老乡们不善言辞,但一看就知道是已经站在这里等了我们很久。

clip_image009 clip_image010

         (通往“夫妻小学“崎岖山路)                              (搬运黑板)

clip_image011 clip_image012

        (从附近赶来欢迎我们的小村民)                   (小朋友们唱歌欢迎我们)

老师领着学生们回到教室,幼儿园一个教室,一二年级一个教室。简陋的教室有一面是土墙,有一些大的裂缝,夏天很热,教室光线很暗,廖老师走上教室中间的一张课桌上,伸手拉了开灯的绳索,然后带领幼儿园的孩子们一起念自制黑板上的bpmf拼音,孩子们认真地齐声背诵帮助记忆的口诀“广播电台播播播”(b),“两个门洞摸摸摸”(m),窗外的我们和家长都开心地笑了,我想我们都看到了未来的希望。接着廖老师把两个教室的孩子集中到一起,带着他们唱起了一首“爱心叔叔”的歌,我们都很感动,不知道这是不是廖老师自己谱词谱曲的。第一排一个小女孩,长得有点像我的小侄女,我拉着她的手,问“你喜欢读书吗”,她一点也不怕我,也用小手拉着我的大手,扑闪着大眼睛说“喜欢,语文数学我都喜欢”。校长让我们给学生说些什么,因为有的小孩子听不懂普通话,George让我代表大家说说话。而我望着满满一教室可爱的小朋友,和充满期待的老师家长,一时不知说些什么好,他们需要太多的东西,而我们能提供的又太有限。最后我问了一堆问题:你们喜欢读书吗?你们喜欢你们的阳老师吗?你们喜欢你们的廖老师吗?阳老师和廖老师非常地辛苦对吗?我们都要好好学习好不好?得到的则是小孩子们一次更比一次大声的肯定回答。Alex用中文跟打了招呼,孩子们也都兴奋地叽叽喳喳,要跟见到的第一个老外交朋友。最后我们回到教室外的空地,George向校长和老师捐赠了我们带来的物品,大家还当场捐出七千多元,用于教学点的房租等校舍建设。

clip_image013 clip_image014

         (廖老师带领小朋友学拼音)                       (Alex向小朋友问好)

clip_image016 clip_image018

              (”夫妻小学”全貌)                              (教室窗外的学生家长)

clip_image019

       (George代表我们捐款、捐物)

校长和老师承诺会将这笔钱的用途告知我们,而我们每个人离开的时候也在心中思考着这样一些问题:怎么样才可以更好地长期帮助这些老师和孩子呢,如果我们有更多的资源,怎么样才能有效地利用起来呢,目前由我们公司或者个人来直接负责运营是不现实的,是不是有合适的非营利组织可以合作呢?这些问题尚在思考、探讨之中。如果您有意愿、有资源帮助大山深处的老师和孩子,有扶持他们长期发展的推荐方案,我们期待倾听您的声音。

                                                                                                                       魏臻

高性能系统棧的推倒和重建(一)

 

作者简介

徐明强博士现任微软中国研发集团服务器与开发工具事业部高性能计算资深架构师,领导HPC产品中的并行编程模型和运行时系统的设计与架构。

徐明强博士拥有21年高性能计算领域专业经历,包括8年学术政府实验室的研究和13年的业界经验。

2004年徐明强博士加入当时成立不久的微软HPC团队,带领了一个跨国团队(雷德蒙和上海)完成Windows Compute Cluster 2003Window HPC Server 2008地开发工作。

加盟微软之前,徐明强博士在1996年之2004年间担任Platform Computing公司(HPC中间件的领导者)的首席架构师,负责其旗舰产品LSFSymphony产品的设计和技术战略规划。

1993年至1995年,徐明强博士专注于并行语言的编译和运行是系统的研究,并在阿冈国家实验室完成博士后研究。在此之前,徐明强博士先后在英国埃克塞特大学取得计算机博士学位,在曼切斯特大学担任研究助理员。

我预备写几篇我过去二十一年所见证的HPC发展史。

---------------------------- 

我从事HPC工作已有二十一年,见证了一个完整的并行系统棧被推倒和重建。 旧棧的机器造价高,只有国家实验室可以支付,性价比很差。后来HPC世界有一个大的变更,由微处理器来代替定制的向量机。 现在的各行业成为这个变革的受惠者,变革的结果,使得每一个科学家和工程师,可以付担得起原来只有获取优厚研究经费的国家实验室才能使用的高性能计算机。

这个变革经过二十多年,共三个时期:(1) 专有机时期 (2) 微处理器初期 (3)微处理器盛期。

20-year HPC History

专有机时期,活跃在市场上的超级计算机公司开发定制化的硬件、软件及开发工具。 微处理器初期,计算机主流公司用精简指令芯片代替了定制化芯片,自开发的定制化网络竞争。到微处理器盛期, 商品化的芯片、标准网络再次把成本降低。 回头看着二十年, 显见有一只看不见的手,要把高性能计算机从国家实验室里推到各个行业、企业。 

在这变更中,我也曾多次更换主攻方向。或者说是从原来的棧上端一直“跌”到下面,如下图所示。

fall and rise

然后,我一级一级的帮助重建并行系统棧.   从这棧“跌”落的原因,是因底层的支持无法能够满足高层的需要,而从底层往高层去的原因,是为了能够使系统能够支持主流的应用和程序员编程的需要。

我记得C++ 的发明者Bjarne Stroustrup 曾说过:“如果某件事值得做,那么这件事值得做两次”。 他曾把这句话用在他撰写的C++ 一书上。 这也是我从事HPC的经历。 到现在为止,我已经重复做了两件事情 (1) 作业调度系统 (2) 面向服务的运行时系统。 将来或许还会再次回到应用层。

(待续)

我们上人民日报了:)

(代George Yan发)

大家好,好久没有在这里写东西了,想想上次我在这里写blog还是一年多前呢。嘿嘿,好像我的belated new year’s resolution 应该是多写点东西和大家交流吧 :)

回顾2008年,这是对我们的团队来说非常有意义的一年。在产品上,我们发布了Windows HPC Server 2008,而且在十月的SC08上,运行Windows HPC Server的曙光5000A系统以180.6Tf的成绩获得Top500的第十名,引起了这个领域的关注和震惊。 这当然是微软在进入HPC这个领域后在Top500中取得的最好成绩,这个成绩背后的甜酸苦辣我们的丛兰兰同学已经在她的博文里很好的描述了。这次的成绩也引起了中国的媒体的关注,毕竟Windows hpc server 2008 的一部分是在中国开发的, 而且这个成绩不是在那些老牌的cray, ibm机器上产生的,而是在我们中国制造的曙光机器上!有兴趣的同学可以看看媒体对我们评价。

再说说我们的团队,2008年,我们的小团队很荣幸的迎接来了徐明强博士,徐博在这个年轻的团队中是我们的前辈,而且在hpc领域里是个家喻户晓的名字,他曾经是Platform computing 的CTO,加入微软后设计了我们产品中的scheduler 和SOA runtime的架构。很有意思的是媒体对海龟徐也很有兴趣,程序员杂志还专门和徐博做了独家采访(attach link). 最后提一句,徐博回到上海马上入乡随俗,已经成为马路杀手之一,大家看到辆灰色honda odyssey要特别小心,徐博可能就在用着他美国开车原理在上海横冲直撞!:)

附:部分媒体报道:

1

光明日报

Guangming Daily

高性能计算机: 工业化进程的助推器

2

人民日报

People’s Daily

中国诞生百万亿次超级计算机成为第二个拥有此能力的国家

3

中国经济导报

China Economic Herald

高性能计算机突破商业化困局

4

科技日报

Science & Technology Daily

强强合作 意在高远

5

中国电子报

China Electronics News

工业领域高性能计算需求旺盛呼唤普及共享

6

中国计算机报

China InforWorld

惊魂百万亿次-曙光5000A冲击Top500纪实

7

电脑报

Popular Computer Weekly

中国第一超级电脑炼成记

8

程序员

Programmer

见证高性能计算21年

9

网络世界

China Network World

创新:以开放合作的精神-从微软携手曙光圆百万亿次超级计算机梦想谈起

10

计算机世界

China Computer World

中国HPC百万亿次是这样炼成的

11

科学时报

Science Times

他们见证了历史

12

微电脑世界

PC World

微软联手曙光晋级全球超级计算机十强

clip_image001

clip_image001[5]

clip_image003

clip_image004

clip_image005

clip_image006

clip_image007

clip_image008

clip_image009

clip_image010

clip_image011

clip_image012

clip_image013

clip_image014

clip_image015

我组喜获年度最佳客户关怀奖

微软中国定稿          服务器与开发工具事业部(中国)上个月举行了热闹的新年晚会。除了吃好喝好,欣赏到了同事们精彩搞笑的节目(George使出了耍酷的老本行,为我们组赚够了眼球),我们还荣获了部门的年度最佳客户关怀奖(Best CARE of the Year 2008 ) CARE 取自Customers Are Really Excited,该奖旨在肯定我们团队在过去一年中与客户和合作伙伴的积极合作和突出贡献。    

        回顾我们与客户的互动大史记,自2005年我们成功地与上海交通大学和上海超级计算中心建立合作伙伴关系,开展微软高性能计算学院项目,之后制作一系列的网络广播(webcast),创建了这个中文博客,多次在TechEd等技术会议上发表演讲,积极推广高性能计算的普及。clip_image001

         2008年11月,一个运行Windows HPC Server 2008系统的超级计算机集群跻身世界最强500台计算机的第十名. 我们团队的George Yan,丛兰兰,朱仁琪,史秋芳与雷德蒙及微软中国技术中心的同事,与曙光公司一道,排除万难,才取得了最后的好成绩。时至今日,这个集群仍是世界上最大的Windows系统的集群,也是在美国之外跑得最快的一台超级计算机。       

        最后,送上一张我们团队的最新全家福,想加入我们这个其乐融融“挤挤一堂”的大家庭吗?点击网页上方的EMAIL吧。(以后到我家聚餐,得再多借一些椅子了:))

home

如何测试资源分配—失败及恢复

我们知道所有程序都会和各种资源打交道,硬件资源类型如硬盘,系统资源如句柄,因此如何做好资源相关的测试很重要。大家熟知的是测试资源的泄漏,但这里我想更多的从资源分配失败及恢复角度去谈资源分配测试。

    对于资源通常有如下操作:

1.分配资源

   我们熟知的一个典型例子就是 C语言中'malloc()' 系列函数。

2.释放资源

   同样的一个例子就是C语言中'free()'系列函数。

3.资源计数

   比较常见的例子就是性能计数器,比如文件句柄计数器,它能够提供“有多少文件句柄被打开”的信息

    我们编写软件的时候,我们一般都会经常使用这些资源管理类函数来帮助我们,从而得以申请和释放多种类型的资源。当然我们也会编写一些自己的代码来申请和释放资源。一般情况下,这些代码会处于我们的软件架构的相对底层上。我们可能有一个系统,在这个系统里,我们分配资源,使用资源,还可能管理并监控资源,最后当处理完后释放掉这些资源。同时还存在着当代码运行时替我们分配资源的情况。

    由于各种原因,资源的申请和分配并不总是能够成功的。其中一个原因可能是某种特殊的资源被消耗殆尽了。比如在磁盘空间不够时,我们申请使用更多磁盘资源的话就会失败;还比如内存总是是有限的;句柄空间总是那么多。总之软件有可能因为各种原因而出错,但一个主要的原因就是资源的消耗。

    对于服务型软件而言,提供长期稳定的服务是重要的设计目标之一。从而,相对于客户端程序,它需要运行得更加可靠、健壮。为了确保软件的可靠性和健壮性,我们必须确保它在资源可用率发生异常变动的情况下,它还是可以正常运行。如果某一个程序消耗了所有的内存,那么我们可以假定它肯定会出错了;但如果由于系统内存的不足导致内存分配的偶尔失败,那么我们的软件应不应该完全崩溃?还是应该仅仅让当前操作出错并让软件其他部分能够继续正常运行?同样的问题也适用于其他类型的动态分配并被共享的资源,比如磁盘空间,内存,文件,网络连接等。

    致错测试是一个重要的测试场景,可以帮助我们了解当资源使用达到极限的时候会发生什么。简单地说, 这种测试可以用以下伪代码描述:

Pallocatedthing[<use more than enough space here>]

counter n

While(Pallocatedthing[n++]=allocate(<whatever size you like>))

While(n)

free(Pallocatedthing[n--])

    这种测试很简单,就是申请分配资源直到失败,然后释放掉所有分配的资源。这只是一种最简单的测试,如果你确保它可以工作了,那么还有几件事情等着你去做。

    首先,将它放到一个循环里面,然后执行很多次。它是否依然可以正常工作?

    其次,在它运行的时候观察整个系统,看被测试进程是否有内存,句柄或者其他资源的泄漏。这种场景下的一个典型的BUG就是资源分配函数发生错误时没有被正确处理。即使它不会立即导致崩溃,但仍可能会导致内存泄漏或者错误。这种事情我以前也遇到过。

    如果要更深入此类测试场景,则需要理解资源的依赖关系,以及在软件依次消耗掉所有的这些资源情况下其是否正确处理了所有的资源错误。这方面的一个例子就是处理消息的软件。它将在等待处理的消息在磁盘上保存为一个队列。那么磁盘如果满了的话会发生什么?这种场景可能会比较难设置,它看起来类似于:

1. 限制硬盘空间

2. 将消息注入到队列中

3. 停止从队列中取消息

4. 磁盘满了,会发生什么?相应的工作行为是正确的吗?

5. 重新开始从队列中取消息。是否一切工作正常?

    接下来的几个步骤类似于我们上面已经做的,那就是在更多的情况下去重复测试它,并观察结果:

    尝试取出所有的消息,直到队列为空。

    建立一个稳定的消息输入流,但时而暂停并再恢复取出消息,反复执行磁盘空间测试用例,看是否在这样的情况下仍然工作正常? 如果出错的话,是否该出错被正确处理?是否有副作用,比如内存泄漏,句柄泄漏或者数据出错?是否队列的生产者和消费者都正确处理了错误用例?

    在你的软件中还会有很多关于这个主题的情况等待你去挖掘,我不准备将所有可能的情况都列在这里。我想你能够自己考虑这些事情。

John Daly

高性能计算美国团队测试经理

翻译:周毅, 高性能计算(HPC)中国团队测试开发工程师

加入Windows HPC Server 2008 微软客户体验改善计划(Customer Experience Improvement Program)!

您想帮助我们一起改进Windows HPC Server 2008产品吗?请加入微软客户体验改善计划(Customer Experience Improvement Program)!只需要以下几步即可方便完成--

1) 打开Microsoft HPC Pack –> HPC Cluster Manager;

2) 在菜单中选择Help –> Customer Feedback Options;

clip_image001

3) 选择”Join the Customer Experience Improvement Program”,点击”OK”.

clip_image002

您的参与对于我们持续改进Windows HPC Server产品非常有价值!:)

More Posts Next page »
Page view tracker