Intel® MPI Benchmarks User Guide and Methodology Description

# Buffer Initialization

Communication and I/O buffers are dynamically allocated as `void*` and used as `MPI_BYTE` buffers for all benchmarks except `Accumulate`, see Memory Requirements. To assign the buffer contents, a cast to an assignment type is performed. This facilitates result checking which may become necessary. Besides, a sensible data type is mandatory for `Accumulate`.

Intel® MPI Benchmarks sets the buffer assignment type `assign_type` in `IMB_settings.h/IMB_settings_io.h.` Currently, `int` is used for `IMB-IO`, float for `IMB-EXT`. The values are set by a macro definition as follows.

For IMB-EXT benchmarks:

    #define BUF_VALUE(rank,i) (0.1*((rank)+1)+(float)( i)

For IMB-IO benchmarks:

    #define BUF_VALUE(rank,i) 10000000*(1+rank)+i%10000000

In every initialization, communication buffers are seen as typed arrays and initialized as follows:

    ((assign_type*)buffer)[i] = BUF_VALUE(rank,i;

where `rank` is the MPI rank of the calling process.