Skip to content

Commit 54e1ed3

Browse files
nrspruitkbenzie
andauthored
[UR][L0] Add support for passing device list to urProgramBuild/Link/Compile (#11464)
piProgramBuild receives a list of devices, while urProgramBuild does not. This produces a series of issues when a UR program needs to be created for a specific device. So define a new API, called urProgramBuildExp to pass this list. Requires related patch in Unified Runtime Adapters here: oneapi-src/unified-runtime#934 --------- Signed-off-by: Spruit, Neil R <[email protected]> Co-authored-by: Kenneth Benzie (Benie) <[email protected]>
1 parent 6bce7f6 commit 54e1ed3

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

sycl/plugins/unified_runtime/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ if(SYCL_PI_UR_USE_FETCH_CONTENT)
5656
include(FetchContent)
5757

5858
set(UNIFIED_RUNTIME_REPO "https://github.com/oneapi-src/unified-runtime.git")
59-
# commit 04799e735a7ddd0839568b25bf03fa8f77160b7d
60-
# Merge: 534071e5 4cf02cb9
59+
# commit 71957e849435169b43e51a42025afeeb63d7508b
60+
# Merge: ce152a64 e001b98d
6161
# Author: Kenneth Benzie (Benie) <[email protected]>
62-
# Date: Mon Nov 20 10:24:50 2023 +0000
63-
# Merge pull request #1048 from callumfare/opencl_fix_urMemBufferCreate_leak
64-
# [OpenCL] Fix memory leak and coverity issue with struct-to-array casts
65-
set(UNIFIED_RUNTIME_TAG 04799e735a7ddd0839568b25bf03fa8f77160b7d)
62+
# Date: Tue Nov 21 16:41:08 2023 +0000
63+
# Merge pull request #1100 from kbenzie/benie/fixup-multi-device-compile
64+
# [CUDA][HIP][OpenCL][NATIVECPU] Fix multi-device compile
65+
set(UNIFIED_RUNTIME_TAG 71957e849435169b43e51a42025afeeb63d7508b)
6666

6767
if(SYCL_PI_UR_OVERRIDE_FETCH_CONTENT_REPO)
6868
set(UNIFIED_RUNTIME_REPO "${SYCL_PI_UR_OVERRIDE_FETCH_CONTENT_REPO}")

sycl/plugins/unified_runtime/pi2ur.hpp

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1985,10 +1985,17 @@ piProgramLink(pi_context Context, pi_uint32 NumDevices,
19851985
ur_program_handle_t *UrProgram =
19861986
reinterpret_cast<ur_program_handle_t *>(RetProgram);
19871987

1988-
HANDLE_ERRORS(urProgramLink(UrContext, NumInputPrograms, UrInputPrograms,
1989-
Options, UrProgram));
1988+
auto UrDevices = reinterpret_cast<ur_device_handle_t *>(
1989+
const_cast<pi_device *>(DeviceList));
19901990

1991-
return PI_SUCCESS;
1991+
auto urResult =
1992+
urProgramLinkExp(UrContext, NumDevices, UrDevices, NumInputPrograms,
1993+
UrInputPrograms, Options, UrProgram);
1994+
if (urResult == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
1995+
urResult = urProgramLink(UrContext, NumInputPrograms, UrInputPrograms,
1996+
Options, UrProgram);
1997+
}
1998+
return ur2piResult(urResult);
19921999
}
19932000

19942001
inline pi_result piProgramCompile(
@@ -2017,9 +2024,15 @@ inline pi_result piProgramCompile(
20172024
HANDLE_ERRORS(urProgramGetInfo(UrProgram, PropName, sizeof(&UrContext),
20182025
&UrContext, nullptr));
20192026

2020-
HANDLE_ERRORS(urProgramCompile(UrContext, UrProgram, Options));
2027+
auto UrDevices = reinterpret_cast<ur_device_handle_t *>(
2028+
const_cast<pi_device *>(DeviceList));
20212029

2022-
return PI_SUCCESS;
2030+
auto urResult =
2031+
urProgramCompileExp(UrProgram, NumDevices, UrDevices, Options);
2032+
if (urResult == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
2033+
urResult = urProgramCompile(UrContext, UrProgram, Options);
2034+
}
2035+
return ur2piResult(urResult);
20232036
}
20242037

20252038
inline pi_result
@@ -2050,9 +2063,14 @@ piProgramBuild(pi_program Program, pi_uint32 NumDevices,
20502063
HANDLE_ERRORS(urProgramGetInfo(UrProgram, PropName, sizeof(&UrContext),
20512064
&UrContext, nullptr));
20522065

2053-
HANDLE_ERRORS(urProgramBuild(UrContext, UrProgram, Options));
2066+
auto UrDevices = reinterpret_cast<ur_device_handle_t *>(
2067+
const_cast<pi_device *>(DeviceList));
20542068

2055-
return PI_SUCCESS;
2069+
auto urResult = urProgramBuildExp(UrProgram, NumDevices, UrDevices, Options);
2070+
if (urResult == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
2071+
urResult = urProgramBuild(UrContext, UrProgram, Options);
2072+
}
2073+
return ur2piResult(urResult);
20562074
}
20572075

20582076
inline pi_result piextProgramSetSpecializationConstant(pi_program Program,

0 commit comments

Comments
 (0)