17.2.360. MPI_T_init_thread

MPI_T_init_thread — 初始化MPI工具信息接口

17.2.360.1. 语法

17.2.360.1.1. C语法

#include <mpi.h>

int MPI_T_init_thread(int required, int *provided)

17.2.360.2. 输入参数

  • required: 所需的线程支持级别(整数)。

17.2.360.3. 输出参数

  • provided: 可用的线程支持级别(整数)。

17.2.360.4. 描述

MPI_T_init_thread() 用于初始化MPI工具信息接口。 只要MPI_T_init_thread()至少被调用过一次,并且MPI_T_init_thread()的调用次数大于MPI_T_finalize()的调用次数,就可以在执行的任何阶段(包括MPI_Init()之前和MPI_Finalize()之后)调用MPI工具函数。如果在执行过程中,MPI_T_finalize()的调用次数等于MPI_T_init_thread()的调用次数,MPI工具接口将不再可用,直到再次调用MPI_T_init_thread()。

MPI_T_init_thread()与MPI_Init_thread()类似,在required参数中提供了请求特定线程支持级别的功能:

  • MPI_THREAD_SINGLE: 仅有一个线程会执行。

  • MPI_THREAD_FUNNELED:如果进程是多线程的,只有调用MPI_Init_thread的线程才能执行MPI调用。

  • MPI_THREAD_SERIALIZED: 如果进程是多线程的,同一时间只有一个线程会调用MPI库函数。

  • MPI_THREAD_MULTIPLE: 如果进程是多线程的,多个线程可以同时无限制地调用MPI。

程序可用的线程支持级别在provided中设置。在Open MPI中,该值取决于库的配置和构建方式。请注意,不能保证provided会大于或等于required

17.2.360.5. 注意事项

调用方有责任检查provided的值,因为它可能小于required中请求的值。

17.2.360.6. 错误

MPI_T_init_thread 在以下情况下会失败:

  • MPI_T_ERR_MEMORY: Out of memory

  • MPI_T_ERR_CANNOT_INIT: 接口未处于可初始化状态