Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[UR] Pull in change to make multi device compile extension core. #12536

Draft
wants to merge 1 commit into
base: sycl
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions sycl/cmake/modules/FetchUnifiedRuntime.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -116,14 +116,14 @@ if(SYCL_UR_USE_FETCH_CONTENT)
CACHE PATH "Path to external '${name}' adapter source dir" FORCE)
endfunction()

set(UNIFIED_RUNTIME_REPO "https://github.com/oneapi-src/unified-runtime.git")
# commit 7a2caca559da81620c7430521873045bf42eafc1
# Merge: 1d1808a4 96f66e0f
# Author: Piotr Balcer <piotr.balcer@intel.com>
# Date: Tue Sep 24 13:00:46 2024 +0200
# Merge pull request #2117 from pbalcer/fix-filter-out-same-cmdlists
# Fix urEnqueueEventsWaitWithBarrier when used with interop events
set(UNIFIED_RUNTIME_TAG 7a2caca559da81620c7430521873045bf42eafc1)
set(UNIFIED_RUNTIME_REPO "https://github.com/aarongreig/unified-runtime.git")
# commit f5c907a0f74fd6729be5c2e137144f1a43f87111
# Merge: 9ca3ec7 be38e567
# Author: aarongreig <aaron.greig@codeplay.com>
# Date: Mon Sep 23 08:27:12 2024 -0700
# Merge pull request #1830 from JackAKirk/hip-set-device
# [hip] Remove deprecated hip APIs, simplify urContext
set(UNIFIED_RUNTIME_TAG aaron/makeDeviceCompileExtCore)

