MLIR

Multi-Level IR Compiler Framework

'mpi' Dialect

This dialect models the Message Passing Interface (MPI), version 4.0. It is meant to serve as an interfacing dialect that is targeted by higher-level dialects. The MPI dialect itself can be lowered to multiple MPI implementations and hide differences in ABI. The dialect models the functions of the MPI specification as close to 1:1 as possible while preserving SSA value semantics where it makes sense, and uses memref types instead of bare pointers.

This dialect is under active development, and while stability is an eventual goal, it is not guaranteed at this juncture. Given the early state, it is recommended to inquire further prior to using this dialect.

For an in-depth documentation of the MPI library interface, please refer to official documentation such as the OpenMPI online documentation.

Operations 

source

mpi.allreduce (mpi::AllReduceOp) 

Equivalent to MPI_Allreduce(sendbuf, recvbuf, op, MPI_COMM_WORLD)

Syntax:

operation ::= `mpi.allreduce` `(` $sendbuf `,` $recvbuf `,` $op `)` attr-dict `:`type($sendbuf) `,` type($recvbuf)(`->` type($retval)^)?

MPI_Allreduce performs a reduction operation on the values in the sendbuf array and stores the result in the recvbuf array. The operation is performed across all processes in the communicator.

The op attribute specifies the reduction operation to be performed. Currently only the MPI_Op predefined in the standard (e.g. MPI_SUM) are supported.

Communicators other than MPI_COMM_WORLD are not supported for now.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Attributes: 

AttributeMLIR TypeDescription
op::mlir::mpi::MPI_OpClassEnumAttr
MPI operation class

Enum cases:

  • MPI_OP_NULL (MPI_OP_NULL)
  • MPI_MAX (MPI_MAX)
  • MPI_MIN (MPI_MIN)
  • MPI_SUM (MPI_SUM)
  • MPI_PROD (MPI_PROD)
  • MPI_LAND (MPI_LAND)
  • MPI_BAND (MPI_BAND)
  • MPI_LOR (MPI_LOR)
  • MPI_BOR (MPI_BOR)
  • MPI_LXOR (MPI_LXOR)
  • MPI_BXOR (MPI_BXOR)
  • MPI_MINLOC (MPI_MINLOC)
  • MPI_MAXLOC (MPI_MAXLOC)
  • MPI_REPLACE (MPI_REPLACE)

Operands: 

OperandDescription
sendbufmemref of any type values
recvbufmemref of any type values

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)

mpi.barrier (mpi::Barrier) 

Equivalent to MPI_Barrier(MPI_COMM_WORLD)

Syntax:

operation ::= `mpi.barrier` attr-dict (`:` type($retval) ^)?

MPI_Barrier blocks execution until all processes in the communicator have reached this routine.

Communicators other than MPI_COMM_WORLD are not supported for now.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)

mpi.comm_rank (mpi::CommRankOp) 

Get the current rank, equivalent to MPI_Comm_rank(MPI_COMM_WORLD, &rank)

Syntax:

operation ::= `mpi.comm_rank` attr-dict `:` type(results)

Communicators other than MPI_COMM_WORLD are not supported for now.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)
rank32-bit signless integer

mpi.comm_size (mpi::CommSizeOp) 

Get the size of the group associated to the communicator, equivalent to MPI_Comm_size(MPI_COMM_WORLD, &size)

Syntax:

operation ::= `mpi.comm_size` attr-dict `:` type(results)

Communicators other than MPI_COMM_WORLD are not supported for now.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)
size32-bit signless integer

mpi.error_class (mpi::ErrorClassOp) 

Get the error class from an error code, equivalent to the MPI_Error_class function

Syntax:

operation ::= `mpi.error_class` $val attr-dict `:` type($val)

MPI_Error_class maps return values from MPI calls to a set of well-known MPI error classes.

Operands: 

OperandDescription
valMPI function call return value (!mpi.retval)

