Skip to content

Commit df025ac

Browse files
[SYCL][UR] Add dynamic linking and program flags (#20272)
This commit adds two new experimental parts: 1. A new UR function `urProgramDynamicLinkExp` for dynamically linking binaries in built programs. Support for this can be checked by querying `UR_DEVICE_INFO_DYNAMIC_LINK_SUPPORT_EXP`. 2. A new flag enum `ur_exp_program_flags_t` used by exp-multi-device-compile functions. This enum currently only has a single flag `UR_EXP_PROGRAM_FLAG_ALLOW_UNRESOLVED_SYMBOLS` which instructs the `urProgramLinkExp` function that unresolved external symbols should be allowed after linking. --------- Signed-off-by: Larsen, Steffen <[email protected]>
1 parent bdf2e56 commit df025ac

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1018
-112
lines changed

sycl/source/backend.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ make_kernel_bundle(ur_native_handle_t NativeHandle,
231231
case (UR_PROGRAM_BINARY_TYPE_NONE):
232232
if (State == bundle_state::object) {
233233
auto Res = Adapter.call_nocheck<UrApiKind::urProgramCompileExp>(
234-
UrProgram, 1u, &Dev, nullptr);
234+
UrProgram, 1u, &Dev, ur_exp_program_flags_t{}, nullptr);
235235
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
236236
Res = Adapter.call_nocheck<UrApiKind::urProgramCompile>(
237237
ContextImpl.getHandleRef(), UrProgram, nullptr);
@@ -241,7 +241,7 @@ make_kernel_bundle(ur_native_handle_t NativeHandle,
241241

242242
else if (State == bundle_state::executable) {
243243
auto Res = Adapter.call_nocheck<UrApiKind::urProgramBuildExp>(
244-
UrProgram, 1u, &Dev, nullptr);
244+
UrProgram, 1u, &Dev, ur_exp_program_flags_t{}, nullptr);
245245
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
246246
Res = Adapter.call_nocheck<UrApiKind::urProgramBuild>(
247247
ContextImpl.getHandleRef(), UrProgram, nullptr);
@@ -261,8 +261,8 @@ make_kernel_bundle(ur_native_handle_t NativeHandle,
261261
Managed<ur_program_handle_t> UrLinkedProgram{Adapter};
262262
ur_program_handle_t ProgramsToLink[] = {UrProgram};
263263
auto Res = Adapter.call_nocheck<UrApiKind::urProgramLinkExp>(
264-
ContextImpl.getHandleRef(), 1u, &Dev, 1u, ProgramsToLink, nullptr,
265-
&UrLinkedProgram);
264+
ContextImpl.getHandleRef(), 1u, &Dev, ur_exp_program_flags_t{}, 1u,
265+
ProgramsToLink, nullptr, &UrLinkedProgram);
266266
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
267267
Res = Adapter.call_nocheck<UrApiKind::urProgramLink>(
268268
ContextImpl.getHandleRef(), 1u, ProgramsToLink, nullptr,

sycl/source/detail/device_image_impl.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,8 @@ class device_image_impl
761761

762762
std::string XsFlags = extractXsFlags(BuildOptions, MRTCBinInfo->MLanguage);
763763
auto Res = Adapter.call_nocheck<UrApiKind::urProgramBuildExp>(
764-
UrProgram, DeviceVec.size(), DeviceVec.data(), XsFlags.c_str());
764+
UrProgram, DeviceVec.size(), DeviceVec.data(), ur_exp_program_flags_t{},
765+
XsFlags.c_str());
765766
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
766767
Res = Adapter.call_nocheck<UrApiKind::urProgramBuild>(
767768
ContextImpl.getHandleRef(), UrProgram, XsFlags.c_str());

sycl/source/detail/program_manager/program_manager.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,7 +1302,7 @@ static ur_result_t doCompile(adapter_impl &Adapter, ur_program_handle_t Program,
13021302
// Try to compile with given devices, fall back to compiling with the program
13031303
// context if unsupported by the adapter
13041304
auto Result = Adapter.call_nocheck<UrApiKind::urProgramCompileExp>(
1305-
Program, NumDevs, Devs, Opts);
1305+
Program, NumDevs, Devs, ur_exp_program_flags_t{}, Opts);
13061306
if (Result == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
13071307
return Adapter.call_nocheck<UrApiKind::urProgramCompile>(Ctx, Program,
13081308
Opts);
@@ -1723,7 +1723,8 @@ Managed<ur_program_handle_t> ProgramManager::build(
17231723
? CompileOptions
17241724
: (CompileOptions + " " + LinkOptions);
17251725
ur_result_t Error = Adapter.call_nocheck<UrApiKind::urProgramBuildExp>(
1726-
Program, Devices.size(), Devices.data(), Options.c_str());
1726+
Program, Devices.size(), Devices.data(), ur_exp_program_flags_t{},
1727+
Options.c_str());
17271728
if (Error == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
17281729
Error = Adapter.call_nocheck<UrApiKind::urProgramBuild>(
17291730
Context.getHandleRef(), Program, Options.c_str());
@@ -1759,8 +1760,8 @@ Managed<ur_program_handle_t> ProgramManager::build(
17591760
auto doLink = [&] {
17601761
auto Res = Adapter.call_nocheck<UrApiKind::urProgramLinkExp>(
17611762
Context.getHandleRef(), Devices.size(), Devices.data(),
1762-
LinkPrograms.size(), LinkPrograms.data(), LinkOptions.c_str(),
1763-
&LinkedProg);
1763+
ur_exp_program_flags_t{}, LinkPrograms.size(), LinkPrograms.data(),
1764+
LinkOptions.c_str(), &LinkedProg);
17641765
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
17651766
Res = Adapter.call_nocheck<UrApiKind::urProgramLink>(
17661767
Context.getHandleRef(), LinkPrograms.size(), LinkPrograms.data(),
@@ -3001,8 +3002,8 @@ ProgramManager::link(const std::vector<device_image_plain> &Imgs,
30013002
auto doLink = [&] {
30023003
auto Res = Adapter.call_nocheck<UrApiKind::urProgramLinkExp>(
30033004
ContextImpl.getHandleRef(), URDevices.size(), URDevices.data(),
3004-
URPrograms.size(), URPrograms.data(), LinkOptionsStr.c_str(),
3005-
&LinkedProg);
3005+
ur_exp_program_flags_t{}, URPrograms.size(), URPrograms.data(),
3006+
LinkOptionsStr.c_str(), &LinkedProg);
30063007
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
30073008
Res = Adapter.call_nocheck<UrApiKind::urProgramLink>(
30083009
ContextImpl.getHandleRef(), URPrograms.size(), URPrograms.data(),

unified-runtime/include/ur_api.h

Lines changed: 88 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unified-runtime/include/ur_api_funcs.def

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unified-runtime/include/ur_ddi.h

Lines changed: 12 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unified-runtime/include/ur_print.h

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)