set(UMF_BUILD_EXAMPLES OFF CACHE INTERNAL "EXAMPLES")
# Due to the use of dependentloadflag and no installer for UMF and hwloc we need
Expand Down
19 changes: 3 additions & 16 deletions sycl/source/backend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,22 +225,14 @@ make_kernel_bundle(ur_native_handle_t NativeHandle,
switch (BinaryType) {
case (UR_PROGRAM_BINARY_TYPE_NONE):
if (State == bundle_state::object) {
auto Res = Adapter->call_nocheck<UrApiKind::urProgramCompileExp>(
auto Res = Adapter->call_nocheck<UrApiKind::urProgramCompile>(
UrProgram, 1, &Dev, nullptr);
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
Res = Adapter->call_nocheck<UrApiKind::urProgramCompile>(
ContextImpl->getHandleRef(), UrProgram, nullptr);
}
Adapter->checkUrResult<errc::build>(Res);
}

else if (State == bundle_state::executable) {
auto Res = Adapter->call_nocheck<UrApiKind::urProgramBuildExp>(
auto Res = Adapter->call_nocheck<UrApiKind::urProgramBuild>(
UrProgram, 1, &Dev, nullptr);
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
Res = Adapter->call_nocheck<UrApiKind::urProgramBuild>(
ContextImpl->getHandleRef(), UrProgram, nullptr);
}
Adapter->checkUrResult<errc::build>(Res);
}

Expand All @@ -254,14 +246,9 @@ make_kernel_bundle(ur_native_handle_t NativeHandle,
detail::codeToString(UR_RESULT_ERROR_INVALID_VALUE));
if (State == bundle_state::executable) {
ur_program_handle_t UrLinkedProgram = nullptr;
auto Res = Adapter->call_nocheck<UrApiKind::urProgramLinkExp>(
auto Res = Adapter->call_nocheck<UrApiKind::urProgramLink>(
ContextImpl->getHandleRef(), 1, &Dev, 1, &UrProgram, nullptr,
&UrLinkedProgram);
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
Res = Adapter->call_nocheck<UrApiKind::urProgramLink>(
ContextImpl->getHandleRef(), 1, &UrProgram, nullptr,
&UrLinkedProgram);
}
Adapter->checkUrResult<errc::build>(Res);
if (UrLinkedProgram != nullptr) {
UrProgram = UrLinkedProgram;
Expand Down
9 changes: 2 additions & 7 deletions sycl/source/detail/kernel_bundle_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -462,13 +462,8 @@ class kernel_bundle_impl {
"urProgramCreateWithIL resulted in a null program handle.");

std::string XsFlags = extractXsFlags(BuildOptions);
auto Res = Adapter->call_nocheck<UrApiKind::urProgramBuildExp>(
UrProgram, DeviceVec.size(), DeviceVec.data(), XsFlags.c_str());
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
Res = Adapter->call_nocheck<UrApiKind::urProgramBuild>(
ContextImpl->getHandleRef(), UrProgram, XsFlags.c_str());
}
Adapter->checkUrResult<errc::build>(Res);
Adapter->call<UrApiKind::urProgramBuild>(UrProgram, DeviceVec.size(),
DeviceVec.data(), XsFlags.c_str());

// Get the number of kernels in the program.
size_t NumKernels;
Expand Down
30 changes: 5 additions & 25 deletions sycl/source/detail/program_manager/program_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1158,13 +1158,8 @@ static ur_result_t doCompile(const AdapterPtr &Adapter,
const char *Opts) {
// Try to compile with given devices, fall back to compiling with the program
// context if unsupported by the adapter
auto Result = Adapter->call_nocheck<UrApiKind::urProgramCompileExp>(
Program, NumDevs, Devs, Opts);
if (Result == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
return Adapter->call_nocheck<UrApiKind::urProgramCompile>(Ctx, Program,
Opts);
}
return Result;
return Adapter->call_nocheck<UrApiKind::urProgramCompile>(Program, NumDevs,
Devs, Opts);
}

static ur_program_handle_t loadDeviceLibFallback(const ContextImplPtr Context,
Expand Down Expand Up @@ -1563,13 +1558,9 @@ ProgramManager::ProgramPtr ProgramManager::build(
const std::string &Options = LinkOptions.empty()
? CompileOptions
: (CompileOptions + " " + LinkOptions);
ur_result_t Error = Adapter->call_nocheck<UrApiKind::urProgramBuildExp>(
ur_result_t Error = Adapter->call_nocheck<UrApiKind::urProgramBuild>(
Program.get(),
/*num devices =*/1, &Device, Options.c_str());
if (Error == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
Error = Adapter->call_nocheck<UrApiKind::urProgramBuild>(
Context->getHandleRef(), Program.get(), Options.c_str());
}

if (Error != UR_RESULT_SUCCESS)
throw detail::set_ur_error(
Expand Down Expand Up @@ -1599,15 +1590,10 @@ ProgramManager::ProgramPtr ProgramManager::build(

ur_program_handle_t LinkedProg = nullptr;
auto doLink = [&] {
auto Res = Adapter->call_nocheck<UrApiKind::urProgramLinkExp>(
auto Res = Adapter->call_nocheck<UrApiKind::urProgramLink>(
Context->getHandleRef(),
/*num devices =*/1, &Device, LinkPrograms.size(), LinkPrograms.data(),
LinkOptions.c_str(), &LinkedProg);
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
Res = Adapter->call_nocheck<UrApiKind::urProgramLink>(
Context->getHandleRef(), LinkPrograms.size(), LinkPrograms.data(),
LinkOptions.c_str(), &LinkedProg);
}
return Res;
};
ur_result_t Error = doLink();
Expand Down Expand Up @@ -2422,16 +2408,10 @@ ProgramManager::link(const device_image_plain &DeviceImage,

ur_program_handle_t LinkedProg = nullptr;
auto doLink = [&] {
auto Res = Adapter->call_nocheck<UrApiKind::urProgramLinkExp>(
return Adapter->call_nocheck<UrApiKind::urProgramLink>(
ContextImpl->getHandleRef(), URDevices.size(), URDevices.data(),
URPrograms.size(), URPrograms.data(), LinkOptionsStr.c_str(),
&LinkedProg);
if (Res == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) {
Res = Adapter->call_nocheck<UrApiKind::urProgramLink>(
ContextImpl->getHandleRef(), URPrograms.size(), URPrograms.data(),
LinkOptionsStr.c_str(), &LinkedProg);
}
return Res;
};
ur_result_t Error = doLink();
if (Error == UR_RESULT_ERROR_OUT_OF_RESOURCES ||
Expand Down
7 changes: 3 additions & 4 deletions sycl/test-e2e/ESIMD/esimd_check_vc_codegen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,6 @@ int main(void) {
return err_cnt > 0 ? 1 : 0;
}

// Don't use -NEXT here to split the line because we need to allow for the
// possbility of a BuildExp( that fails with UNSUPPORTED followed by a Build(
// that results in SUCCESS
// CHECK: ---> urProgramBuild{{(Exp)?}}({{.*}}-vc-codegen{{.*}} -> UR_RESULT_SUCCESS
// CHECK: ---> urProgramBuild(
// CHECK-SAME: .pOptions = {{.*}}-vc-codegen
// CHECK-SAME: -> UR_RESULT_SUCCESS
2 changes: 1 addition & 1 deletion sycl/test-e2e/Graph/Explicit/kernel_bundle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
// CHECK-SAME: .phProgram = {{.*}} ([[PROGRAM_HANDLE1:[0-9a-fA-Fx]+]])

//
// CHECK:---> urProgramBuildExp(
// CHECK:---> urProgramBuild(
// CHECK-SAME: .hProgram = [[PROGRAM_HANDLE1]]
//
// CHECK:---> urProgramRetain(.hProgram = [[PROGRAM_HANDLE1]]) -> UR_RESULT_SUCCESS
Expand Down
2 changes: 1 addition & 1 deletion sycl/test-e2e/Graph/RecordReplay/kernel_bundle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
// CHECK-SAME: .phProgram = {{.*}} ([[PROGRAM_HANDLE1:[0-9a-fA-Fx]+]])
// CHECK-SAME: -> UR_RESULT_SUCCESS;
//
// CHECK:---> urProgramBuildExp(
// CHECK:---> urProgramBuild(
// CHECK-SAME: .hProgram = [[PROGRAM_HANDLE1]]
//
// CHECK:---> urProgramRetain(
Expand Down
8 changes: 4 additions & 4 deletions sycl/unittests/helpers/RuntimeLinkingCommon.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ static ur_result_t redefined_urProgramCreateWithBinary(void *pParams) {
return UR_RESULT_SUCCESS;
}

static ur_result_t redefined_urProgramLinkExp(void *pParams) {
auto Params = *static_cast<ur_program_link_exp_params_t *>(pParams);
static ur_result_t redefined_urProgramLink(void *pParams) {
auto Params = *static_cast<ur_program_link_params_t *>(pParams);
unsigned ResProgram = 1;
auto Programs = *Params.pphPrograms;
for (uint32_t I = 0; I < *Params.pcount; ++I) {
Expand Down Expand Up @@ -82,8 +82,8 @@ static void setupRuntimeLinkingMock() {
redefined_urProgramCreateWithIL);
mock::getCallbacks().set_replace_callback(
"urProgramCreateWithBinary", redefined_urProgramCreateWithBinary);
mock::getCallbacks().set_replace_callback("urProgramLinkExp",
redefined_urProgramLinkExp);
mock::getCallbacks().set_replace_callback("urProgramLink",
redefined_urProgramLink);
mock::getCallbacks().set_replace_callback("urKernelCreate",
redefined_urKernelCreate);
}
12 changes: 6 additions & 6 deletions sycl/unittests/kernel-and-program/KernelBuildOptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ struct KernelInfo<BuildOptsTestKernel> : public unittest::MockKernelInfoBase {
} // namespace sycl

static ur_result_t redefinedProgramBuild(void *pParams) {
auto params = *static_cast<ur_program_build_exp_params_t *>(pParams);
auto params = *static_cast<ur_program_build_params_t *>(pParams);
if (*params.ppOptions)
BuildOpts = *params.ppOptions;
else
Expand All @@ -44,7 +44,7 @@ static ur_result_t redefinedProgramBuild(void *pParams) {
}

static ur_result_t redefinedProgramCompile(void *pParams) {
auto params = *static_cast<ur_program_compile_exp_params_t *>(pParams);
auto params = *static_cast<ur_program_compile_params_t *>(pParams);
if (*params.ppOptions)
BuildOpts = *params.ppOptions;
else
Expand All @@ -53,7 +53,7 @@ static ur_result_t redefinedProgramCompile(void *pParams) {
}

static ur_result_t redefinedProgramLink(void *pParams) {
auto params = *static_cast<ur_program_link_exp_params_t *>(pParams);
auto params = *static_cast<ur_program_link_params_t *>(pParams);
if (*params.ppOptions)
BuildOpts = *params.ppOptions;
else
Expand All @@ -63,11 +63,11 @@ static ur_result_t redefinedProgramLink(void *pParams) {

static void setupCommonMockAPIs(sycl::unittest::UrMock<> &Mock) {
using namespace sycl::detail;
mock::getCallbacks().set_before_callback("urProgramCompileExp",
mock::getCallbacks().set_before_callback("urProgramCompile",
&redefinedProgramCompile);
mock::getCallbacks().set_before_callback("urProgramLinkExp",
mock::getCallbacks().set_before_callback("urProgramLink",
&redefinedProgramLink);
mock::getCallbacks().set_before_callback("urProgramBuildExp",
mock::getCallbacks().set_before_callback("urProgramBuild",
&redefinedProgramBuild);
}

Expand Down
2 changes: 1 addition & 1 deletion sycl/unittests/kernel-and-program/OutOfResources.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ TEST_P(OutOfResourcesTestSuite, urProgramLink) {
nProgramLink = 0;
sycl::unittest::UrMock<> Mock;
ErrorCode = GetParam();
mock::getCallbacks().set_before_callback("urProgramLinkExp",
mock::getCallbacks().set_before_callback("urProgramLink",
&redefinedProgramLink);

sycl::platform Plt{sycl::platform()};
Expand Down
26 changes: 0 additions & 26 deletions sycl/unittests/program_manager/DynamicLinking.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -218,30 +218,4 @@ TEST(DynamicLinking, AheadOfTimeUnsupported) {
}
}

static ur_result_t redefined_urProgramCompileExp(void *pParams) {
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
}

TEST(DynamicLinking, UnsupportedCompileExp) {
sycl::unittest::UrMock<> Mock;
setupRuntimeLinkingMock();
mock::getCallbacks().set_replace_callback("urProgramCompileExp",
redefined_urProgramCompileExp);

sycl::platform Plt = sycl::platform();
sycl::queue Q(Plt.get_devices()[0]);

CapturedLinkingData.clear();

Q.single_task<DynamicLinkingTest::BasicCaseKernel>([=]() {});
ASSERT_EQ(CapturedLinkingData.NumOfUrProgramCreateCalls, 3u);
// Both programs should be linked together.
ASSERT_EQ(CapturedLinkingData.NumOfUrProgramLinkCalls, 1u);
ASSERT_TRUE(CapturedLinkingData.LinkedProgramsContains(
{BASIC_CASE_PRG, BASIC_CASE_PRG_DEP, BASIC_CASE_PRG_DEP_DEP}));
// And the linked program should be used to create a kernel.
ASSERT_EQ(CapturedLinkingData.ProgramUsedToCreateKernel,
BASIC_CASE_PRG * BASIC_CASE_PRG_DEP * BASIC_CASE_PRG_DEP_DEP);
}

} // anonymous namespace
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ generateEAMTestKernelImage(std::string _cmplOptions, std::string _lnkOptions) {
}

inline ur_result_t redefinedProgramLink(void *pParams) {
auto params = *static_cast<ur_program_link_exp_params_t *>(pParams);
auto params = *static_cast<ur_program_link_params_t *>(pParams);
assert(*params.ppOptions != nullptr);
auto add_link_opts = std::string(*params.ppOptions);
if (!add_link_opts.empty()) {
Expand All @@ -97,7 +97,7 @@ inline ur_result_t redefinedProgramLink(void *pParams) {
}

inline ur_result_t redefinedProgramCompile(void *pParams) {
auto params = *static_cast<ur_program_compile_exp_params_t *>(pParams);
auto params = *static_cast<ur_program_compile_params_t *>(pParams);
assert(*params.ppOptions != nullptr);
auto add_compile_opts = std::string(*params.ppOptions);
if (!add_compile_opts.empty()) {
Expand All @@ -109,7 +109,7 @@ inline ur_result_t redefinedProgramCompile(void *pParams) {
}

inline ur_result_t redefinedProgramBuild(void *pParams) {
auto params = *static_cast<ur_program_build_exp_params_t *>(pParams);
auto params = *static_cast<ur_program_build_params_t *>(pParams);
assert(*params.ppOptions != nullptr);
current_build_opts = std::string(*params.ppOptions);
return UR_RESULT_SUCCESS;
Expand All @@ -118,9 +118,9 @@ inline ur_result_t redefinedProgramBuild(void *pParams) {
TEST(Link_Compile_Options, compile_link_Options_Test_empty_options) {
sycl::unittest::UrMock<> Mock;
sycl::platform Plt = sycl::platform();
mock::getCallbacks().set_before_callback("urProgramCompileExp",
mock::getCallbacks().set_before_callback("urProgramCompile",
&redefinedProgramCompile);
mock::getCallbacks().set_before_callback("urProgramLinkExp",
mock::getCallbacks().set_before_callback("urProgramLink",
&redefinedProgramLink);
const sycl::device Dev = Plt.get_devices()[0];
current_link_options.clear();
Expand All @@ -145,9 +145,9 @@ TEST(Link_Compile_Options, compile_link_Options_Test_empty_options) {
TEST(Link_Compile_Options, compile_link_Options_Test_filled_options) {
sycl::unittest::UrMock<> Mock;
sycl::platform Plt = sycl::platform();
mock::getCallbacks().set_before_callback("urProgramCompileExp",
mock::getCallbacks().set_before_callback("urProgramCompile",
&redefinedProgramCompile);
mock::getCallbacks().set_before_callback("urProgramLinkExp",
mock::getCallbacks().set_before_callback("urProgramLink",
&redefinedProgramLink);
const sycl::device Dev = Plt.get_devices()[0];
current_link_options.clear();
Expand Down Expand Up @@ -180,11 +180,11 @@ TEST(Link_Compile_Options, compile_link_Options_Test_filled_options) {
TEST(Link_Compile_Options, check_sycl_build) {
sycl::unittest::UrMock<> Mock;
sycl::platform Plt = sycl::platform();
mock::getCallbacks().set_before_callback("urProgramCompileExp",
mock::getCallbacks().set_before_callback("urProgramCompile",
&redefinedProgramCompile);
mock::getCallbacks().set_before_callback("urProgramLinkExp",
mock::getCallbacks().set_before_callback("urProgramLink",
&redefinedProgramLink);
mock::getCallbacks().set_before_callback("urProgramBuildExp",
mock::getCallbacks().set_before_callback("urProgramBuild",
&redefinedProgramBuild);
const sycl::device Dev = Plt.get_devices()[0];
current_link_options.clear();
Expand Down
Loading