Results: 

ResultDescription
errclassMPI function call return value (!mpi.retval)

mpi.finalize (mpi::FinalizeOp) 

Finalize the MPI library, equivalent to MPI_Finalize()

Syntax:

operation ::= `mpi.finalize` attr-dict (`:` type($retval)^)?

This function cleans up the MPI state. Afterwards, no MPI methods may be invoked (excpet for MPI_Get_version, MPI_Initialized, and MPI_Finalized). Notably, MPI_Init cannot be called again in the same program.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)

mpi.init (mpi::InitOp) 

Initialize the MPI library, equivalent to MPI_Init(NULL, NULL)

Syntax:

operation ::= `mpi.init` attr-dict (`:` type($retval)^)?

This operation must preceed most MPI calls (except for very few exceptions, please consult with the MPI specification on these).

Passing &argc, &argv is not supported currently.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)

mpi.irecv (mpi::IRecvOp) 

Equivalent to MPI_Irecv(ptr, size, dtype, dest, tag, MPI_COMM_WORLD, &req)

Syntax:

operation ::= `mpi.irecv` `(` $ref `,` $tag `,` $rank `)` attr-dict `:`type($ref) `,` type($tag) `,` type($rank) `->`type(results)

MPI_Irecv begins a non-blocking receive of size elements of type dtype from rank dest. The tag value and communicator enables the library to determine the matching of multiple sends and receives between the same ranks.

Communicators other than MPI_COMM_WORLD are not supported for now.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Operands: 

OperandDescription
refmemref of any type values
tag32-bit signless integer
rank32-bit signless integer

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)
reqMPI asynchronous request handler

mpi.isend (mpi::ISendOp) 

Equivalent to MPI_Isend(ptr, size, dtype, dest, tag, MPI_COMM_WORLD)

Syntax:

operation ::= `mpi.isend` `(` $ref `,` $tag `,` $rank `)` attr-dict `:` type($ref) `,` type($tag) `,` type($rank) `->` type(results)

MPI_Isend begins a non-blocking send of size elements of type dtype to rank dest. The tag value and communicator enables the library to determine the matching of multiple sends and receives between the same ranks.

Communicators other than MPI_COMM_WORLD are not supported for now.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Operands: 

OperandDescription
refmemref of any type values
tag32-bit signless integer
rank32-bit signless integer

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)
reqMPI asynchronous request handler

mpi.recv (mpi::RecvOp) 

Equivalent to MPI_Recv(ptr, size, dtype, source, tag, MPI_COMM_WORLD, MPI_STATUS_IGNORE)

Syntax:

operation ::= `mpi.recv` `(` $ref `,` $tag `,` $source `)` attr-dict `:` type($ref) `,` type($tag) `,` type($source)(`->` type($retval)^)?

MPI_Recv performs a blocking receive of size elements of type dtype from rank source. The tag value and communicator enables the library to determine the matching of multiple sends and receives between the same ranks.

Communicators other than MPI_COMM_WORLD are not supported for now. The MPI_Status is set to MPI_STATUS_IGNORE, as the status object is not yet ported to MLIR.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Operands: 

OperandDescription
refmemref of any type values
tag32-bit signless integer
source32-bit signless integer

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)

mpi.retval_check (mpi::RetvalCheckOp) 

Check an MPI return value against an error class

Syntax:

operation ::= `mpi.retval_check` $val `=` $errclass attr-dict `:` type($res)

This operation compares MPI status codes to known error class constants such as MPI_SUCCESS, or MPI_ERR_COMM.

Attributes: 

AttributeMLIR TypeDescription
errclass::mlir::mpi::MPI_ErrorClassEnumAttr
MPI error class name

