Skip to content

Commit f846435

Browse files
[SYCLomatic] Added migration support for 20 nvSHMEM API (#2626)
1 parent 6f1e8ce commit f846435

15 files changed

+568
-39
lines changed

clang/lib/DPCT/ASTTraversal.cpp

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,28 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "ASTTraversal.h"
10-
#include "RulesLang/RulesLang.h"
1110
#include "AnalysisInfo.h"
11+
#include "CodePin/GenCodePinHeader.h"
12+
#include "MigrationRuleManager.h"
1213
#include "RulesAsm/AsmMigration.h"
14+
#include "RulesCCL/NCCLAPIMigration.h"
1315
#include "RulesDNN/DNNAPIMigration.h"
16+
#include "RulesLang/OptimizeMigration.h"
17+
#include "RulesLang/RulesLang.h"
18+
#include "RulesLang/WMMAAPIMigration.h"
19+
#include "RulesLangLib/LIBCUAPIMigration.h"
20+
#include "RulesLangLib/NvtxAPIMigration.h"
21+
#include "RulesLangLib/ThrustAPIMigration.h"
22+
#include "RulesMathLib/BLASAPIMigration.h"
1423
#include "RulesMathLib/FFTAPIMigration.h"
1524
#include "RulesMathLib/RandomAPIMigration.h"
1625
#include "RulesMathLib/SolverAPIMigration.h"
17-
#include "RulesMathLib/BLASAPIMigration.h"
18-
#include "CodePin/GenCodePinHeader.h"
26+
#include "RulesMathLib/SpBLASAPIMigration.h"
27+
#include "RulesSHMEM/NVSHMEMAPIMigration.h"
1928
#include "RulesSecurity/Homoglyph.h"
20-
#include "RulesLangLib/LIBCUAPIMigration.h"
21-
#include "RulesLangLib/NvtxAPIMigration.h"
22-
#include "MigrationRuleManager.h"
2329
#include "RulesSecurity/MisleadingBidirectional.h"
24-
#include "RulesCCL/NCCLAPIMigration.h"
25-
#include "RulesLang/OptimizeMigration.h"
26-
#include "RulesMathLib/SpBLASAPIMigration.h"
2730
#include "TextModification.h"
28-
#include "RulesLangLib/ThrustAPIMigration.h"
2931
#include "Utility.h"
30-
#include "RulesLang/WMMAAPIMigration.h"
3132

3233
#include <string>
3334
#include <unordered_map>
@@ -160,32 +161,41 @@ REGISTER_RULE(GraphicsInteropRule, PassKind::PK_Migration)
160161
REGISTER_RULE(RulesLangAddrSpaceConvRule, PassKind::PK_Migration)
161162

162163
REGISTER_RULE(BLASEnumsRule, PassKind::PK_Migration, RuleGroupKind::RK_BLas)
163-
REGISTER_RULE(BLASFunctionCallRule, PassKind::PK_Migration,RuleGroupKind::RK_BLas)
164+
REGISTER_RULE(BLASFunctionCallRule, PassKind::PK_Migration,
165+
RuleGroupKind::RK_BLas)
164166

165167
REGISTER_RULE(SPBLASEnumsRule, PassKind::PK_Migration, RuleGroupKind::RK_Sparse)
166-
REGISTER_RULE(SPBLASFunctionCallRule, PassKind::PK_Migration,RuleGroupKind::RK_Sparse)
168+
REGISTER_RULE(SPBLASFunctionCallRule, PassKind::PK_Migration,
169+
RuleGroupKind::RK_Sparse)
167170

168171
REGISTER_RULE(RandomEnumsRule, PassKind::PK_Migration, RuleGroupKind::RK_Rng)
169-
REGISTER_RULE(RandomFunctionCallRule, PassKind::PK_Migration,RuleGroupKind::RK_Rng)
170-
REGISTER_RULE(DeviceRandomFunctionCallRule, PassKind::PK_Migration,RuleGroupKind::RK_Rng)
172+
REGISTER_RULE(RandomFunctionCallRule, PassKind::PK_Migration,
173+
RuleGroupKind::RK_Rng)
174+
REGISTER_RULE(DeviceRandomFunctionCallRule, PassKind::PK_Migration,
175+
RuleGroupKind::RK_Rng)
171176

172177
REGISTER_RULE(SOLVEREnumsRule, PassKind::PK_Migration, RuleGroupKind::RK_Solver)
173-
REGISTER_RULE(SOLVERFunctionCallRule, PassKind::PK_Migration,RuleGroupKind::RK_Solver)
178+
REGISTER_RULE(SOLVERFunctionCallRule, PassKind::PK_Migration,
179+
RuleGroupKind::RK_Solver)
174180

175181
REGISTER_RULE(LIBCURule, PassKind::PK_Migration, RuleGroupKind::RK_Libcu)
176182
REGISTER_RULE(NvtxRule, PassKind::PK_Migration)
177183

178184
REGISTER_RULE(ThrustAPIRule, PassKind::PK_Migration, RuleGroupKind::RK_Thrust)
179185
REGISTER_RULE(ThrustTypeRule, PassKind::PK_Migration, RuleGroupKind::RK_Thrust)
180186

181-
REGISTER_RULE(ManualMigrateEnumsRule, PassKind::PK_Migration, RuleGroupKind::RK_NCCL)
187+
REGISTER_RULE(ManualMigrateEnumsRule, PassKind::PK_Migration,
188+
RuleGroupKind::RK_NCCL)
182189
REGISTER_RULE(NCCLRule, PassKind::PK_Migration, RuleGroupKind::RK_NCCL)
183190

184191
REGISTER_RULE(FFTEnumsRule, PassKind::PK_Migration, RuleGroupKind::RK_FFT)
185-
REGISTER_RULE(FFTFunctionCallRule, PassKind::PK_Migration,RuleGroupKind::RK_FFT)
192+
REGISTER_RULE(FFTFunctionCallRule, PassKind::PK_Migration,
193+
RuleGroupKind::RK_FFT)
186194

187195
REGISTER_RULE(CuDNNTypeRule, PassKind::PK_Migration, RuleGroupKind::RK_DNN)
188196
REGISTER_RULE(CuDNNAPIRule, PassKind::PK_Migration, RuleGroupKind::RK_DNN)
189197

198+
REGISTER_RULE(NVSHMEMRule, PassKind::PK_Migration, RuleGroupKind::RK_NVSHMEM)
199+
190200
} // namespace dpct
191-
} // namespace clang
201+
} // namespace clang

