2.7 错误处理 BACKWARDFORWARD


MPI把可靠的消息传送提供给用户。一个被发送的消息总能被正确的接受,而用户不必检查传送错误,时间越界,或其他错误条件。也就是,MPI不提供处理通信系统错误的机制。如果MPI在一个不可靠的基础机制上实现, 那么MPI子系统实现者的工作是把用户与不可靠性隔离, 或反映不可恢复的错误为失败。无论何时可能,这样的失败将在相关通信调用被反映为错误。类似地,MPI本身不提供处理处理器失败的机制。在7.2节描述的处理设施的错误能被用于限制一个不可恢复错误的范围, 或在应用级设计错误发现。   

当然,MPI程序仍可是错误的。当用一个不正确的参数调用MPI调用时, 一个程序错误能发生( 在一个发送操作中无目的地, 在接收操作中缓存太小等) 。这类错误将发生在任何实现中。另外,当一个程序超出可得到的系统资源数(挂起的消息数,系统缓存等) 时,一个资源错误可发生。这类错误的发生决定于系统中可得到的资源数和所使用的资源分配机制;对于不同系统,这是不同的。一个高质量的实现将对重要的资源提供一般的限制,以便减缓这种表示的可移植性问题。   

几乎全部MPI调用都返回一个表示操作成功完成的代码。如果调用中发生错误,在任何可能时,MPI调用返回一个错误代码。MPI库执行期间被删出的一个错误在缺省条件下使并行计算无效。然而,MPI为用户提供改变这个缺省和处理可恢复错误的机制。用户可以指定没有错误是致命的, 并有用户本身处理MPI调用返回的错误代码。用户也可提供他自己的错误处理程序,当MPI调用非正常返回时, 将引用这个程序。将在7.2 节描述MPI错误处理错施。   

当一个错误发生时,有几个因素限制了MPI调用返回有意义错误代码的能力。MPI不可能检测一些错误; 其他的错误在正常模式下检测太昂贵; 还有一些错误可能是“灾难性的”,其阻止MPI在相容状态下返回对调用者的控制。   

由于异步通信的本质,另一个微妙的观点出现:MPI调用在本调用返回后, 可以初始化异步地进行的操作。这样,操作可以返回一个表示成功完成的代码,而后引起错误例外的提出。如果有一个对同一操作的后来的调用( 例如: 一个调用, 它检验已完成的一个异步操作 ), 那么与这个调用相联结的错误参数用于表示错误本质。( 例如: 在准备就绪状态发送操作中的错误) 。这样的错误必须作为致命的错误来处理,因为为用户恢复这个错误的信息不能返回。   

本文件没有指明在一个MPI调用错误后一个计算的状态。所希望的行为是一个相关的错误代码被返回,并在最大程度上确定错误的根源。例如,更希望的是:一个错误的接受调用,将不引起接收者存储器的任何部分在超出接收消息所指定的范围内被重写。   

实现以有意义的方式,在支持这儿所定义错误的MPI调用方面超出本文件。例如,在一对接收和发送操作之间, MPI指定严格的类型匹配规则: 发送一个浮点变量而接收一个整型变量, 这是错误的。实现时可能超出这些类型匹配规则,在某些情况下提供自动的类型转换。这将有助于为这样不致行为产生警告。


Copyright: NPACT BACKWARDFORWARD