Enum cases:

  • MPI_SUCCESS (MPI_SUCCESS)
  • MPI_ERR_ACCESS (MPI_ERR_ACCESS)
  • MPI_ERR_AMODE (MPI_ERR_AMODE)
  • MPI_ERR_ARG (MPI_ERR_ARG)
  • MPI_ERR_ASSERT (MPI_ERR_ASSERT)
  • MPI_ERR_BAD_FILE (MPI_ERR_BAD_FILE)
  • MPI_ERR_BASE (MPI_ERR_BASE)
  • MPI_ERR_BUFFER (MPI_ERR_BUFFER)
  • MPI_ERR_COMM (MPI_ERR_COMM)
  • MPI_ERR_CONVERSION (MPI_ERR_CONVERSION)
  • MPI_ERR_COUNT (MPI_ERR_COUNT)
  • MPI_ERR_DIMS (MPI_ERR_DIMS)
  • MPI_ERR_DISP (MPI_ERR_DISP)
  • MPI_ERR_DUP_DATAREP (MPI_ERR_DUP_DATAREP)
  • MPI_ERR_ERRHANDLER (MPI_ERR_ERRHANDLER)
  • MPI_ERR_FILE (MPI_ERR_FILE)
  • MPI_ERR_FILE_EXISTS (MPI_ERR_FILE_EXISTS)
  • MPI_ERR_FILE_IN_USE (MPI_ERR_FILE_IN_USE)
  • MPI_ERR_GROUP (MPI_ERR_GROUP)
  • MPI_ERR_INFO (MPI_ERR_INFO)
  • MPI_ERR_INFO_KEY (MPI_ERR_INFO_KEY)
  • MPI_ERR_INFO_NOKEY (MPI_ERR_INFO_NOKEY)
  • MPI_ERR_INFO_VALUE (MPI_ERR_INFO_VALUE)
  • MPI_ERR_IN_STATUS (MPI_ERR_IN_STATUS)
  • MPI_ERR_INTERN (MPI_ERR_INTERN)
  • MPI_ERR_IO (MPI_ERR_IO)
  • MPI_ERR_KEYVAL (MPI_ERR_KEYVAL)
  • MPI_ERR_LOCKTYPE (MPI_ERR_LOCKTYPE)
  • MPI_ERR_NAME (MPI_ERR_NAME)
  • MPI_ERR_NO_MEM (MPI_ERR_NO_MEM)
  • MPI_ERR_NO_SPACE (MPI_ERR_NO_SPACE)
  • MPI_ERR_NO_SUCH_FILE (MPI_ERR_NO_SUCH_FILE)
  • MPI_ERR_NOT_SAME (MPI_ERR_NOT_SAME)
  • MPI_ERR_OP (MPI_ERR_OP)
  • MPI_ERR_OTHER (MPI_ERR_OTHER)
  • MPI_ERR_PENDING (MPI_ERR_PENDING)
  • MPI_ERR_PORT (MPI_ERR_PORT)
  • MPI_ERR_PROC_ABORTED (MPI_ERR_PROC_ABORTED)
  • MPI_ERR_QUOTA (MPI_ERR_QUOTA)
  • MPI_ERR_RANK (MPI_ERR_RANK)
  • MPI_ERR_READ_ONLY (MPI_ERR_READ_ONLY)
  • MPI_ERR_REQUEST (MPI_ERR_REQUEST)
  • MPI_ERR_RMA_ATTACH (MPI_ERR_RMA_ATTACH)
  • MPI_ERR_RMA_CONFLICT (MPI_ERR_RMA_CONFLICT)
  • MPI_ERR_RMA_FLAVOR (MPI_ERR_RMA_FLAVOR)
  • MPI_ERR_RMA_RANGE (MPI_ERR_RMA_RANGE)
  • MPI_ERR_RMA_SHARED (MPI_ERR_RMA_SHARED)
  • MPI_ERR_RMA_SYNC (MPI_ERR_RMA_SYNC)
  • MPI_ERR_ROOT (MPI_ERR_ROOT)
  • MPI_ERR_SERVICE (MPI_ERR_SERVICE)
  • MPI_ERR_SESSION (MPI_ERR_SESSION)
  • MPI_ERR_SIZE (MPI_ERR_SIZE)
  • MPI_ERR_SPAWN (MPI_ERR_SPAWN)
  • MPI_ERR_TAG (MPI_ERR_TAG)
  • MPI_ERR_TOPOLOGY (MPI_ERR_TOPOLOGY)
  • MPI_ERR_TRUNCATE (MPI_ERR_TRUNCATE)
  • MPI_ERR_TYPE (MPI_ERR_TYPE)
  • MPI_ERR_UNKNOWN (MPI_ERR_UNKNOWN)
  • MPI_ERR_UNSUPPORTED_DATAREP (MPI_ERR_UNSUPPORTED_DATAREP)
  • MPI_ERR_UNSUPPORTED_OPERATION (MPI_ERR_UNSUPPORTED_OPERATION)
  • MPI_ERR_VALUE_TOO_LARGE (MPI_ERR_VALUE_TOO_LARGE)
  • MPI_ERR_WIN (MPI_ERR_WIN)
  • MPI_ERR_LASTCODE (MPI_ERR_LASTCODE)

