Intel® MPI Benchmarks User Guide and Methodology Description

# IMB-MPI-2 Benchmark Classification

Intel® MPI Benchmarks introduces three classes of benchmarks:

- Single Transfer

- Parallel Transfer

- Collective

Each class interprets results in a different way.

### Note

The following benchmarks do not belong to any class:

- `Window` - measures overhead of one-sided communications for the `MPI_Win_create / MPI_Win_free` functions

- `Open_close` - measures overhead of input/output operations for the `MPI_File_open / MPI_File_close` functions

## Single Transfer Benchmarks

This class contains benchmarks of functions that operate on a single data element transferred between one source and one target. For MPI-2 benchmarks, the source of the data transfer can be an MPI process or, in the case of `Read` benchmarks, an MPI file. The target can be an MPI process or an MPI file.

For I/O benchmarks, the single transfer is defined as an operation between an MPI process and an individual window or a file.

- Single transfer `IMB-EXT` benchmarks only run with two active processes.

- Single transfer `IMB-IO` benchmarks only run with one active process.

## Parallel Transfer Benchmarks

This class contains benchmarks of functions that operate on several processes in parallel. The benchmark timings are produced under a global load. The number of participating processes is arbitrary.

In the Parallel Transfer, more than one process participates in the overall pattern.

The final time is measured as the maximum of timings for all single processes. The throughput is related to that time and the overall amount of transferred data (sum over all processes).

## Collective Benchmarks

This class contains benchmarks of functions that are collective as provided by the MPI standard. The final time is measured as the maximum of timings for all single processes. The throughput is not calculated.

## MPI-2 Benchmarks Classification

Single Transfer | Parallel Transfer | Collective | Other
--- | --- | --- | ---
`Unidir_Get` | `Multi_Unidir_Get` | `Accumulate` | `Window`
`Unidir_Put` | `Multi_Unidir_Put` | `Multi_Accumulate` | `Multi_Window`
`Bidir_Get` | `Multi_Bidir_Get` |  |
`Bidir_Put` | `Multi_Bidir_Put` |  |
`S_[I]Write_indv` | `P_[I]Write_indv` | `C_[I]Write_indv` | `Multi-C_[I]Write_indv`
`S_[I]Write_indv` | `P_[I]Write_indv` | `C_[I]Write_indv` `Multi-C_[I]Write_indv` | `Open_close` `Multi-Open_close`
`S_[I]Read_indv` | `P_[I]Read_indv` | `C_[I]Read_indv` `Multi-C_[I]Read_indv` |
`S_[I]Write_expl` | `P_[I]Write_expl` | `C_[I]Write_expl` `Multi-C_[I]Write_expl` |
`S_[I]Read_expl` | `P_[I]Read_expl` | `C_[I]Read_expl` `Multi-C_[I]Read_expl` |
| `P_[I]Write_shared` | `C_[I]Write_shared` `Multi-C_[I]Write_shared` |
| `P_[I]Read_shared` | `C_[I]Read_shared` `Multi-C_[I]Write_shared` |
| `P_[I]Write_priv` |  |
| `P_[I]Read_priv` |  |