Skip to content

Commit 10c3699

Browse files
committed
[mlir] Initial patch to add an MPI dialect
1 parent 9efdccb commit 10c3699

File tree

14 files changed

+643
-0
lines changed

14 files changed

+643
-0
lines changed

Diff for: mlir/include/mlir/Dialect/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ add_subdirectory(Math)
2121
add_subdirectory(MemRef)
2222
add_subdirectory(Mesh)
2323
add_subdirectory(MLProgram)
24+
add_subdirectory(MPI)
2425
add_subdirectory(NVGPU)
2526
add_subdirectory(OpenACC)
2627
add_subdirectory(OpenACCMPCommon)

Diff for: mlir/include/mlir/Dialect/MPI/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
add_subdirectory(IR)

Diff for: mlir/include/mlir/Dialect/MPI/IR/CMakeLists.txt

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
add_mlir_dialect(MPI mpi)
2+
add_mlir_doc(MPIOps MPI Dialects/ -gen-dialect-doc)
3+
4+
# Add MPI operations
5+
set(LLVM_TARGET_DEFINITIONS MPIOps.td)
6+
mlir_tablegen(MPIOps.h.inc -gen-op-decls)
7+
mlir_tablegen(MPIOps.cpp.inc -gen-op-defs)
8+
add_public_tablegen_target(MLIRMPIOpsIncGen)
9+
10+
# Add MPI types
11+
set(LLVM_TARGET_DEFINITIONS MPITypes.td)
12+
mlir_tablegen(MPITypesGen.h.inc -gen-typedef-decls)
13+
mlir_tablegen(MPITypesGen.cpp.inc -gen-typedef-defs)
14+
add_public_tablegen_target(MLIRMPITypesIncGen)
15+
16+
# Add MPI attributes
17+
set(LLVM_TARGET_DEFINITIONS MPI.td)
18+
mlir_tablegen(MPIEnums.h.inc -gen-enum-decls)
19+
mlir_tablegen(MPIEnums.cpp.inc -gen-enum-defs)
20+
mlir_tablegen(MPIAttrDefs.h.inc -gen-attrdef-decls)
21+
mlir_tablegen(MPIAttrDefs.cpp.inc -gen-attrdef-defs)
22+
add_public_tablegen_target(MLIRMPIAttrsIncGen)

Diff for: mlir/include/mlir/Dialect/MPI/IR/MPI.h

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//===- MPI.h - MPI dialect ----------------------------------------*- C++-*-==//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
#ifndef MLIR_DIALECT_MPI_IR_MPI_H_
9+
#define MLIR_DIALECT_MPI_IR_MPI_H_
10+
11+
#include "mlir/Bytecode/BytecodeOpInterface.h"
12+
#include "mlir/IR/Dialect.h"
13+
#include "mlir/IR/OpDefinition.h"
14+
#include "mlir/IR/OpImplementation.h"
15+
16+
//===----------------------------------------------------------------------===//
17+
// MPIDialect
18+
//===----------------------------------------------------------------------===//
19+
20+
#include "mlir/Dialect/MPI/IR/MPIDialect.h.inc"
21+
22+
#define GET_TYPEDEF_CLASSES
23+
#include "mlir/Dialect/MPI/IR/MPITypesGen.h.inc"
24+
25+
#include "mlir/Dialect/MPI/IR/MPIEnums.h.inc"
26+
27+
#define GET_ATTRDEF_CLASSES
28+
#include "mlir/Dialect/MPI/IR/MPIAttrDefs.h.inc"
29+
30+
#define GET_OP_CLASSES
31+
#include "mlir/Dialect/MPI/IR/MPIOps.h.inc"
32+
33+
#endif // MLIR_DIALECT_MPI_IR_MPI_H_

Diff for: mlir/include/mlir/Dialect/MPI/IR/MPI.td