Operands: 

OperandDescription
valMPI function call return value (!mpi.retval)

Results: 

ResultDescription
res1-bit signless integer

mpi.send (mpi::SendOp) 

Equivalent to MPI_Send(ptr, size, dtype, dest, tag, MPI_COMM_WORLD)

Syntax:

operation ::= `mpi.send` `(` $ref `,` $tag `,` $dest `)` attr-dict `:` type($ref) `,` type($tag) `,` type($dest)(`->` type($retval)^)?

MPI_Send performs a blocking send of size elements of type dtype to rank dest. The tag value and communicator enables the library to determine the matching of multiple sends and receives between the same ranks.

Communicators other than MPI_COMM_WORLD are not supported for now.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Operands: 

OperandDescription
refmemref of any type values
tag32-bit signless integer
dest32-bit signless integer

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)

mpi.wait (mpi::Wait) 

Equivalent to MPI_Wait(req, MPI_STATUS_IGNORE)

Syntax:

operation ::= `mpi.wait` `(` $req `)` attr-dict `:` type($req) (`->` type($retval) ^)?

MPI_Wait blocks execution until the request has completed.

The MPI_Status is set to MPI_STATUS_IGNORE, as the status object is not yet ported to MLIR.

This operation can optionally return an !mpi.retval value that can be used to check for errors.

Operands: 

OperandDescription
reqMPI asynchronous request handler

Results: 

ResultDescription
retvalMPI function call return value (!mpi.retval)

Attributes 

MPI_ErrorClassEnumAttr 

MPI error class name

Syntax:

#mpi.errclass<
  ::mlir::mpi::MPI_ErrorClassEnum   # value
>

