# 17.2.360. MPI_T_init_thread

MPI_T_init_thread — Initializes the MPI Tool information interface

## 17.2.360.1. SYNTAX

### 17.2.360.1.1. C Syntax

    #include <mpi.h>

    int MPI_T_init_thread(int required, int *provided)

## 17.2.360.2. INPUT PARAMETERS

- `required`: Desired level of thread support (integer).

## 17.2.360.3. OUTPUT PARAMETERS

- `provided`: Available level of thread support (integer).

## 17.2.360.4. DESCRIPTION

MPI_T_init_thread() initializes the MPI tool information interface. Calls to MPI tool functions are allowed at any point in execution (including before MPI_Init() and after MPI_Finalize()) as long as MPI_T_init_thread() has been called at least once and the number of calls to MPI_T_init_thread() is greater than the number of calls to MPI_T_finalize(). If at any point in execution the number of calls to MPI_T_finalize() equals the number of calls to MPI_T_init_thread() the MPI tool interface will no longer be available until another call to MPI_T_init_thread().

MPI_T_init_thread(), like MPI_Init_thread(), has a provision to request a certain level of thread support in `required`:

- `MPI_THREAD_SINGLE`: Only one thread will execute.

- `MPI_THREAD_FUNNELED`: If the process is multithreaded, only the thread that called MPI_Init_thread will make MPI calls.

- `MPI_THREAD_SERIALIZED`: If the process is multithreaded, only one thread will make MPI library calls at one time.

- `MPI_THREAD_MULTIPLE`: If the process is multithreaded, multiple threads may call MPI at once with no restrictions.

The level of thread support available to the program is set in `provided`. In Open MPI, the value is dependent on how the library was configured and built. Note that there is no guarantee that `provided` will be greater than or equal to `required`.

## 17.2.360.5. NOTES

It is the caller’s responsibility to check the value of `provided`, as it may be less than what was requested in `required`.

## 17.2.360.6. ERRORS

MPI_T_init_thread will fail if:

- `MPI_T_ERR_MEMORY`: Out of memory

- `MPI_T_ERR_CANNOT_INIT`: Interface not in the state to be initialized

See also

- MPI_T

- MPI_Init

- MPI_Init_thread