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(R) 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.