Enum cases:

  • MPI_SUCCESS (MPI_SUCCESS)
  • MPI_ERR_ACCESS (MPI_ERR_ACCESS)
  • MPI_ERR_AMODE (MPI_ERR_AMODE)
  • MPI_ERR_ARG (MPI_ERR_ARG)
  • MPI_ERR_ASSERT (MPI_ERR_ASSERT)
  • MPI_ERR_BAD_FILE (MPI_ERR_BAD_FILE)
  • MPI_ERR_BASE (MPI_ERR_BASE)
  • MPI_ERR_BUFFER (MPI_ERR_BUFFER)
  • MPI_ERR_COMM (MPI_ERR_COMM)
  • MPI_ERR_CONVERSION (MPI_ERR_CONVERSION)
  • MPI_ERR_COUNT (MPI_ERR_COUNT)
  • MPI_ERR_DIMS (MPI_ERR_DIMS)
  • MPI_ERR_DISP (MPI_ERR_DISP)
  • MPI_ERR_DUP_DATAREP (MPI_ERR_DUP_DATAREP)
  • MPI_ERR_ERRHANDLER (MPI_ERR_ERRHANDLER)
  • MPI_ERR_FILE (MPI_ERR_FILE)
  • MPI_ERR_FILE_EXISTS (MPI_ERR_FILE_EXISTS)
  • MPI_ERR_FILE_IN_USE (MPI_ERR_FILE_IN_USE)
  • MPI_ERR_GROUP (MPI_ERR_GROUP)
  • MPI_ERR_INFO (MPI_ERR_INFO)
  • MPI_ERR_INFO_KEY (MPI_ERR_INFO_KEY)
  • MPI_ERR_INFO_NOKEY (MPI_ERR_INFO_NOKEY)
  • MPI_ERR_INFO_VALUE (MPI_ERR_INFO_VALUE)
  • MPI_ERR_IN_STATUS (MPI_ERR_IN_STATUS)
  • MPI_ERR_INTERN (MPI_ERR_INTERN)
  • MPI_ERR_IO (MPI_ERR_IO)
  • MPI_ERR_KEYVAL (MPI_ERR_KEYVAL)
  • MPI_ERR_LOCKTYPE (MPI_ERR_LOCKTYPE)
  • MPI_ERR_NAME (MPI_ERR_NAME)
  • MPI_ERR_NO_MEM (MPI_ERR_NO_MEM)
  • MPI_ERR_NO_SPACE (MPI_ERR_NO_SPACE)
  • MPI_ERR_NO_SUCH_FILE (MPI_ERR_NO_SUCH_FILE)
  • MPI_ERR_NOT_SAME (MPI_ERR_NOT_SAME)
  • MPI_ERR_OP (MPI_ERR_OP)
  • MPI_ERR_OTHER (MPI_ERR_OTHER)
  • MPI_ERR_PENDING (MPI_ERR_PENDING)
  • MPI_ERR_PORT (MPI_ERR_PORT)
  • MPI_ERR_PROC_ABORTED (MPI_ERR_PROC_ABORTED)
  • MPI_ERR_QUOTA (MPI_ERR_QUOTA)
  • MPI_ERR_RANK (MPI_ERR_RANK)
  • MPI_ERR_READ_ONLY (MPI_ERR_READ_ONLY)
  • MPI_ERR_REQUEST (MPI_ERR_REQUEST)
  • MPI_ERR_RMA_ATTACH (MPI_ERR_RMA_ATTACH)
  • MPI_ERR_RMA_CONFLICT (MPI_ERR_RMA_CONFLICT)
  • MPI_ERR_RMA_FLAVOR (MPI_ERR_RMA_FLAVOR)
  • MPI_ERR_RMA_RANGE (MPI_ERR_RMA_RANGE)
  • MPI_ERR_RMA_SHARED (MPI_ERR_RMA_SHARED)
  • MPI_ERR_RMA_SYNC (MPI_ERR_RMA_SYNC)
  • MPI_ERR_ROOT (MPI_ERR_ROOT)
  • MPI_ERR_SERVICE (MPI_ERR_SERVICE)
  • MPI_ERR_SESSION (MPI_ERR_SESSION)
  • MPI_ERR_SIZE (MPI_ERR_SIZE)
  • MPI_ERR_SPAWN (MPI_ERR_SPAWN)
  • MPI_ERR_TAG (MPI_ERR_TAG)
  • MPI_ERR_TOPOLOGY (MPI_ERR_TOPOLOGY)
  • MPI_ERR_TRUNCATE (MPI_ERR_TRUNCATE)
  • MPI_ERR_TYPE (MPI_ERR_TYPE)
  • MPI_ERR_UNKNOWN (MPI_ERR_UNKNOWN)
  • MPI_ERR_UNSUPPORTED_DATAREP (MPI_ERR_UNSUPPORTED_DATAREP)
  • MPI_ERR_UNSUPPORTED_OPERATION (MPI_ERR_UNSUPPORTED_OPERATION)
  • MPI_ERR_VALUE_TOO_LARGE (MPI_ERR_VALUE_TOO_LARGE)
  • MPI_ERR_WIN (MPI_ERR_WIN)
  • MPI_ERR_LASTCODE (MPI_ERR_LASTCODE)

