Skip to content

Commit ed8b38e

Browse files
authored
[SYCL] Support sycl_khr_default_context (intel#15645)
Spec: KhronosGroup/SYCL-Docs#624 sycl-cts: KhronosGroup/SYCL-CTS#960 This patch is intended to be merged only when there are sycl-cts tests and the ratified khr extension.
1 parent 3ee420c commit ed8b38e

File tree

8 files changed

+46
-5
lines changed

8 files changed

+46
-5
lines changed

sycl/include/sycl/platform.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,11 @@ class __SYCL_EXPORT platform : public detail::OwnerLessBase<platform> {
208208

209209
std::vector<device> ext_oneapi_get_composite_devices() const;
210210

211+
/// Returns a copy of the default context object for this platform.
212+
///
213+
/// \return the default context
214+
context khr_get_default_context() const;
215+
211216
private:
212217
ur_native_handle_t getNative() const;
213218

sycl/source/detail/queue_impl.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class queue_impl {
8585
context{createSyclObjFromImpl<device>(Device), {}, {}});
8686

8787
ContextImplPtr DefaultContext = detail::getSyclObjImpl(
88-
Device->get_platform().ext_oneapi_get_default_context());
88+
Device->get_platform().khr_get_default_context());
8989
if (DefaultContext->isDeviceValid(Device))
9090
return DefaultContext;
9191
return detail::getSyclObjImpl(

sycl/source/feature_test.hpp.in

+1
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ inline namespace _V1 {
117117
#define SYCL_KHR_FREE_FUNCTION_COMMANDS 1
118118
// In progress yet
119119
#define SYCL_EXT_ONEAPI_ATOMIC16 0
120+
#define SYCL_KHR_DEFAULT_CONTEXT 1
120121

121122
#ifndef __has_include
122123
#define __has_include(x) 0

sycl/source/platform.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,7 @@ platform::get_backend_info() const {
8787

8888
#undef __SYCL_PARAM_TRAITS_SPEC
8989

90-
context platform::ext_oneapi_get_default_context() const {
91-
if (!detail::SYCLConfig<detail::SYCL_ENABLE_DEFAULT_CONTEXTS>::get())
92-
throw std::runtime_error("SYCL default contexts are not enabled");
93-
90+
context platform::khr_get_default_context() const {
9491
// Keeping the default context for platforms in the global cache to avoid
9592
// shared_ptr based circular dependency between platform and context classes
9693
std::unordered_map<detail::PlatformImplPtr, detail::ContextImplPtr>
@@ -109,6 +106,13 @@ context platform::ext_oneapi_get_default_context() const {
109106
return detail::createSyclObjFromImpl<context>(It->second);
110107
}
111108

109+
context platform::ext_oneapi_get_default_context() const {
110+
if (!detail::SYCLConfig<detail::SYCL_ENABLE_DEFAULT_CONTEXTS>::get())
111+
throw std::runtime_error("SYCL default contexts are not enabled");
112+
113+
return khr_get_default_context();
114+
}
115+
112116
std::vector<device> platform::ext_oneapi_get_composite_devices() const {
113117
// Only GPU architectures can be composite devices.
114118
auto GPUDevices = get_devices(info::device_type::gpu);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// RUN: %{build} -o %t.out
2+
// RUN: %{run} %t.out
3+
4+
// Test checks that the default context contains all of the root devices that
5+
// are associated with this platform.
6+
7+
#include <algorithm>
8+
#include <sycl/detail/core.hpp>
9+
10+
using namespace sycl;
11+
12+
int main() {
13+
auto platforms = platform::get_platforms();
14+
15+
for (const auto &plt : platforms) {
16+
auto def_ctx_devs = plt.khr_get_default_context().get_devices();
17+
auto root_devs = plt.get_devices();
18+
19+
for (const auto &dev : root_devs)
20+
if (std::find(def_ctx_devs.begin(), def_ctx_devs.end(), dev) ==
21+
def_ctx_devs.end())
22+
return 1;
23+
}
24+
25+
return 0;
26+
}

sycl/test/abi/sycl_symbols_linux.dump

+1
Original file line numberDiff line numberDiff line change
@@ -4025,6 +4025,7 @@ _ZNK4sycl3_V18platform13has_extensionENS0_6detail11string_viewE
40254025
_ZNK4sycl3_V18platform16get_backend_infoINS0_4info6device15backend_versionEEENS0_6detail20is_backend_info_descIT_E11return_typeEv
40264026
_ZNK4sycl3_V18platform16get_backend_infoINS0_4info6device7versionEEENS0_6detail20is_backend_info_descIT_E11return_typeEv
40274027
_ZNK4sycl3_V18platform16get_backend_infoINS0_4info8platform7versionEEENS0_6detail20is_backend_info_descIT_E11return_typeEv
4028+
_ZNK4sycl3_V18platform23khr_get_default_contextEv
40284029
_ZNK4sycl3_V18platform30ext_oneapi_get_default_contextEv
40294030
_ZNK4sycl3_V18platform32ext_oneapi_get_composite_devicesEv
40304031
_ZNK4sycl3_V18platform3getEv

sycl/test/abi/sycl_symbols_windows.dump

+1
Original file line numberDiff line numberDiff line change
@@ -3872,6 +3872,7 @@
38723872
?ext_oneapi_get_backend_content_view_impl@device_image_plain@detail@_V1@sycl@@IEBA?AU?$pair@PEBW4byte@std@@PEBW412@@std@@XZ
38733873
?ext_oneapi_get_composite_devices@platform@_V1@sycl@@QEBA?AV?$vector@Vdevice@_V1@sycl@@V?$allocator@Vdevice@_V1@sycl@@@std@@@std@@XZ
38743874
?ext_oneapi_get_default_context@platform@_V1@sycl@@QEBA?AVcontext@23@XZ
3875+
?khr_get_default_context@platform@_V1@sycl@@QEBA?AVcontext@23@XZ
38753876
?ext_oneapi_get_graph@queue@_V1@sycl@@QEBA?AV?$command_graph@$0A@@experimental@oneapi@ext@23@XZ
38763877
?ext_oneapi_get_kernel@kernel_bundle_plain@detail@_V1@sycl@@AEAA?AVkernel@34@Vstring_view@234@@Z
38773878
?ext_oneapi_get_kernel@kernel_bundle_plain@detail@_V1@sycl@@QEAA?AVkernel@34@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z

sycl/unittests/Extensions/DefaultContext.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ void test_default_context_enabled() {
3636

3737
ASSERT_EQ(Dev1.get_platform().ext_oneapi_get_default_context(),
3838
Dev2.get_platform().ext_oneapi_get_default_context());
39+
40+
ASSERT_EQ(Dev1.get_platform().khr_get_default_context(),
41+
Dev2.get_platform().khr_get_default_context());
3942
}
4043

4144
void test_default_context_disabled() {

0 commit comments

Comments
 (0)