ReproBLAS

idxdMPI.h defines MPI wrapper functions for indexed types and the necessary functions to perform reproducible reductions. More...
Go to the source code of this file.
Functions  
MPI_Op  idxdMPI_DIDIADD (const int fold) 
Get an MPI_OP to add indexed double precision (Y += X) More...  
MPI_Op  idxdMPI_ZIZIADD (const int fold) 
Get an MPI_OP to add indexed complex double precision (Y += X) More...  
MPI_Op  idxdMPI_SISIADD (const int fold) 
Get an MPI_OP to add indexed double precision (Y += X) More...  
MPI_Op  idxdMPI_CICIADD (const int fold) 
Get an MPI_OP to add indexed complex single precision (Y += X) More...  
MPI_Op  idxdMPI_DIDIADDSQ (const int fold) 
Get an MPI_OP to add indexed double precision scaled sums of squares (Y += X) More...  
MPI_Op  idxdMPI_SISIADDSQ (const int fold) 
Get an MPI_OP to add indexed single precision scaled sums of squares (Y += X) More...  
MPI_Datatype  idxdMPI_DOUBLE_INDEXED (const int fold) 
Get an MPI_DATATYPE representing indexed double precision. More...  
MPI_Datatype  idxdMPI_DOUBLE_COMPLEX_INDEXED (const int fold) 
Get an MPI_DATATYPE representing indexed complex double precision. More...  
MPI_Datatype  idxdMPI_FLOAT_INDEXED (const int fold) 
Get an MPI_DATATYPE representing indexed single precision. More...  
MPI_Datatype  idxdMPI_FLOAT_COMPLEX_INDEXED (const int fold) 
Get an MPI_DATATYPE representing indexed complex single precision. More...  
MPI_Datatype  idxdMPI_DOUBLE_INDEXED_SCALED (const int fold) 
Get an MPI_DATATYPE representing scaled indexed double precision. More...  
MPI_Datatype  idxdMPI_FLOAT_INDEXED_SCALED (const int fold) 
Get an MPI_DATATYPE representing scaled indexed single precision. More...  
idxdMPI.h defines MPI wrapper functions for indexed types and the necessary functions to perform reproducible reductions.
This header is modeled after cblas.h, and as such functions are prefixed with character sets describing the data types they operate upon. For example, the function dfoo
would perform the function foo
on double
possibly returning a double
.
If two character sets are prefixed, the first set of characters describes the output and the second the input type. For example, the function dzbar
would perform the function bar
on double
complex
and return a double
.
Such character sets are listed as follows:
double
)*void
)float
)*void
)The goal of using indexed types is to obtain either more accurate or reproducible summation of floating point numbers. In reproducible summation, floating point numbers are split into several slices along predefined boundaries in the exponent range. The space between two boundaries is called a bin. Indexed types are composed of several accumulators, each accumulating the slices in a particular bin. The accumulators correspond to the largest consecutive nonzero bins seen so far.
The parameter fold
describes how many accumulators are used in the indexed types supplied to a subroutine (an indexed type with k
accumulators is kfold
). The default value for this parameter can be set in config.h. If you are unsure of what value to use for fold
, we recommend 3. Note that the fold
of indexed types must be the same for all indexed types that interact with each other. Operations on more than one indexed type assume all indexed types being operated upon have the same fold
. Note that the fold
of an indexed type may not be changed once the type has been allocated. A common use case would be to set the value of fold
as a global macro in your code and supply it to all indexed functions that you use.
MPI_Op idxdMPI_CICIADD  (  const int  fold  ) 
Get an MPI_OP to add indexed complex single precision (Y += X)
Creates (if it has not already been created) and returns a function handle for an MPI reduction operation that performs the operation Y += X on two arrays of indexed complex single precision datatypes of the specified fold. An MPI datatype handle can be created for such a datatype with idxdMPI_FLOAT_COMPLEX_INDEXED.
This method may call MPI_Op_create()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Op idxdMPI_DIDIADD  (  const int  fold  ) 
Get an MPI_OP to add indexed double precision (Y += X)
Creates (if it has not already been created) and returns a function handle for an MPI reduction operation that performs the operation Y += X on two arrays of indexed double precision datatypes of the specified fold. An MPI datatype handle can be created for such a datatype with idxdMPI_DOUBLE_INDEXED.
This method may call MPI_Op_create()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Op idxdMPI_DIDIADDSQ  (  const int  fold  ) 
Get an MPI_OP to add indexed double precision scaled sums of squares (Y += X)
Creates (if it has not already been created) and returns a function handle for an MPI reduction operation that performs the operation Y += X where X and Y represent scaled sums of squares on two arrays of scaled indexed double precision datatypes of the specified fold. An MPI datatype handle can be created for such a datatype with idxdMPI_DOUBLE_INDEXED_SCALED.
This method may call MPI_Op_create()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Datatype idxdMPI_DOUBLE_COMPLEX_INDEXED  (  const int  fold  ) 
Get an MPI_DATATYPE representing indexed complex double precision.
Creates (if it has not already been created) and returns a datatype handle for an MPI datatype that represents an indexed complex double precision type.
This method may call MPI_Type_contiguous()
and MPI_Type_commit()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Datatype idxdMPI_DOUBLE_INDEXED  (  const int  fold  ) 
Get an MPI_DATATYPE representing indexed double precision.
Creates (if it has not already been created) and returns a datatype handle for an MPI datatype that represents an indexed double precision type.
This method may call MPI_Type_contiguous()
and MPI_Type_commit()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Datatype idxdMPI_DOUBLE_INDEXED_SCALED  (  const int  fold  ) 
Get an MPI_DATATYPE representing scaled indexed double precision.
Creates (if it has not already been created) and returns a datatype handle for an MPI datatype that represents a scaled indexed double precision type.
This method may call MPI_Type_contiguous()
and MPI_Type_commit()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Datatype idxdMPI_FLOAT_COMPLEX_INDEXED  (  const int  fold  ) 
Get an MPI_DATATYPE representing indexed complex single precision.
Creates (if it has not already been created) and returns a datatype handle for an MPI datatype that represents a indexed complex single precision type.
This method may call MPI_Type_contiguous()
and MPI_Type_commit()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Datatype idxdMPI_FLOAT_INDEXED  (  const int  fold  ) 
Get an MPI_DATATYPE representing indexed single precision.
Creates (if it has not already been created) and returns a datatype handle for an MPI datatype that represents a indexed single precision type.
This method may call MPI_Type_contiguous()
and MPI_Type_commit()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Datatype idxdMPI_FLOAT_INDEXED_SCALED  (  const int  fold  ) 
Get an MPI_DATATYPE representing scaled indexed single precision.
Creates (if it has not already been created) and returns a datatype handle for an MPI datatype that represents a scaled indexed single precision type.
This method may call MPI_Type_contiguous()
and MPI_Type_commit()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Op idxdMPI_SISIADD  (  const int  fold  ) 
Get an MPI_OP to add indexed double precision (Y += X)
Creates (if it has not already been created) and returns a function handle for an MPI reduction operation that performs the operation Y += X on two arrays of indexed double precision datatypes of the specified fold. An MPI datatype handle can be created for such a datatype with idxdMPI_FLOAT_INDEXED.
This method may call MPI_Op_create()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Op idxdMPI_SISIADDSQ  (  const int  fold  ) 
Get an MPI_OP to add indexed single precision scaled sums of squares (Y += X)
Creates (if it has not already been created) and returns a function handle for an MPI reduction operation that performs the operation Y += X where X and Y represent scaled sums of squares on two arrays of scaled indexed single precision datatypes of the specified fold. An MPI datatype handle can be created for such a datatype with idxdMPI_FLOAT_INDEXED_SCALED.
This method may call MPI_Op_create()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 
MPI_Op idxdMPI_ZIZIADD  (  const int  fold  ) 
Get an MPI_OP to add indexed complex double precision (Y += X)
Creates (if it has not already been created) and returns a function handle for an MPI reduction operation that performs the operation Y += X on two arrays of indexed complex double precision datatypes of the specified fold. An MPI datatype handle can be created for such a datatype with idxdMPI_DOUBLE_COMPLEX_INDEXED.
This method may call MPI_Op_create()
. If there is an error, this method will call MPI_Abort()
.
fold  the fold of the indexed types 