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.