上图还有其他的延伸议题,当效能取决於传递和计算比,改变比值中的某一项不表示一定可以提高效能。改变处理器的速度,但不改变传递的速度,程式可以有没直觉性的效果。举例来说,CPU速度提升二倍或三倍,但保持传递速度,可能使□的程式有较好的平行效果,比循序执行更有效,that is, it may now be faster to run the previousloy PARALLEL parts as SEQUENTIAL。更进一步,平行地执行没有效率的部份,可以使□的程式无法达到最快的速度,因此,藉由增加更快的处理器,□可以让程式慢下来(□正让新的CPU不用它最快的速度执行程式)。
升级到更快的CPU可能反而降慢□的程式速度。
因此,必须知道□是否可以用平行硬体环境,□必须对□的程式在一特定电脑上的可适性有相当的认识,□必须知道相当多的议题,包括CPU速度、编译器、讯息传递的API、网路等等。请注意,只认识应用程式是不够的,□必须指出程式中计算量最重的部份,但是□不知道这个部份的传递花费,对特定系统,它的传递所花的时间可能无法让程式无法有效地平行化。
最後要说一些常发生的错误观念,我们经常说:一个程式被平行化,但是真实的情形是程式的同时部份才被平行化,从以上的说明,一个程式并没有平行化,平行化的效益是机器的特性。
4.5 撰写和移植平行软体
一旦□决定需要平行计算,并且想要设计和架设一套Beowulf,根据上述的讨论来思考一些和□的应用程式有关的建议将是个很好的主意。
一般而言,有两件事□能够做的:
直接架设第一类Beowulf,然後想办法让□的应用程式来适应这套系统,或者在Beowulf上直接跑一个现成的平行应用程式(必须注意上述所提的可携性和效能的议题)。
先思考一下□将要在□的Beowulf上跑的应用程式,然後估计何种类型的硬体和软体是□所需要的。
两种情形□都要考虑效能的议题,一般而言,有三件事□需要做:
决定□的程式中的同时部份。
估计平行效能。
描述出程式中的同时部份。
让我们一一详述。
决定□的程式中的同时部份
这个步骤通常是要考虑将□的程式平行化,如何平行化将在第二个步骤,现在□要决定资料的关连性。
>从实际操作的角度来看,应用程式可能有二种形态的同时性:计算(数字的计算)和I/O(资料库)。虽然大部分情形,计算和I/O同时性是相互正交的(orthogonal),但是有些程式是两者都需要,有些工具程式可以对现有的程式做同时性的分析,这些工具大部分是为Fortran程式语言设计的,使用Fortran语言有两种理由:很早以来,大部分的数字计算程式是用Fortran语言写的,另外Fortran是很容易分析的。假如没有可利用的工具,这个步骤对现存的应用程式将是非常困难。
估计平行效能
没有工具程式的帮助,这个步骤将需要不断地尝试错误,或是根据旧有经验来猜测。假如□心目中已经有特定的应用程式,想要决定这个应用程式是CPU限制(计算限制),还是硬碟限制(I/O限制),根据□的需求,□的Beowulf可能会有很大的差异。举例来说,一个计算限制的问题可能需要一些很快的CPU,高速且低延迟的网路,但是一个I/O限制的问题可能需要较慢的CPU和高速乙太网路。
这个建议令大多数人觉得很讶异,一般的想法是处理器越快越好,这想法当然是正确的,但是□必须要有不受限制的预算经费,实际情形是要在有限的经费得到最高效能的系统,对一个I/O限制的问题,已有现成的规则(称作Eadline-Dedkov定律)可供利用。
对两套有相同累积CPU效能指数的平行电脑而言,一个拥有较慢处理器(一个较慢的处理器间的传输网路)对I/O主导的应用程式将会有较佳的效能。
要证明这项规则将会超出本文件的□围,□若觉得有趣,可以下载这篇论文 I/O主导应用程式在平行电脑上的效能考量(Performance Considerations for I/O-Dominant Applications on Parallel Computers) (Postscript 格式 109K ) (ftp://www.plogic.com/pub/papers/exs-pap6.ps)
一旦□已经决定程式中的同时性是何种形态,□将需要估计一旦平行处理的话,效能将会如何。参见 Software 有对软体工具的描述。
若没有这些工具,□可以透过这个步骤,自行考量,假如每次计算是以分钟计,资料传输则以秒计,那它将是很好的平行对象,但是记住,假如□将16分钟的计算时间拆成32份,而每份的资料传递需要数秒钟,那麽事情将变得严重。
描述出程式中的同时部份
有几种方法找出程式中的同时部份:
明确地平行执行
隐含地平行执行
这二者主要的差别在於明确地平行化取决於使用者,隐含地平行化取决於编译器。
明确的方法
有一些基本的方法是要靠使用者专为平行电脑来修改原始码,使用者必须使用 PVM 或 MPI在程式内增加资讯, 或是使用POSIX绪(无论如何要牢记心中,绪无法在SMP主机板之间移动)。
明确的方法在实行和除错上最为困难,使用者通常在标准Fortran 77或 C/C 原始码中加入函式。MPI程式库加入一些函式,使得一些标准平行方法容易实行(例如分散和收集函式),另外还可以使用已经被平行化的标准程式库。无论如何要将可携性和效能之间的平衡牢记心中。
从历史上的理由,大多数数值计算的程式是用Fortran语言所写的,因此在平行计算中,Fortran是受最大的支援(工具、程式库等)。现在大多数的程式设计者都是用C语言,或是认为C语言可以执行地更快,而用C语言重新改写现存的Fortran应用程式。由於C语言最接近通用的机器语言,C语言较快可能是正确的,但是它也有一些重要的缺陷。C语言使用指标(pointer)会让资料相关性的决定极度困难,自动分析指标也是极度困难,假如□有现成的Fortran程式,并且未来想要变成平行程式□千万不要把它转成C语言。
隐含的方法
隐含方法是使用者放弃一些或全部放弃自行平行,改用编译器的一种方法,例如 FORTRAN 90, 高效能Frotran (High Performance Fortran,HPF), 大量协同平行(Bulk Synchronous Parallel,BSP)还有许多正在发展当中。
隐含方法仍要求使用者对於程式同时的特性提供一些资讯,但是编译器必须对如何平行地执行同时性做出许多决定,这些方法提供某种程度的可携性和效能,但是对一个平行编译器,仍然没有一个最好的方法来描述同时性的问题。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