clang/lib/DPCT/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ add_clang_library(DPCT
202202
RulesLang/CallExprRewriterEvent.cpp
203203
RulesLang/CallExprRewriterCG.cpp
204204
RulesLang/CallExprRewriterWmma.cpp
205+
RulesSHMEM/CallExprRewriterNvshmem.cpp
205206
ErrorHandle/CrashRecovery.cpp
206207
Diagnostics/Diagnostics.cpp
207208
ErrorHandle/Error.cpp
@@ -240,6 +241,7 @@ add_clang_library(DPCT
240241
RulesDNN/DNNAPIMigration.cpp
241242
RulesCCL/NCCLAPIMigration.cpp
242243
RuleInfra/TypeLocRewriters.cpp
244+
RulesSHMEM/NVSHMEMAPIMigration.cpp
243245
Linux/AutoComplete.cpp
244246
RulesAsm/AsmMigration.cpp
245247
QueryAPIMapping/QueryAPIMapping.cpp

clang/lib/DPCT/MigrationReport/Libraries.inc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,7 @@ LIBRARY(DNN, "oneAPI Deep Neural Network Library (oneDNN)",
1515
LIBRARY(CCL, "oneAPI Collective Communications Library (oneCCL)",
1616
RuleGroupKind::RK_NCCL)
1717

18-
#undef LIBRARY
18+
LIBRARY(SHMEM, "Intel Shared Memory Library (iSHMEM)",
19+
RuleGroupKind::RK_NVSHMEM)
20+
21+
#undef LIBRARY

clang/lib/DPCT/RuleInfra/CallExprRewriter.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ void CallExprRewriterFactoryBase::initRewriterMap() {
161161
initRewriterMapMemory();
162162
initRewriterMapMisc();
163163
initRewriterMapNccl();
164+
initRewriterMapNvshmem();
164165
initRewriterMapStream();
165166
initRewriterMapTexture();
166167
initRewriterMapThrust();

clang/lib/DPCT/RuleInfra/CallExprRewriter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class CallExprRewriterFactoryBase {
6969
static void initRewriterMapMemory();
7070
static void initRewriterMapMisc();
7171
static void initRewriterMapNccl();
72+
static void initRewriterMapNvshmem();
7273
static void initRewriterMapStream();
7374
static void initRewriterMapTexture();
7475
static void initRewriterMapThrust();

clang/lib/DPCT/RuleInfra/MapNames.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,6 +907,11 @@ void MapNames::setExplicitNamespaceMap(
907907
{"cudaExternalSemaphoreHandleType",
908908
std::make_shared<TypeNameRule>(getExpNamespace() +
909909
"external_semaphore_handle_type")},
910+
{"nvshmem_team_t", std::make_shared<TypeNameRule>("ishmem_team_t")},
911+
{"nvshmem_team_config_t",
912+
std::make_shared<TypeNameRule>("ishmem_team_config_t")},
913+
{"nvshmemx_init_attr_t",
914+
std::make_shared<TypeNameRule>("ishmemx_attr_t")},
910915
// ...
911916
};
912917
// SYCLcompat unsupport types
@@ -1596,6 +1601,16 @@ void MapNames::setExplicitNamespaceMap(
15961601
? getExpNamespace() +
15971602
"external_semaphore_handle_type::win32_nt_dx12_fence"
15981603
: "cudaExternalSemaphoreHandleTypeD3D12Fence")},
1604+
{"NVSHMEM_TEAM_WORLD",
1605+
std::make_shared<EnumNameRule>("ISHMEM_TEAM_WORLD")},
1606+
{"NVSHMEM_TEAM_SHARED",
1607+
std::make_shared<EnumNameRule>("ISHMEM_TEAM_SHARED")},
1608+
{"NVSHMEM_TEAM_INVALID",
1609+
std::make_shared<EnumNameRule>("ISHMEM_TEAM_INVALID")},
1610+
{"NVSHMEMX_INIT_WITH_MPI_COMM",
1611+
std::make_shared<EnumNameRule>("ISHMEMX_RUNTIME_MPI")},
1612+
{"NVSHMEMX_INIT_WITH_SHMEM",
1613+
std::make_shared<EnumNameRule>("ISHMEMX_RUNTIME_OPENSHMEM")},
15991614
// ...
16001615
};
16011616

clang/lib/DPCT/RulesInclude/HeaderTypes.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ STD_HEADER(DL, "<libloaderapi.h>")
5050
#else
5151
STD_HEADER(DL, "<dlfcn.h>")
5252
#endif
53+
STD_HEADER(SHMEM, "<ishmem.h>")
54+
STD_HEADER(SHMEMX, "<ishmemx.h>")
5355

5456
ONEDPL_HEADER(Algorithm, "<oneapi/dpl/algorithm>")
5557
ONEDPL_HEADER(Execution, "<oneapi/dpl/execution>")

clang/lib/DPCT/RulesInclude/InclusionHeaders.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ enum class RuleGroupKind : uint8_t {
3535
RK_Thrust,
3636
RK_CUB,
3737
RK_WMMA,
38+
RK_NVSHMEM,
3839
NUM
3940
};
4041

clang/lib/DPCT/RulesInclude/InclusionHeaders.inc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,8 @@ REGIST_INCLUSION("cuda_rutime.h", FullMatch, Libcu, Remove, true)
107107

108108
REGIST_INCLUSION("cublasLt.h", FullMatch, BLas, Replace, false,
109109
HeaderType::HT_DPCT_BLAS_GEMM_Utils)
110+
111+
REGIST_INCLUSION("nvshmem.h", FullMatch, NVSHMEM, Replace, false,
112+
HeaderType::HT_SHMEM)
113+
REGIST_INCLUSION("nvshmemx.h", FullMatch, NVSHMEM, Replace, false,
114+
HeaderType::HT_SHMEMX)
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
//===------------------------ APINamesNvshmem.inc -------------------------===//
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+
// Library Setup, Exit & Query
10+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
11+
CALL_FACTORY_ENTRY("nvshmem_init", CALL("ishmem_init")))
12+
13+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
14+
CALL_FACTORY_ENTRY("nvshmemx_init_attr",
15+
CALL("ishmemx_init_attr", ARG(1))))
16+
17+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
18+
CALL_FACTORY_ENTRY("nvshmem_my_pe",
19+
CALL("ishmem_my_pe")))
20+
21+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
22+
CALL_FACTORY_ENTRY("nvshmem_n_pes",
23+
CALL("ishmem_n_pes")))
24+
25+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
26+
CALL_FACTORY_ENTRY("nvshmem_finalize",
27+
CALL("ishmem_finalize")))
28+
29+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
30+
CALL_FACTORY_ENTRY("nvshmem_ptr",
31+
CALL("ishmem_ptr", ARG(0), ARG(1))))
32+
33+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
34+
CALL_FACTORY_ENTRY("nvshmem_info_get_version",
35+
CALL("ishmem_info_get_version",
36+
ARG(0), ARG(1))))
37+
38+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
39+
CALL_FACTORY_ENTRY("nvshmem_info_get_name",
40+
CALL("ishmem_info_get_name",
41+
ARG(0))))
42+
43+
// Memory Management
44+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
45+
CALL_FACTORY_ENTRY("nvshmem_malloc",
46+
CALL("ishmem_malloc", ARG(0))))
47+
48+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
49+
CALL_FACTORY_ENTRY("nvshmem_free",
50+
CALL("ishmem_free", ARG(0))))
51+
52+
FEATURE_REQUEST_FACTORY(
53+
HelperFeatureEnum::device_ext,
54+
CALL_FACTORY_ENTRY("nvshmem_align", CALL("ishmem_align", ARG(0), ARG(1))))
55+
56+
FEATURE_REQUEST_FACTORY(
57+
HelperFeatureEnum::device_ext,
58+
CALL_FACTORY_ENTRY("nvshmem_calloc", CALL("ishmem_calloc", ARG(0), ARG(1))))
59+
60+
// Team Management
61+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
62+
CALL_FACTORY_ENTRY("nvshmem_team_my_pe",
63+
CALL("ishmem_team_my_pe", ARG(0))))
64+
65+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
66+
CALL_FACTORY_ENTRY("nvshmem_team_n_pes",
67+
CALL("ishmem_team_n_pes", ARG(0))))
68+
69+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
70+
CALL_FACTORY_ENTRY("nvshmem_team_get_config",
71+
CALL("ishmem_team_get_config",
72+
ARG(0), LITERAL("0"), ARG(1))))
73+
74+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
75+
CALL_FACTORY_ENTRY("nvshmem_team_translate_pe",
76+
CALL("ishmem_team_translate_pe",
77+
ARG(0), ARG(1), ARG(2))))
78+
79+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
80+
CALL_FACTORY_ENTRY("nvshmem_team_split_strided",
81+
CALL("ishmem_team_split_strided",
82+
ARG(0), ARG(1), ARG(2), ARG(3),
83+
ARG(4), ARG(5), ARG(6))))
84+
85+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
86+
CALL_FACTORY_ENTRY("nvshmem_team_split_2d",
87+
CALL("ishmem_team_split_2d", ARG(0),
88+
ARG(1), ARG(2), ARG(3), ARG(4),
89+
ARG(5), ARG(6), ARG(7))))
90+
91+
FEATURE_REQUEST_FACTORY(HelperFeatureEnum::device_ext,
92+
CALL_FACTORY_ENTRY("nvshmem_team_destroy",
93+
CALL("ishmem_team_destroy", ARG(0))))
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//===-------------------- CallExprRewriterNvshmem.cpp ---------------------===//
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+
#include "RuleInfra/CallExprRewriter.h"
10+
#include "RuleInfra/CallExprRewriterCommon.h"
11+
12+
namespace clang {
13+
namespace dpct {
14+
void CallExprRewriterFactoryBase::initRewriterMapNvshmem() {
15+
RewriterMap->merge(
16+
std::unordered_map<std::string,
17+
std::shared_ptr<CallExprRewriterFactoryBase>>({
18+
#include "APINamesNvshmem.inc"
19+
}));
20+
}
21+
22+
} // namespace dpct
23+
} // namespace clang

0 commit comments

Comments
 (0)