Parameters: 

ParameterC++ typeDescription
value::mlir::mpi::MPI_ErrorClassEnuman enum of type MPI_ErrorClassEnum

MPI_OpClassEnumAttr 

MPI operation class

Syntax:

#mpi.opclass<
  ::mlir::mpi::MPI_OpClassEnum   # value
>

Enum cases:

  • MPI_OP_NULL (MPI_OP_NULL)
  • MPI_MAX (MPI_MAX)
  • MPI_MIN (MPI_MIN)
  • MPI_SUM (MPI_SUM)
  • MPI_PROD (MPI_PROD)
  • MPI_LAND (MPI_LAND)
  • MPI_BAND (MPI_BAND)
  • MPI_LOR (MPI_LOR)
  • MPI_BOR (MPI_BOR)
  • MPI_LXOR (MPI_LXOR)
  • MPI_BXOR (MPI_BXOR)
  • MPI_MINLOC (MPI_MINLOC)
  • MPI_MAXLOC (MPI_MAXLOC)
  • MPI_REPLACE (MPI_REPLACE)

Parameters: 

ParameterC++ typeDescription
value::mlir::mpi::MPI_OpClassEnuman enum of type MPI_OpClassEnum

Types 

RequestType 

MPI asynchronous request handler

Syntax: !mpi.request

This type represents a handler to an asynchronous request.

RetvalType 

MPI function call return value (!mpi.retval)

Syntax: !mpi.retval

This type represents a return value from an MPI function call. This value can be MPI_SUCCESS, MPI_ERR_IN_STATUS, or any error code.

This return value can be compared agains the known MPI error classes represented by #mpi.errclass using the mpi.retval_check operation.

StatusType 

MPI reception operation status type

Syntax: !mpi.status

This type represents the status of a reception operation.

Enums 

MPI_ErrorClassEnum 

MPI error class name

Cases: 