+219
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
//===- MPI.td - Base defs for mpi dialect ------------------*- tablegen -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef MLIR_DIALECT_MPI_IR_MPI_TD
10+
#define MLIR_DIALECT_MPI_IR_MPI_TD
11+
12+
include "mlir/IR/AttrTypeBase.td"
13+
include "mlir/IR/OpBase.td"
14+
include "mlir/IR/EnumAttr.td"
15+
16+
def MPI_Dialect : Dialect {
17+
let name = "mpi";
18+
let cppNamespace = "::mlir::mpi";
19+
let description = [{
20+
This dialect models the Message Passing Interface (MPI), version
21+
4.0. It is meant to serve as an interfacing dialect that is targeted
22+
by higher-level dialects. The MPI dialect itself can be lowered to
23+
multiple MPI implementations and hide differences in ABI. The dialect
24+
models the functions of the MPI specification as close to 1:1 as possible
25+
while preserving SSA value semantics where it makes sense, and uses
26+
`memref` types instead of bare pointers.
27+
28+
This dialect is under active development, and while stability is an
29+
eventual goal, it is not guaranteed at this juncture. Given the early
30+
state, it is recommended to inquire further prior to using this dialect.
31+
32+
For an in-depth documentation of the MPI library interface, please refer
33+
to official documentation such as the
34+
[OpenMPI online documentation](https://www.open-mpi.org/doc/current/).
35+
}];
36+
37+
let usePropertiesForAttributes = 1;
38+
let useDefaultAttributePrinterParser = 1;
39+
let useDefaultTypePrinterParser = 1;
40+
}
41+
42+
//===----------------------------------------------------------------------===//
43+
// Error classes enum:
44+
//===----------------------------------------------------------------------===//
45+
46+
def MPI_CodeSuccess : I32EnumAttrCase<"MPI_SUCCESS", 0, "MPI_SUCCESS">;
47+
def MPI_CodeErrAccess : I32EnumAttrCase<"MPI_ERR_ACCESS", 1, "MPI_ERR_ACCESS">;
48+
def MPI_CodeErrAmode : I32EnumAttrCase<"MPI_ERR_AMODE", 2, "MPI_ERR_AMODE">;
49+
def MPI_CodeErrArg : I32EnumAttrCase<"MPI_ERR_ARG", 3, "MPI_ERR_ARG">;
50+
def MPI_CodeErrAssert : I32EnumAttrCase<"MPI_ERR_ASSERT", 4, "MPI_ERR_ASSERT">;
51+
def MPI_CodeErrBadFile
52+
: I32EnumAttrCase<"MPI_ERR_BAD_FILE", 5, "MPI_ERR_BAD_FILE">;
53+
def MPI_CodeErrBase : I32EnumAttrCase<"MPI_ERR_BASE", 6, "MPI_ERR_BASE">;
54+
def MPI_CodeErrBuffer : I32EnumAttrCase<"MPI_ERR_BUFFER", 7, "MPI_ERR_BUFFER">;
55+
def MPI_CodeErrComm : I32EnumAttrCase<"MPI_ERR_COMM", 8, "MPI_ERR_COMM">;
56+
def MPI_CodeErrConversion
57+
: I32EnumAttrCase<"MPI_ERR_CONVERSION", 9, "MPI_ERR_CONVERSION">;
58+
def MPI_CodeErrCount : I32EnumAttrCase<"MPI_ERR_COUNT", 10, "MPI_ERR_COUNT">;
59+
def MPI_CodeErrDims : I32EnumAttrCase<"MPI_ERR_DIMS", 11, "MPI_ERR_DIMS">;
60+
def MPI_CodeErrDisp : I32EnumAttrCase<"MPI_ERR_DISP", 12, "MPI_ERR_DISP">;
61+
def MPI_CodeErrDupDatarep
62+
: I32EnumAttrCase<"MPI_ERR_DUP_DATAREP", 13, "MPI_ERR_DUP_DATAREP">;
63+
def MPI_CodeErrErrhandler
64+
: I32EnumAttrCase<"MPI_ERR_ERRHANDLER", 14, "MPI_ERR_ERRHANDLER">;
65+
def MPI_CodeErrFile : I32EnumAttrCase<"MPI_ERR_FILE", 15, "MPI_ERR_FILE">;
66+
def MPI_CodeErrFileExists
67+
: I32EnumAttrCase<"MPI_ERR_FILE_EXISTS", 16, "MPI_ERR_FILE_EXISTS">;
68+
def MPI_CodeErrFileInUse
69+
: I32EnumAttrCase<"MPI_ERR_FILE_IN_USE", 17, "MPI_ERR_FILE_IN_USE">;
70+
def MPI_CodeErrGroup : I32EnumAttrCase<"MPI_ERR_GROUP", 18, "MPI_ERR_GROUP">;
71+
def MPI_CodeErrInfo : I32EnumAttrCase<"MPI_ERR_INFO", 19, "MPI_ERR_INFO">;
72+
def MPI_CodeErrInfoKey
73+
: I32EnumAttrCase<"MPI_ERR_INFO_KEY", 20, "MPI_ERR_INFO_KEY">;
74+
def MPI_CodeErrInfoNokey
75+
: I32EnumAttrCase<"MPI_ERR_INFO_NOKEY", 21, "MPI_ERR_INFO_NOKEY">;
76+
def MPI_CodeErrInfoValue
77+
: I32EnumAttrCase<"MPI_ERR_INFO_VALUE", 22, "MPI_ERR_INFO_VALUE">;
78+
def MPI_CodeErrInStatus
79+
: I32EnumAttrCase<"MPI_ERR_IN_STATUS", 23, "MPI_ERR_IN_STATUS">;
80+
def MPI_CodeErrIntern : I32EnumAttrCase<"MPI_ERR_INTERN", 24, "MPI_ERR_INTERN">;
81+
def MPI_CodeErrIo : I32EnumAttrCase<"MPI_ERR_IO", 25, "MPI_ERR_IO">;
82+
def MPI_CodeErrKeyval : I32EnumAttrCase<"MPI_ERR_KEYVAL", 26, "MPI_ERR_KEYVAL">;
83+
def MPI_CodeErrLocktype
84+
: I32EnumAttrCase<"MPI_ERR_LOCKTYPE", 27, "MPI_ERR_LOCKTYPE">;
85+
def MPI_CodeErrName : I32EnumAttrCase<"MPI_ERR_NAME", 28, "MPI_ERR_NAME">;
86+
def MPI_CodeErrNoMem : I32EnumAttrCase<"MPI_ERR_NO_MEM", 29, "MPI_ERR_NO_MEM">;
87+
def MPI_CodeErrNoSpace
88+
: I32EnumAttrCase<"MPI_ERR_NO_SPACE", 30, "MPI_ERR_NO_SPACE">;
89+
def MPI_CodeErrNoSuchFile
90+
: I32EnumAttrCase<"MPI_ERR_NO_SUCH_FILE", 31, "MPI_ERR_NO_SUCH_FILE">;
91+
def MPI_CodeErrNotSame
92+
: I32EnumAttrCase<"MPI_ERR_NOT_SAME", 32, "MPI_ERR_NOT_SAME">;
93+
def MPI_CodeErrOp : I32EnumAttrCase<"MPI_ERR_OP", 33, "MPI_ERR_OP">;
94+
def MPI_CodeErrOther : I32EnumAttrCase<"MPI_ERR_OTHER", 34, "MPI_ERR_OTHER">;
95+
def MPI_CodeErrPending
96+
: I32EnumAttrCase<"MPI_ERR_PENDING", 35, "MPI_ERR_PENDING">;
97+
def MPI_CodeErrPort : I32EnumAttrCase<"MPI_ERR_PORT", 36, "MPI_ERR_PORT">;
98+
def MPI_CodeErrProcAborted
99+
: I32EnumAttrCase<"MPI_ERR_PROC_ABORTED", 37, "MPI_ERR_PROC_ABORTED">;
100+
def MPI_CodeErrQuota : I32EnumAttrCase<"MPI_ERR_QUOTA", 38, "MPI_ERR_QUOTA">;
101+
def MPI_CodeErrRank : I32EnumAttrCase<"MPI_ERR_RANK", 39, "MPI_ERR_RANK">;
102+
def MPI_CodeErrReadOnly
103+
: I32EnumAttrCase<"MPI_ERR_READ_ONLY", 40, "MPI_ERR_READ_ONLY">;
104+
def MPI_CodeErrRequest
105+
: I32EnumAttrCase<"MPI_ERR_REQUEST", 41, "MPI_ERR_REQUEST">;
106+
def MPI_CodeErrRmaAttach
107+
: I32EnumAttrCase<"MPI_ERR_RMA_ATTACH", 42, "MPI_ERR_RMA_ATTACH">;
108+
def MPI_CodeErrRmaConflict
109+
: I32EnumAttrCase<"MPI_ERR_RMA_CONFLICT", 43, "MPI_ERR_RMA_CONFLICT">;
110+
def MPI_CodeErrRmaFlavor
111+
: I32EnumAttrCase<"MPI_ERR_RMA_FLAVOR", 44, "MPI_ERR_RMA_FLAVOR">;
112+
def MPI_CodeErrRmaRange
113+
: I32EnumAttrCase<"MPI_ERR_RMA_RANGE", 45, "MPI_ERR_RMA_RANGE">;
114+
def MPI_CodeErrRmaShared
115+
: I32EnumAttrCase<"MPI_ERR_RMA_SHARED", 46, "MPI_ERR_RMA_SHARED">;
116+
def MPI_CodeErrRmaSync
117+
: I32EnumAttrCase<"MPI_ERR_RMA_SYNC", 47, "MPI_ERR_RMA_SYNC">;
118+
def MPI_CodeErrRoot : I32EnumAttrCase<"MPI_ERR_ROOT", 48, "MPI_ERR_ROOT">;
119+
def MPI_CodeErrService
120+
: I32EnumAttrCase<"MPI_ERR_SERVICE", 49, "MPI_ERR_SERVICE">;
121+
def MPI_CodeErrSession
122+
: I32EnumAttrCase<"MPI_ERR_SESSION", 50, "MPI_ERR_SESSION">;
123+
def MPI_CodeErrSize : I32EnumAttrCase<"MPI_ERR_SIZE", 51, "MPI_ERR_SIZE">;
124+
def MPI_CodeErrSpawn : I32EnumAttrCase<"MPI_ERR_SPAWN", 52, "MPI_ERR_SPAWN">;
125+
def MPI_CodeErrTag : I32EnumAttrCase<"MPI_ERR_TAG", 53, "MPI_ERR_TAG">;
126+
def MPI_CodeErrTopology
127+
: I32EnumAttrCase<"MPI_ERR_TOPOLOGY", 54, "MPI_ERR_TOPOLOGY">;
128+
def MPI_CodeErrTruncate
129+
: I32EnumAttrCase<"MPI_ERR_TRUNCATE", 55, "MPI_ERR_TRUNCATE">;
130+
def MPI_CodeErrType : I32EnumAttrCase<"MPI_ERR_TYPE", 56, "MPI_ERR_TYPE">;
131+
def MPI_CodeErrUnknown
132+
: I32EnumAttrCase<"MPI_ERR_UNKNOWN", 57, "MPI_ERR_UNKNOWN">;
133+
def MPI_CodeErrUnsupportedDatarep
134+
: I32EnumAttrCase<"MPI_ERR_UNSUPPORTED_DATAREP", 58,
135+
"MPI_ERR_UNSUPPORTED_DATAREP">;
136+
def MPI_CodeErrUnsupportedOperation
137+
: I32EnumAttrCase<"MPI_ERR_UNSUPPORTED_OPERATION", 59,
138+
"MPI_ERR_UNSUPPORTED_OPERATION">;
139+
def MPI_CodeErrValueTooLarge
140+
: I32EnumAttrCase<"MPI_ERR_VALUE_TOO_LARGE", 60, "MPI_ERR_VALUE_TOO_LARGE">;
141+
def MPI_CodeErrWin : I32EnumAttrCase<"MPI_ERR_WIN", 61, "MPI_ERR_WIN">;
142+
def MPI_CodeErrLastcode
143+
: I32EnumAttrCase<"MPI_ERR_LASTCODE", 62, "MPI_ERR_LASTCODE">;
144+
145+
def MPI_ErrorClassEnum
146+
: I32EnumAttr<"MPI_ErrorClassEnum", "MPI error class name", [
147+
MPI_CodeSuccess,
148+
MPI_CodeErrAccess,
149+
MPI_CodeErrAmode,
150+
MPI_CodeErrArg,
151+
MPI_CodeErrAssert,
152+
MPI_CodeErrBadFile,
153+
MPI_CodeErrBase,
154+
MPI_CodeErrBuffer,
155+
MPI_CodeErrComm,
156+
MPI_CodeErrConversion,
157+
MPI_CodeErrCount,
158+
MPI_CodeErrDims,
159+
MPI_CodeErrDisp,
160+
MPI_CodeErrDupDatarep,
161+
MPI_CodeErrErrhandler,
162+
MPI_CodeErrFile,
163+
MPI_CodeErrFileExists,
164+
MPI_CodeErrFileInUse,
165+
MPI_CodeErrGroup,
166+
MPI_CodeErrInfo,
167+
MPI_CodeErrInfoKey,
168+
MPI_CodeErrInfoNokey,
169+
MPI_CodeErrInfoValue,
170+
MPI_CodeErrInStatus,
171+
MPI_CodeErrIntern,
172+
MPI_CodeErrIo,
173+
MPI_CodeErrKeyval,
174+
MPI_CodeErrLocktype,
175+
MPI_CodeErrName,
176+
MPI_CodeErrNoMem,
177+
MPI_CodeErrNoSpace,
178+
MPI_CodeErrNoSuchFile,
179+
MPI_CodeErrNotSame,
180+
MPI_CodeErrOp,
181+
MPI_CodeErrOther,
182+
MPI_CodeErrPending,
183+
MPI_CodeErrPort,
184+
MPI_CodeErrProcAborted,
185+
MPI_CodeErrQuota,
186+
MPI_CodeErrRank,
187+
MPI_CodeErrReadOnly,
188+
MPI_CodeErrRequest,
189+
MPI_CodeErrRmaAttach,
190+
MPI_CodeErrRmaConflict,
191+
MPI_CodeErrRmaFlavor,
192+
MPI_CodeErrRmaRange,
193+
MPI_CodeErrRmaShared,
194+
MPI_CodeErrRmaSync,
195+
MPI_CodeErrRoot,
196+
MPI_CodeErrService,
197+
MPI_CodeErrSession,
198+
MPI_CodeErrSize,
199+
MPI_CodeErrSpawn,
200+
MPI_CodeErrTag,
201+
MPI_CodeErrTopology,
202+
MPI_CodeErrTruncate,
203+
MPI_CodeErrType,
204+
MPI_CodeErrUnknown,
205+
MPI_CodeErrUnsupportedDatarep,
206+
MPI_CodeErrUnsupportedOperation,
207+
MPI_CodeErrValueTooLarge,
208+
MPI_CodeErrWin,
209+
MPI_CodeErrLastcode
210+
]> {
211+
let genSpecializedAttr = 0;
212+
let cppNamespace = "::mlir::mpi";
213+
}
214+
215+
def MPI_ErrorClassAttr : EnumAttr<MPI_Dialect, MPI_ErrorClassEnum, "errclass"> {
216+
let assemblyFormat = "`<` $value `>`";
217+
}
218+
219+
#endif // MLIR_DIALECT_MPI_IR_MPI_TD

0 commit comments

Comments
 (0)