'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 ¶
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: ¶
Result | Description |
---|---|
retval | MPI function call return value |
rank | 32-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: ¶
Operand | Description |
---|---|
val | MPI function call return value |
Results: ¶
Result | Description |
---|---|
errclass | MPI function call return value |
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: ¶
Result | Description |
---|---|
retval | MPI function call return value |
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: ¶
Result | Description |
---|---|
retval | MPI function call return value |
mpi.recv
(mpi::RecvOp) ¶
Equivalent to MPI_Recv(ptr, size, dtype, dest, tag, MPI_COMM_WORLD, MPI_STATUS_IGNORE)
Syntax:
operation ::= `mpi.recv` `(` $ref `,` $tag `,` $rank `)` attr-dict `:` type($ref) `,` type($tag) `,` type($rank)(`->` type($retval)^)?
MPI_Recv performs a 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 supprted 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: ¶
Operand | Description |
---|---|
ref | memref of any type values |
tag | 32-bit signless integer |
rank | 32-bit signless integer |
Results: ¶
Result | Description |
---|---|
retval | MPI function call return value |
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: ¶
Attribute | MLIR Type | Description |
---|---|---|
errclass | ::mlir::mpi::MPI_ErrorClassEnumAttr | MPI error class nameEnum cases:
|
Operands: ¶
Operand | Description |
---|---|
val | MPI function call return value |
Results: ¶
Result | Description |
---|---|
res | 1-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 `,` $rank `)` attr-dict `:` type($ref) `,` type($tag) `,` type($rank)(`->` 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 supprted for now.
This operation can optionally return an !mpi.retval
value that can be used
to check for errors.
Operands: ¶
Operand | Description |
---|---|
ref | memref of any type values |
tag | 32-bit signless integer |
rank | 32-bit signless integer |
Results: ¶
Result | Description |
---|---|
retval | MPI function call return value |
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: ¶
Parameter | C++ type | Description |
---|---|---|
value | ::mlir::mpi::MPI_ErrorClassEnum | an enum of type MPI_ErrorClassEnum |
Types ¶
RetvalType ¶
MPI function call return value
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.
Enums ¶
MPI_ErrorClassEnum ¶
MPI error class name
Cases: ¶
Symbol | Value | String |
---|---|---|
MPI_SUCCESS | 0 | MPI_SUCCESS |
MPI_ERR_ACCESS | 1 | MPI_ERR_ACCESS |
MPI_ERR_AMODE | 2 | MPI_ERR_AMODE |
MPI_ERR_ARG | 3 | MPI_ERR_ARG |
MPI_ERR_ASSERT | 4 | MPI_ERR_ASSERT |
MPI_ERR_BAD_FILE | 5 | MPI_ERR_BAD_FILE |
MPI_ERR_BASE | 6 | MPI_ERR_BASE |
MPI_ERR_BUFFER | 7 | MPI_ERR_BUFFER |
MPI_ERR_COMM | 8 | MPI_ERR_COMM |
MPI_ERR_CONVERSION | 9 | MPI_ERR_CONVERSION |
MPI_ERR_COUNT | 10 | MPI_ERR_COUNT |
MPI_ERR_DIMS | 11 | MPI_ERR_DIMS |
MPI_ERR_DISP | 12 | MPI_ERR_DISP |
MPI_ERR_DUP_DATAREP | 13 | MPI_ERR_DUP_DATAREP |
MPI_ERR_ERRHANDLER | 14 | MPI_ERR_ERRHANDLER |
MPI_ERR_FILE | 15 | MPI_ERR_FILE |
MPI_ERR_FILE_EXISTS | 16 | MPI_ERR_FILE_EXISTS |
MPI_ERR_FILE_IN_USE | 17 | MPI_ERR_FILE_IN_USE |
MPI_ERR_GROUP | 18 | MPI_ERR_GROUP |
MPI_ERR_INFO | 19 | MPI_ERR_INFO |
MPI_ERR_INFO_KEY | 20 | MPI_ERR_INFO_KEY |
MPI_ERR_INFO_NOKEY | 21 | MPI_ERR_INFO_NOKEY |
MPI_ERR_INFO_VALUE | 22 | MPI_ERR_INFO_VALUE |
MPI_ERR_IN_STATUS | 23 | MPI_ERR_IN_STATUS |
MPI_ERR_INTERN | 24 | MPI_ERR_INTERN |
MPI_ERR_IO | 25 | MPI_ERR_IO |
MPI_ERR_KEYVAL | 26 | MPI_ERR_KEYVAL |
MPI_ERR_LOCKTYPE | 27 | MPI_ERR_LOCKTYPE |
MPI_ERR_NAME | 28 | MPI_ERR_NAME |
MPI_ERR_NO_MEM | 29 | MPI_ERR_NO_MEM |
MPI_ERR_NO_SPACE | 30 | MPI_ERR_NO_SPACE |
MPI_ERR_NO_SUCH_FILE | 31 | MPI_ERR_NO_SUCH_FILE |
MPI_ERR_NOT_SAME | 32 | MPI_ERR_NOT_SAME |
MPI_ERR_OP | 33 | MPI_ERR_OP |
MPI_ERR_OTHER | 34 | MPI_ERR_OTHER |
MPI_ERR_PENDING | 35 | MPI_ERR_PENDING |
MPI_ERR_PORT | 36 | MPI_ERR_PORT |
MPI_ERR_PROC_ABORTED | 37 | MPI_ERR_PROC_ABORTED |
MPI_ERR_QUOTA | 38 | MPI_ERR_QUOTA |
MPI_ERR_RANK | 39 | MPI_ERR_RANK |
MPI_ERR_READ_ONLY | 40 | MPI_ERR_READ_ONLY |
MPI_ERR_REQUEST | 41 | MPI_ERR_REQUEST |
MPI_ERR_RMA_ATTACH | 42 | MPI_ERR_RMA_ATTACH |
MPI_ERR_RMA_CONFLICT | 43 | MPI_ERR_RMA_CONFLICT |
MPI_ERR_RMA_FLAVOR | 44 | MPI_ERR_RMA_FLAVOR |
MPI_ERR_RMA_RANGE | 45 | MPI_ERR_RMA_RANGE |
MPI_ERR_RMA_SHARED | 46 | MPI_ERR_RMA_SHARED |
MPI_ERR_RMA_SYNC | 47 | MPI_ERR_RMA_SYNC |
MPI_ERR_ROOT | 48 | MPI_ERR_ROOT |
MPI_ERR_SERVICE | 49 | MPI_ERR_SERVICE |
MPI_ERR_SESSION | 50 | MPI_ERR_SESSION |
MPI_ERR_SIZE | 51 | MPI_ERR_SIZE |
MPI_ERR_SPAWN | 52 | MPI_ERR_SPAWN |
MPI_ERR_TAG | 53 | MPI_ERR_TAG |
MPI_ERR_TOPOLOGY | 54 | MPI_ERR_TOPOLOGY |
MPI_ERR_TRUNCATE | 55 | MPI_ERR_TRUNCATE |
MPI_ERR_TYPE | 56 | MPI_ERR_TYPE |
MPI_ERR_UNKNOWN | 57 | MPI_ERR_UNKNOWN |
MPI_ERR_UNSUPPORTED_DATAREP | 58 | MPI_ERR_UNSUPPORTED_DATAREP |
MPI_ERR_UNSUPPORTED_OPERATION | 59 | MPI_ERR_UNSUPPORTED_OPERATION |
MPI_ERR_VALUE_TOO_LARGE | 60 | MPI_ERR_VALUE_TOO_LARGE |
MPI_ERR_WIN | 61 | MPI_ERR_WIN |
MPI_ERR_LASTCODE | 62 | MPI_ERR_LASTCODE |