SymbolValueString
MPI_SUCCESS0MPI_SUCCESS
MPI_ERR_ACCESS1MPI_ERR_ACCESS
MPI_ERR_AMODE2MPI_ERR_AMODE
MPI_ERR_ARG3MPI_ERR_ARG
MPI_ERR_ASSERT4MPI_ERR_ASSERT
MPI_ERR_BAD_FILE5MPI_ERR_BAD_FILE
MPI_ERR_BASE6MPI_ERR_BASE
MPI_ERR_BUFFER7MPI_ERR_BUFFER
MPI_ERR_COMM8MPI_ERR_COMM
MPI_ERR_CONVERSION9MPI_ERR_CONVERSION
MPI_ERR_COUNT10MPI_ERR_COUNT
MPI_ERR_DIMS11MPI_ERR_DIMS
MPI_ERR_DISP12MPI_ERR_DISP
MPI_ERR_DUP_DATAREP13MPI_ERR_DUP_DATAREP
MPI_ERR_ERRHANDLER14MPI_ERR_ERRHANDLER
MPI_ERR_FILE15MPI_ERR_FILE
MPI_ERR_FILE_EXISTS16MPI_ERR_FILE_EXISTS
MPI_ERR_FILE_IN_USE17MPI_ERR_FILE_IN_USE
MPI_ERR_GROUP18MPI_ERR_GROUP
MPI_ERR_INFO19MPI_ERR_INFO
MPI_ERR_INFO_KEY20MPI_ERR_INFO_KEY
MPI_ERR_INFO_NOKEY21MPI_ERR_INFO_NOKEY
MPI_ERR_INFO_VALUE22MPI_ERR_INFO_VALUE
MPI_ERR_IN_STATUS23MPI_ERR_IN_STATUS
MPI_ERR_INTERN24MPI_ERR_INTERN
MPI_ERR_IO25MPI_ERR_IO
MPI_ERR_KEYVAL26MPI_ERR_KEYVAL
MPI_ERR_LOCKTYPE27MPI_ERR_LOCKTYPE
MPI_ERR_NAME28MPI_ERR_NAME
MPI_ERR_NO_MEM29MPI_ERR_NO_MEM
MPI_ERR_NO_SPACE30MPI_ERR_NO_SPACE
MPI_ERR_NO_SUCH_FILE31MPI_ERR_NO_SUCH_FILE
MPI_ERR_NOT_SAME32MPI_ERR_NOT_SAME
MPI_ERR_OP33MPI_ERR_OP
MPI_ERR_OTHER34MPI_ERR_OTHER
MPI_ERR_PENDING35MPI_ERR_PENDING
MPI_ERR_PORT36MPI_ERR_PORT
MPI_ERR_PROC_ABORTED37MPI_ERR_PROC_ABORTED
MPI_ERR_QUOTA38MPI_ERR_QUOTA
MPI_ERR_RANK39MPI_ERR_RANK
MPI_ERR_READ_ONLY40MPI_ERR_READ_ONLY
MPI_ERR_REQUEST41MPI_ERR_REQUEST
MPI_ERR_RMA_ATTACH42MPI_ERR_RMA_ATTACH
MPI_ERR_RMA_CONFLICT43MPI_ERR_RMA_CONFLICT
MPI_ERR_RMA_FLAVOR44MPI_ERR_RMA_FLAVOR
MPI_ERR_RMA_RANGE45MPI_ERR_RMA_RANGE
MPI_ERR_RMA_SHARED46MPI_ERR_RMA_SHARED
MPI_ERR_RMA_SYNC47MPI_ERR_RMA_SYNC
MPI_ERR_ROOT48MPI_ERR_ROOT
MPI_ERR_SERVICE49MPI_ERR_SERVICE
MPI_ERR_SESSION50MPI_ERR_SESSION
MPI_ERR_SIZE51MPI_ERR_SIZE
MPI_ERR_SPAWN52MPI_ERR_SPAWN
MPI_ERR_TAG53MPI_ERR_TAG
MPI_ERR_TOPOLOGY54MPI_ERR_TOPOLOGY
MPI_ERR_TRUNCATE55MPI_ERR_TRUNCATE
MPI_ERR_TYPE56MPI_ERR_TYPE
MPI_ERR_UNKNOWN57MPI_ERR_UNKNOWN
MPI_ERR_UNSUPPORTED_DATAREP58MPI_ERR_UNSUPPORTED_DATAREP
MPI_ERR_UNSUPPORTED_OPERATION59MPI_ERR_UNSUPPORTED_OPERATION
MPI_ERR_VALUE_TOO_LARGE60MPI_ERR_VALUE_TOO_LARGE
MPI_ERR_WIN61MPI_ERR_WIN
MPI_ERR_LASTCODE62MPI_ERR_LASTCODE

MPI_OpClassEnum 

MPI operation class

Cases: 

SymbolValueString
MPI_OP_NULL0MPI_OP_NULL
MPI_MAX1MPI_MAX
MPI_MIN2MPI_MIN
MPI_SUM3MPI_SUM
MPI_PROD4MPI_PROD
MPI_LAND5MPI_LAND
MPI_BAND6MPI_BAND
MPI_LOR7MPI_LOR
MPI_BOR8MPI_BOR
MPI_LXOR9MPI_LXOR
MPI_BXOR10MPI_BXOR
MPI_MINLOC11MPI_MINLOC
MPI_MAXLOC12MPI_MAXLOC
MPI_REPLACE13MPI_REPLACE