ReproBLAS
Functions
idxdMPI.h File Reference

idxdMPI.h defines MPI wrapper functions for indexed types and the necessary functions to perform reproducible reductions. More...

#include <mpi.h>
#include "idxd.h"

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...
 

Detailed Description

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:

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 k-fold). 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.

Function Documentation

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

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016
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().

Parameters
foldthe fold of the indexed types
Author
Peter Ahrens
Date
18 Jun 2016