17.2.334. MPI_Startall

MPI_Startall — 启动一组请求集合。

17.2.334.1. 语法

17.2.334.1.1. C语法

#include <mpi.h>

int MPI_Startall(int count, MPI_Request array_of_requests[])

17.2.334.1.2. Fortran 语法

USE MPI
! or the older form: INCLUDE 'mpif.h'
MPI_STARTALL(COUNT, ARRAY_OF_REQUESTS, IERROR)
     INTEGER COUNT, ARRAY_OF_REQUESTS(*), IERROR

17.2.334.1.3. Fortran 2008 语法

USE mpi_f08
MPI_Startall(count, array_of_requests, ierror)
     INTEGER, INTENT(IN) :: count
     TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count)
     INTEGER, OPTIONAL, INTENT(OUT) :: ierror

17.2.334.2. 输入参数

  • count: 列表长度(整数)。

17.2.334.3. 输入/输出参数

  • array_of_requests: 请求数组(句柄数组)。

17.2.334.4. 输出参数

  • ierror: 仅限Fortran:错误状态(整数)。

17.2.334.5. 描述

启动与array_of_requests数组中所有请求关联的通信。 调用MPI_Startall(count, array_of_requests)的效果等同于 以任意顺序对i=0到count-1执行MPI_Start(&array_of_requests[i])调用。

通过调用MPI_StartMPI_Startall启动的通信,将通过调用MPI_WaitMPI_Test或其派生函数MPI_WaitanyMPI_TestanyMPI_WaitallMPI_TestallMPI_WaitsomeMPI_Testsome(这些函数在MPI标准第3.7.5节"多重完成"中描述)来完成。在此类调用成功完成后,请求将变为非活动状态。该请求不会被释放,可以通过再次调用MPI_StartMPI_Startall重新激活。

持久请求通过调用MPI_Request_free来释放(参见MPI标准第3.7.3节"通信完成")。

The call to MPI_Request_free can occur at any point in the program after the persistent request was created. However, the request will be deallocated only after it becomes inactive. Active receive requests should not be freed. Otherwise, it will not be possible to check that the receive has completed. It is preferable, in general, to free requests when they are inactive. If this rule is followed, then the persistent communication request functions will be invoked in a sequence of the form,
创建(启动完成)* 免费

其中 * 表示零次或多次重复。如果在多个并发线程中使用相同的通信对象,用户有责任协调调用以确保遵守正确的顺序。

通过MPI_Start发起的发送操作可以与任何接收操作匹配,同样地,通过MPI_Start发起的接收操作可以接收来自任何发送操作生成的消息。

17.2.334.6. 错误

几乎所有MPI例程都会返回一个错误值;C语言例程通过函数返回值返回,Fortran例程则通过最后一个参数返回。

在返回错误值之前,会调用与通信对象(如通信器、窗口、文件)关联的当前MPI错误处理程序。如果MPI调用未关联任何通信对象,则该调用被视为附加到MPI_COMM_SELF,并将调用关联的MPI错误处理程序。当MPI_COMM_SELF未初始化时(即在MPI_Init/MPI_Init_thread之前、MPI_Finalize之后,或仅使用会话模型时),错误会触发初始错误处理程序。初始错误处理程序可通过在使用世界模型时调用MPI_Comm_set_errhandler来修改MPI_COMM_SELF,或通过mpiexec的mpi_initial_errhandler命令行参数,或MPI_Comm_spawn/MPI_Comm_spawn_multiple的info键来设置。如果未设置其他适当的错误处理程序,则MPI I/O函数将调用MPI_ERRORS_RETURN错误处理程序,而其他所有MPI函数将调用MPI_ERRORS_ABORT错误处理程序。

Open MPI 包含三个可使用的预定义错误处理器:

  • MPI_ERRORS_ARE_FATAL 导致程序中止所有连接的MPI进程。

  • MPI_ERRORS_ABORT 一个可在通信器、窗口、文件或会话上调用的错误处理程序。当在通信器上调用时,其行为类似于在该通信器上调用MPI_Abort。如果在窗口或文件上调用,则行为类似于在包含对应窗口或文件中进程组的通信器上调用MPI_Abort。如果在会话上调用,则仅中止本地进程。

  • MPI_ERRORS_RETURN 向应用程序返回一个错误代码。

MPI应用程序也可以通过调用以下方式实现自己的错误处理程序:

请注意,MPI不保证MPI程序在出现错误后能够继续运行。

查看MPI手册页获取完整的MPI错误代码列表。

有关更多信息,请参阅MPI-3.1标准中的错误处理部分。