资源描述
并行计算通信库测试方法研究及实践
熊玉庆1 张云泉2
(中科院计算所, 100080, 北京)1 (中科院软件所, 100080, 北京)2
本文完成于中国科学院软件研究所并行软件研究开发中心,并得到国家863计划资助。
摘要 并行计算通信库的测试在并行计算系统中起一个极其重要的作用。一般对通信库的测试都是通过设计一些测试程序对库的各个或几个部分分别单独隔离测试。但是许多库中的错误是这种隔离测试方法测不出来的,只有当库的多个部分以某种复杂的,有机的方式组合运行时才会暴露出来。这种复杂有机的组合方式,从设计库的测试角度很难形成。本文提出二个新的测试方法,这二方法是根据通信库结构的分层特性,利用可移植的上层库的测试程序来测试下层库。上层库的测试程序也可看作是下层库的应用程序,但与一般的下层库应用程序不同,它几乎覆盖了下层库的各个部分,且有机地将它们组合起来,运行时形成某种复杂的形态,而仅用下层库的测试程序往往达不到这种形态。这样逃过下层库测试程序的错误就可能暴露出来。
关键词 并行计算,通信库,测试方法,MPI,BLACS
Study and Practice of Testing Approaches
of Communication Libraries for Parallel Computing
Xiong Yuqing1 Zhang Yunquan2
(The institute of Computing Technology, Chinese Academy of Sciences, 100080, Beijing)1
(The institute of Software, Chinese Academy of Sciences, 100080, Beijing)2
Abstract Testing of communication libraries for parallel computing has an important role in parallel computing systems. In general, testing of communication libraries is done by some testers designed to test every or several parts of the libraries separately. However, many errors of libraries not tested by the separate methods can be exposed when many parts of libraries are running by combination of them in term of a kind of complicated and organic ways. But it is rather difficult that the complicated and organic combinations result from the design of library testers themselves. This paper proposes two new testing approaches, which are based on the feature of layered library architectures and tests lower libraries by portable testers of upper libraries. The testers of upper libraries can also be regarded as application programs of lower libraries, but they are different from general application programs of lower libraries. They almost cover very parts of lower libraries, combine them organically, and form a complicated situation in run time, which can not be easily obtained only by testers of lower libraries. In this case, the errors may be exposed which can escape from testers of lower libraries.
Keywords: parallel computing, communication library, testing approach, MPI, BLACS
1 引言
并行计算通信库的测试对并行计算系统至关重要,因为一个正确的通信库是并行计算系统的基础。对通信库的测试,一般是对库的各个或几个部分分别隔离测试[1][2]。虽然也有所谓的系统测试,但也往往只是考虑到有限的方面。然而,库中的许多错误是在多个成分以某种有机的方式组合起来相互作用时才暴露出来,而人们很难从测试角度有意识地构造出这种情形。
本文根据通信库的结构特性,提出二个新的测试方法。一般地,通信库结构都是分层的。例如,用于线性代数计算的通信库BLACS[3] (Basic Linear Algebra Communication Subprograms) 是建立在MPI[4]和PVM[5]等通信库上的,而MPI的一个实现MPICH[6]又是建立在P4[7]上的。这二个新的测试方法就是利用某平台上正确的上层通信库的可移植测试程序来测试另一平台上的下层通信库。上层通信库测试程序也可看作下层通信库的应用程序,但是由于上层库的实现一般覆盖了下层库的各个部分,上层库的测试程序又覆盖了上层库的各个部分。因而与一般的下层库应用程序不同,上层库的测试程序也覆盖了下层库的几乎所有部分,且将它们有机地组合起来,在运行时,它们形成一种对下层库来说极复杂的情形。这种复杂的情形从下层通信库测试角度很难人为地构造出来。在这种情形下,许多下层库测试程序不能测的错误就可能暴露出来。
本文以成功地在Hitachi SR2201和曙光2000上运行的,建立在MPI和PVM上的BLACS的测试程序来测试其他并行计算系统(在本文中我们统称它们为X系统)上已通过MPI测试程序测试的MPI系统为例,证明本文提出的测试方法的可行性。
2 通信库测试新方法原理
测试方法一:设LC是一个在平台上的要测试的通信库,UC是建立在LC上的可移植通信库(如图1)。TEST_UC是UC的一个测试程序,在另一平台上TEST_UC成功地通过对UC的测试。因而在平台上TEST_UC的正确性被确保。为了对上的LC库进行测试,把TEST_UC在上运行。由于UC是可移植的,因而如果上的LC是正确的话,TEST_UC应该与在上一样成功通过;若不能,则应该可以判定是上的LC或其下层库有错误。
UC
LC
图1 通信库UC的结构(对于方法一)
测试方法一只能确定LC或其下层库有错误。如果需要准确确定错误位置,则可应用下面的测试方法二。
测试方法二:设LCa和LCb是二个在平台上的要测试的通信库,它们是建立在另一较低层通信库LLC上。UC是建立在LCa和LCb上的可移植通信库(如图2)。TEST_UC是UC的一个测试程序,在另一平台上TEST_UC成功地通过对UC的测试。因而在平台上TEST_UC的正确性被确保。为了对上的LCa和LCb库进行测试,把TEST_UC在上运行。由于UC是可移植的,因而如果上的LCa和LCb是正确的话,TEST_UC应该与在上一样成功通过;若不能,则⑴若对建立在LCa上的UC,TEST_UC不能通过而对建立在LCb上的UC,TEST_UC能通过,则应该可以判定是上的LCa有错误;⑵若对建立在LCb上的UC,TEST_UC不能通过而对建立在LCa上的UC,TEST_UC能通过,则应该可以判定是上的LCb有错误;⑶若都不能通过,则上LLC有错误的可能性比LCa和LCb都错的可能性大。
UC
UCUC
LCb
LCa
LLC
图2 通信库UC的结构(对于方法二)
在上述二个测试方法中UC的可移植性很关键,否则的话,当TEST_UC在上不能通过时,就不能判定是上的LC(对方法一)或LCa或LCb或LLC(对方法二)有错误。因为这时候的错误可能是UC不可移植带来的。
测试方法一比测试方法二简单,快捷。但测试方法二可更准确地定位错误。当用测试方法一确定LC或其下层库有错误,但很难确定错误的准确位置时,可用测试方法二。若满足测试方法二中⑶的条件,则错误出在LC下层库的可能性很大。这时,可将注意力集中在LC的下层库中进行排错。
3 BLACS,BLACS测试程序及MPICH测试程序
BLACS是一个面向线性代数计算的,可移植的通信库,它是建立在MPI和PVM等较低层的通信库上的。在并行计算系统X上BLACS的结构如图3所示.
BLACS系统基本上由二部分组成:通信子程序和支撑子程序。通信子程序由点到点通信,广播通信和组合操作组成。支撑子程序主要由系统初始化,退出系统及逻辑进程网格信息获取组成。建立在MPI和PVM上的BLAC的这些部分几乎涉及MPI和PVM的各个部分。
图3 通信库BLACS在系统X上的结构
BLACS测试程序对BLACS的上述各个部分分别进行测试,重点对通信子程序,尤其是广播通信和组合操作测试较多,对各种矩阵的形状,大小,各种数据类型,各种逻辑进程网格形状,及群通信时数据在进程之间的流向等进行多种组合测试。
MPICH是MPI的一个著名实现[1]。MPICH测试程序也是对MPICH的各个部分分别进行测试。这些测试是由很多小的测试程序来执行的。它们分成下面几类:
⑴ 测试各种点到点通信子程序;
⑵ 测试各种群通信子程序;
⑶ 测试通信上下文(context)操作;
⑷ 测试环境子程序;
⑸ 测试拓扑子程序;
⑹ 一些其他的测试程序。它们进行一些所谓的系统测试,但考虑的情形很简单。
由此可看出,MPICH的测试程序并没有对MPICH的各个部分进行复杂的混合的测试。事实上,很多复杂的情形从测试程序的设计角度,也很难构造出来。
BLACS测试程序虽然是为测试BLACS而进行设计的,考虑的情况是有限的。然而它对于下层的MPI来说,却是一个极复杂的应用程序。由于BLACS几乎涉及MPI的各个部分,而BLACS测试程序又完全覆盖了BLACS的所有部分。因而与一般的MPI应用程序不同,它几乎覆盖了MPI的各个部分,且将它们有机地组合在一起,运行时呈现出一个极其复杂的状态,这种状态是MPICH测试程序达不到的。这样,逃过了MPICH测试程序的错误可能这时就暴露出来了。基于这一情况利用第2节的方法,我们用已经在曙光2000和Hitachi SR2201上顺利运行了的BLACS测试程序来测试新的并行系统上的MPI实现。
4 BLACS测试程序对X系统上的MPI的测试
X系统上的MPI(其实现是MPICH)已经通过MPI(即MPICH)测试程序的测试。但运用上述测试方法及BLACS测试程序,我们发现这些系统的MPI的下列问题:
⑴ MPI同步及进程挂起问题。由于BLACS测试程序提供了输入参数的组合测试(数据精度,实现算法(逻辑拓扑),进程网格,消息长度),使得用户很容易通过修改输入文件参数改变测试的组合数目及测试模式。改变了原有MPI软件包中同一种通信模式多次重复测试的做法使得整个测试具有动态的效果。由于有些系统在实现MPI的同步时,为了提高同步速度,采用硬件实现所有进程的同步。但未考虑到只有部分进程参与同步时的情况。这导致部分进程同步时的挂起现象。这种情况在原有MPI软件包单一重复的测试情况下,是不可能查出来的。而运用前述的测试方法一和BLACS测试程序,通过不断改变参与同步的进程数目,使该问题暴露出来。
⑵ 消息处理器与MPI通信 buffer之间的Cache一致性问题。MPI软件包在进行正确性测试时,只选取小规模问题进行测试,这就使得系统的某些关键参数不能受到充分的测试。而这些关键参数正是消息系统设计时的分支点(重新判断分包及buffer重用等操作),极易发生意想不到的问题。由于BLACS测试程序可以很容易地产生大量不同类型和长度的消息传递测试。我们运用测试方法一和BLACS测试程序,在消息量大,buffer出现重用时,发现了有的系统消息处理器与MPI通信buffer之间的Cache一致性问题。
⑶ 更底层库中出现的问题:利用方法一,找到MPI的上述Cache一致性问题后,我们没有在MPI上发现问题所在。于是又利用测试方法二。由于BLACS是建立在MPI和PVM等底层通信库上的,而且PVM和MPI版的BLACS测试程序都在Hitachi SR2201和曙光2000上成功通过。因而可利用上述的测试方法二。在前面⑵中提到的Cache一致性问题,由于在MPI层上不能确定问题所在,为了更准确定位错误的位置,我们运用测试方法二,将PVM版的BLACS测试程序也进行同样的测试,结果也发现类似的问题。由于当出现测试方法二中的情形⑶时,就可将错误更精确地定位在MPI和PVM的下层库。这样我们可将问题定位在MPI和PVM的共同下层库LLCx上。实事证明判断是正确的。
在上面⑵的测试中,我们只能将问题定在MPI及其以下的库上。由于在MPI层却很难找到问题所在。于是采用测试方法二,将问题更准确地定位。从上面的⑵和⑶,可看到如何将测试方法一和测试方法二结合起来查错。
⑷ MPI_Isend ()的问题:运用测试方法一和BLACS测试程序,我们发现MPI_Isend ()对各种不同长度的长消息连续大量发送处理上的问题。如果消息长度变化不是足够大,这个问题是很难发现的。
⑸ 消息流Send/Recv不同组合(个数,顺序,长度)产生的问题:由于BLACS中的群通信采用大量的不同算法。这些算法能测试到Send/Recv的大量不同组合,能发现一些不易发现的问题。应用方法一,当BLACS测试程序测试分裂环(split ring)(如图4)广播算法时出现问题。经检查问题出在MPI中。排除该问题后,BLACS测试程序测试该广播算法时,顺利通过。MPI中的这种问题只用一般的Send/Recv组合是很难发现的。
图4 分裂环拓扑结构
5 总结
通过用BLACS测试程序对并行系统上的已经通过MPI测试程序测试的MPI进行测试,测试结果表明本文对通常测试方法缺陷的分析是正确的,所提出的新的测试方法是可行的,有实用价值的。目前,我们已经应用上述二种测试方法,将BLACS测试软件作为测试新的并行计算系统上的MPI和PVM等通信库的重要辅助工具。
致谢 本文完成于中国科学院软件研究所并行软件研究开发中心,并得到该中心孙家昶研究员的帮助和指导。在此,向他表示诚挚的谢意。
参考文献
[1] Bridges P, Doss N, Gropp W, Karrels E, Lusk E, Skjellum A. Installation Guide to mpich, a Portable Implementation of MPI, 1995. Available via world wide web from URL=http://www.mcs.anl.gov/mpi/mpich/index.html.
[2] Whaley R C. Installing and Testing the BLACS, 1995. Available via world wide web from URL=lib.org/blacs/Blacs.html
[3] Dongarra J, Whaley R C. A User's Guide to the BLACS v1.0. Technical Report UT CS-95-281, LAPACK Working Note #94, University of Tennessee, 1995.
[4] M. P. I. Forum, MPI: A message passing interface standard, International Journal of Supercomputer Applications and High Performance Computing, 1994,8(3/4), Special issue on MPI
[5] Geist A, Beguelin A, Dongarra J, Jiang W, Manchek B, Sunderam V. PVM: Parallel Virtual Machine – A User’s Guide and Tutorial for Network Parallel Computing. Cambrige, MA, MIT Press, 1994
[6] Gropp W, Lusk E, Doss N, Skjellum A. A high-performance, portable implementation of the MPI message passing interface standard, Parallel Computing, 20 (1994):789-828
[7] Butler R, Lusk E. Monitors, messages and clusters: The p4 parallel programming system. Parallel Computing, 20(1994):547-564.
展开阅读全文