Skip to content
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
435d760
Adds preliminar support for atomic_fence_order_capabilities.
maarquitos14 Mar 1, 2023
d126996
Adds support for atomic fence capabilities device queries.
maarquitos14 Mar 8, 2023
fbb2998
Adds tests for atomic fence capabilities device queries.
maarquitos14 Mar 8, 2023
8e07de6
Updateds atomic fence capabilities unittest.
maarquitos14 Mar 9, 2023
8327cb0
Updates ABI test.
maarquitos14 Mar 9, 2023
46e315a
Reverts involuntary change.
maarquitos14 Mar 9, 2023
4bad01d
Updates atomic fence capabilities unittest.
maarquitos14 Mar 9, 2023
3a24574
Updates PI version.
maarquitos14 Mar 9, 2023
eeb02e9
Fixes compilation error in CUDA.
maarquitos14 Mar 9, 2023
8829169
Update atomic fence capabilities unittest header.
maarquitos14 Mar 9, 2023
fc36ecc
Merge remote-tracking branch 'intel/origin/sycl' into maronas/atomic_…
maarquitos14 Mar 10, 2023
0ce9beb
Fixes clang-format issue.
maarquitos14 Mar 10, 2023
60132b7
Fixes clang-format issues.
maarquitos14 Mar 10, 2023
36192ee
SYCL should always return memory_scope::work_item.
maarquitos14 Mar 10, 2023
c1cf809
Addressing code review concerncs.
maarquitos14 Mar 13, 2023
bf12a92
Reverts unrelated changes.
maarquitos14 Mar 16, 2023
9548073
Addresses code review comments.
maarquitos14 Mar 16, 2023
4c59edb
Reverts unrelated clang-format changes.
maarquitos14 Mar 17, 2023
3ab7991
Reverts unrelated clang-format changes.
maarquitos14 Mar 17, 2023
f19eb4c
Reverts unrelated clang-format changes.
maarquitos14 Mar 17, 2023
9e7947c
Sets return values correctly in piDeviceGetInfo for atomic fence capa…
maarquitos14 Mar 17, 2023
806e054
Addresses code review comments.
maarquitos14 Mar 22, 2023
c55f52a
Addresses code review comments.
maarquitos14 Mar 22, 2023
b01fef5
Merge remote-tracking branch 'intel/origin/sycl' into maronas/atomic_…
maarquitos14 Mar 22, 2023
30bc569
Merge remote-tracking branch 'intel/origin/sycl' into maronas/atomic_…
maarquitos14 Mar 23, 2023
1571410
Addresses code review comments.
maarquitos14 Mar 23, 2023
cda1cd3
Merge remote-tracking branch 'intel/origin/sycl' into maronas/atomic_…
maarquitos14 Mar 23, 2023
45dd762
Addresses code review comments.
maarquitos14 Mar 23, 2023
d4a5d37
Fixes compilation error in AtomicMemoryOrderCapabilities unittest.
maarquitos14 Mar 23, 2023
918b923
Fixes compilation error in AtomicFenceCapabilities unittest.
maarquitos14 Mar 23, 2023
6490a36
Updates Windows ABI.
maarquitos14 Mar 23, 2023
924b9b7
Removes file pushed accidentally.
maarquitos14 Mar 23, 2023
879c096
Adds ur2pi value conversion.
maarquitos14 Mar 23, 2023
aea9486
Merges branches with common code.
maarquitos14 Mar 23, 2023
2522df7
Merge remote-tracking branch 'intel/origin/sycl' into maronas/atomic_…
maarquitos14 Mar 24, 2023
8d37dfb
Fixes merge issue.
maarquitos14 Mar 24, 2023
2e1d848
Addresses code review comments.
maarquitos14 Mar 24, 2023
38b415f
Adds context query for atomic_fence_capabilities.
maarquitos14 Mar 27, 2023
20f5e18
Updates Windows ABI.
maarquitos14 Mar 27, 2023
bef2e36
Returns minimum mandated capabilities for atomic capabilities in HIP.
maarquitos14 Mar 27, 2023
626b231
Merge remote-tracking branch 'intel/origin/sycl' into maronas/atomic_…
maarquitos14 Mar 27, 2023
cc6166e
Raise errors when querying context for atomic capabilities.
maarquitos14 Mar 27, 2023
ffc9b92
Fixes compilation error in HIP.
maarquitos14 Mar 28, 2023
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
10 changes: 7 additions & 3 deletions sycl/include/sycl/detail/pi.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,11 @@
// 12.22 Add piGetDeviceAndHostTimer to query device wall-clock timestamp
// 12.23 Added new piextEnqueueDeviceGlobalVariableWrite and
// piextEnqueueDeviceGlobalVariableRead functions.
// 12.24 Added PI_EXT_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES and
// PI_EXT_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES for piDeviceGetInfo.

#define _PI_H_VERSION_MAJOR 12
#define _PI_H_VERSION_MINOR 23
#define _PI_H_VERSION_MINOR 24

#define _PI_STRING_HELPER(a) #a
#define _PI_CONCAT(a, b) _PI_STRING_HELPER(a.b)
Expand Down Expand Up @@ -311,8 +313,8 @@ typedef enum {
// return the number of queue indices that are available for this device.
PI_EXT_INTEL_DEVICE_INFO_MAX_COMPUTE_QUEUE_INDICES = 0x10032,
PI_DEVICE_INFO_ATOMIC_64 = 0x10110,
PI_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES = 0x10111,
PI_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES = 0x11000,
PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES = 0x10111,
PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES = 0x11000,
PI_DEVICE_INFO_GPU_HW_THREADS_PER_EU = 0x10112,
PI_DEVICE_INFO_BACKEND_VERSION = 0x10113,
// Return whether bfloat16 math functions are supported by device
Expand All @@ -323,6 +325,8 @@ typedef enum {
PI_EXT_ONEAPI_DEVICE_INFO_MAX_WORK_GROUPS_3D = 0x20003,
PI_EXT_ONEAPI_DEVICE_INFO_CUDA_ASYNC_BARRIER = 0x20004,
PI_EXT_CODEPLAY_DEVICE_INFO_SUPPORTS_FUSION = 0x20005,
PI_EXT_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES = 0x20006,
PI_EXT_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES = 0x20007,
} _pi_device_info;

typedef enum {
Expand Down
10 changes: 8 additions & 2 deletions sycl/include/sycl/info/device_traits.def
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,16 @@ __SYCL_PARAM_TRAITS_SPEC(device, host_unified_memory, bool,
PI_DEVICE_INFO_HOST_UNIFIED_MEMORY)
__SYCL_PARAM_TRAITS_SPEC(device, atomic_memory_order_capabilities,
std::vector<sycl::memory_order>,
PI_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES)
PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES)
__SYCL_PARAM_TRAITS_SPEC(device, atomic_fence_order_capabilities,
std::vector<sycl::memory_order>,
PI_EXT_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES)
__SYCL_PARAM_TRAITS_SPEC(device, atomic_memory_scope_capabilities,
std::vector<sycl::memory_scope>,
PI_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES)
PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES)
__SYCL_PARAM_TRAITS_SPEC(device, atomic_fence_scope_capabilities,
std::vector<sycl::memory_scope>,
PI_EXT_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES)
__SYCL_PARAM_TRAITS_SPEC(device, profiling_timer_resolution, size_t,
PI_DEVICE_INFO_PROFILING_TIMER_RESOLUTION)
__SYCL_PARAM_TRAITS_SPEC(device, is_endian_little, bool,
Expand Down
3 changes: 3 additions & 0 deletions sycl/include/sycl/info/info_desc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ namespace device {
// atomic_fence_order_capabilities, atomic_fence_scope_capabilities, aspects,
// il_version.

struct atomic_fence_order_capabilities;
struct atomic_fence_scope_capabilities;

#define __SYCL_PARAM_TRAITS_DEPRECATED(Desc, Message) \
struct __SYCL2020_DEPRECATED(Message) Desc;
#include <sycl/info/device_traits_deprecated.def>
Expand Down
10 changes: 8 additions & 2 deletions sycl/plugins/cuda/pi_cuda.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1293,14 +1293,14 @@ pi_result cuda_piDeviceGetInfo(pi_device device, pi_device_info param_name,
return getInfo(param_value_size, param_value, param_value_size_ret,
atomic64);
}
case PI_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: {
case PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: {
pi_memory_order_capabilities capabilities =
PI_MEMORY_ORDER_RELAXED | PI_MEMORY_ORDER_ACQUIRE |
PI_MEMORY_ORDER_RELEASE | PI_MEMORY_ORDER_ACQ_REL;
return getInfo(param_value_size, param_value, param_value_size_ret,
capabilities);
}
case PI_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: {
case PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: {
int major = 0;
sycl::detail::pi::assertion(
cuDeviceGetAttribute(&major,
Expand All @@ -1315,6 +1315,12 @@ pi_result cuda_piDeviceGetInfo(pi_device device, pi_device_info param_name,
return getInfo(param_value_size, param_value, param_value_size_ret,
capabilities);
}
case PI_EXT_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES:
case PI_EXT_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES:
// There is no way to query this in the backend
setErrorMessage("CUDA backend does not support this query",
PI_ERROR_INVALID_ARG_VALUE);
return PI_ERROR_PLUGIN_SPECIFIC_ERROR;
case PI_EXT_ONEAPI_DEVICE_INFO_BFLOAT16_MATH_FUNCTIONS: {
int major = 0;
sycl::detail::pi::assertion(
Expand Down
6 changes: 4 additions & 2 deletions sycl/plugins/esimd_emulator/pi_esimd_emulator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -804,8 +804,10 @@ pi_result piDeviceGetInfo(pi_device Device, pi_device_info ParamName,
CASE_PI_UNSUPPORTED(PI_DEVICE_INFO_MAX_MEM_BANDWIDTH)
CASE_PI_UNSUPPORTED(PI_DEVICE_INFO_IMAGE_SRGB)
CASE_PI_UNSUPPORTED(PI_DEVICE_INFO_ATOMIC_64)
CASE_PI_UNSUPPORTED(PI_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES)
CASE_PI_UNSUPPORTED(PI_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES)
CASE_PI_UNSUPPORTED(PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES)
CASE_PI_UNSUPPORTED(PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES)
CASE_PI_UNSUPPORTED(PI_EXT_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES)
CASE_PI_UNSUPPORTED(PI_EXT_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES)
CASE_PI_UNSUPPORTED(PI_EXT_ONEAPI_DEVICE_INFO_MAX_GLOBAL_WORK_GROUPS)
CASE_PI_UNSUPPORTED(PI_EXT_ONEAPI_DEVICE_INFO_MAX_WORK_GROUPS_1D)
CASE_PI_UNSUPPORTED(PI_EXT_ONEAPI_DEVICE_INFO_MAX_WORK_GROUPS_2D)
Expand Down
10 changes: 7 additions & 3 deletions sycl/plugins/hip/pi_hip.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1856,7 +1856,7 @@ pi_result hip_piDeviceGetInfo(pi_device device, pi_device_info param_name,
pi_int32{1});
}

case PI_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: {
case PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: {
pi_memory_order_capabilities capabilities = PI_MEMORY_ORDER_RELAXED |
PI_MEMORY_ORDER_ACQUIRE |
PI_MEMORY_ORDER_RELEASE;
Expand Down Expand Up @@ -1889,7 +1889,9 @@ pi_result hip_piDeviceGetInfo(pi_device device, pi_device_info param_name,
}

// TODO: Investigate if this information is available on HIP.
case PI_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES:
case PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES:
case PI_EXT_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES:
case PI_EXT_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES:
case PI_DEVICE_INFO_PCI_ADDRESS:
case PI_DEVICE_INFO_GPU_EU_COUNT:
case PI_DEVICE_INFO_GPU_EU_SIMD_WIDTH:
Expand All @@ -1899,7 +1901,9 @@ pi_result hip_piDeviceGetInfo(pi_device device, pi_device_info param_name,
case PI_DEVICE_INFO_GPU_HW_THREADS_PER_EU:
case PI_DEVICE_INFO_MAX_MEM_BANDWIDTH:
case PI_EXT_ONEAPI_DEVICE_INFO_BFLOAT16_MATH_FUNCTIONS:
return PI_ERROR_INVALID_VALUE;
setErrorMessage("HIP backend does not support this query",
PI_ERROR_INVALID_ARG_VALUE);
return PI_ERROR_PLUGIN_SPECIFIC_ERROR;

default:
__SYCL_PI_HANDLE_UNKNOWN_PARAM_NAME(param_name);
Expand Down
119 changes: 116 additions & 3 deletions sycl/plugins/opencl/pi_opencl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,7 @@ pi_result piDeviceGetInfo(pi_device device, pi_device_info paramName,
// For details about Intel UUID extension, see
// sycl/doc/extensions/supported/sycl_ext_intel_device_info.md
case PI_DEVICE_INFO_UUID:
return PI_ERROR_INVALID_VALUE;
case PI_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: {
case PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: {
// This query is missing beore OpenCL 3.0
// Check version and handle appropriately
OCLV::OpenCLVersion devVer;
Expand Down Expand Up @@ -341,7 +340,7 @@ pi_result piDeviceGetInfo(pi_device device, pi_device_info paramName,

return static_cast<pi_result>(CL_SUCCESS);
}
case PI_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: {
case PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: {
// Initialize result to minimum mandated capabilities according to
// SYCL2020 4.6.3.2
// Because scopes are hierarchical, wider scopes support all narrower
Expand Down Expand Up @@ -402,6 +401,120 @@ pi_result piDeviceGetInfo(pi_device device, pi_device_info paramName,
*paramValueSizeRet = sizeof(result);
return PI_SUCCESS;
}
case PI_EXT_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: {
// Initialize result to minimum mandated capabilities according to
// SYCL2020 4.6.3.2
pi_memory_order_capabilities result =
PI_MEMORY_ORDER_RELAXED | PI_MEMORY_ORDER_ACQUIRE |
PI_MEMORY_ORDER_RELEASE | PI_MEMORY_ORDER_ACQ_REL;

OCLV::OpenCLVersion devVer;

cl_device_id deviceID = cast<cl_device_id>(device);
cl_int ret_err = getDeviceVersion(deviceID, devVer);
if (ret_err != CL_SUCCESS)
return static_cast<pi_result>(ret_err);

cl_device_atomic_capabilities devCapabilities = 0;
if (devVer >= OCLV::V3_0) {
ret_err = clGetDeviceInfo(deviceID, CL_DEVICE_ATOMIC_FENCE_CAPABILITIES,
sizeof(cl_device_atomic_capabilities),
&devCapabilities, nullptr);
if (ret_err != CL_SUCCESS)
return static_cast<pi_result>(ret_err);
assert((devCapabilities & CL_DEVICE_ATOMIC_ORDER_RELAXED) &&
"Violates minimum mandated guarantee");
assert((devCapabilities & CL_DEVICE_ATOMIC_ORDER_ACQ_REL) &&
"Violates minimum mandated guarantee");

// We already initialized to minimum mandated capabilities. Just
// check stronger orders.
if (devCapabilities & CL_DEVICE_ATOMIC_ORDER_SEQ_CST) {
result |= PI_MEMORY_ORDER_SEQ_CST;
}

} else {
// This info is only available in OpenCL version >= 3.0
// Just return minimum mandated capabilities for older versions.
// OpenCL 1.x minimum mandated capabilities are RELAXED | ACQ_REL, we
// already initialized using these.
if (devVer >= OCLV::V2_0) {
// OpenCL 2.x minimum mandated capabilities are RELAXED | ACQ_REL |
// SEQ_CST
result |= PI_MEMORY_ORDER_SEQ_CST;
}
}
if (paramValue) {
if (paramValueSize < sizeof(cl_device_atomic_capabilities))
return PI_ERROR_INVALID_VALUE;

std::memcpy(paramValue, &result, sizeof(result));
}
if (paramValueSizeRet)
*paramValueSizeRet = sizeof(result);
return PI_SUCCESS;
}
case PI_EXT_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: {
// Initialize result to minimum mandated capabilities according to
// SYCL2020 4.6.3.2.
// Because scopes are hierarchical, wider scopes support all narrower
// scopes. At a minimum, each device must support WORK_ITEM, SUB_GROUP and
// WORK_GROUP. (https://github.com/KhronosGroup/SYCL-Docs/pull/382)
pi_memory_scope_capabilities result = PI_MEMORY_SCOPE_WORK_ITEM |
PI_MEMORY_SCOPE_SUB_GROUP |
PI_MEMORY_SCOPE_WORK_GROUP;

OCLV::OpenCLVersion devVer;

cl_device_id deviceID = cast<cl_device_id>(device);
cl_int ret_err = getDeviceVersion(deviceID, devVer);
if (ret_err != CL_SUCCESS)
return static_cast<pi_result>(ret_err);

cl_device_atomic_capabilities devCapabilities = 0;
if (devVer >= OCLV::V3_0) {
ret_err = clGetDeviceInfo(deviceID, CL_DEVICE_ATOMIC_FENCE_CAPABILITIES,
sizeof(cl_device_atomic_capabilities),
&devCapabilities, nullptr);
if (ret_err != CL_SUCCESS)
return static_cast<pi_result>(ret_err);
assert((devCapabilities & CL_DEVICE_ATOMIC_SCOPE_WORK_GROUP) &&
"Violates minimum mandated guarantee");

// Because scopes are hierarchical, wider scopes support all narrower
// scopes. At a minimum, each device must support WORK_ITEM, SUB_GROUP and
// WORK_GROUP. (https://github.com/KhronosGroup/SYCL-Docs/pull/382)
// We already initialized to these minimum mandated capabilities. Just
// check wider scopes.
if (devCapabilities & CL_DEVICE_ATOMIC_SCOPE_DEVICE) {
result |= PI_MEMORY_SCOPE_DEVICE;
}

if (devCapabilities & CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES) {
result |= PI_MEMORY_SCOPE_SYSTEM;
}

} else {
// This info is only available in OpenCL version >= 3.0
// Just return minimum mandated capabilities for older versions.
// OpenCL 1.x minimum mandated capabilities are WORK_GROUP, we
// already initialized using it.
if (devVer >= OCLV::V2_0) {
// OpenCL 2.x minimum mandated capabilities are WORK_GROUP | DEVICE |
// ALL_DEVICES
result |= PI_MEMORY_SCOPE_DEVICE | PI_MEMORY_SCOPE_SYSTEM;
}
}
if (paramValue) {
if (paramValueSize < sizeof(cl_device_atomic_capabilities))
return PI_ERROR_INVALID_VALUE;

std::memcpy(paramValue, &result, sizeof(result));
}
if (paramValueSizeRet)
*paramValueSizeRet = sizeof(result);
return PI_SUCCESS;
}
case PI_DEVICE_INFO_ATOMIC_64: {
cl_int ret_err = CL_SUCCESS;
cl_bool result = CL_FALSE;
Expand Down
37 changes: 34 additions & 3 deletions sycl/plugins/unified_runtime/pi2ur.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,33 @@ inline pi_result ur2piInfoValue(ur_device_info_t ParamName,
{UR_DEVICE_LOCAL_MEM_TYPE_GLOBAL, PI_DEVICE_LOCAL_MEM_TYPE_GLOBAL},
};
return Value.convert(Map);
} else if (ParamName == UR_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES ||
ParamName == UR_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES) {
static std::unordered_map<ur_memory_order_capability_flag_t,
pi_memory_order_capabilities>
Map = {
{UR_MEMORY_ORDER_CAPABILITY_FLAG_RELAXED, PI_MEMORY_ORDER_RELAXED},
{UR_MEMORY_ORDER_CAPABILITY_FLAG_ACQUIRE, PI_MEMORY_ORDER_ACQUIRE},
{UR_MEMORY_ORDER_CAPABILITY_FLAG_RELEASE, PI_MEMORY_ORDER_RELEASE},
{UR_MEMORY_ORDER_CAPABILITY_FLAG_ACQ_REL, PI_MEMORY_ORDER_ACQ_REL},
{UR_MEMORY_ORDER_CAPABILITY_FLAG_SEQ_CST, PI_MEMORY_ORDER_SEQ_CST},
};
return Value.convertBitSet(Map);
} else if (ParamName == UR_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES ||
ParamName == UR_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES) {
static std::unordered_map<ur_memory_scope_capability_flag_t,
pi_memory_scope_capabilities>
Map = {
{UR_MEMORY_SCOPE_CAPABILITY_FLAG_WORK_ITEM,
PI_MEMORY_SCOPE_WORK_ITEM},
{UR_MEMORY_SCOPE_CAPABILITY_FLAG_SUB_GROUP,
PI_MEMORY_SCOPE_SUB_GROUP},
{UR_MEMORY_SCOPE_CAPABILITY_FLAG_WORK_GROUP,
PI_MEMORY_SCOPE_WORK_GROUP},
{UR_MEMORY_SCOPE_CAPABILITY_FLAG_DEVICE, PI_MEMORY_SCOPE_DEVICE},
{UR_MEMORY_SCOPE_CAPABILITY_FLAG_SYSTEM, PI_MEMORY_SCOPE_SYSTEM},
};
return Value.convertBitSet(Map);
} else {
// TODO: what else needs a UR-PI translation?
}
Expand Down Expand Up @@ -484,10 +511,14 @@ inline pi_result piDeviceGetInfo(pi_device Device, pi_device_info ParamName,
(ur_device_info_t)UR_EXT_DEVICE_INFO_MAX_MEM_BANDWIDTH},
{PI_EXT_ONEAPI_DEVICE_INFO_BFLOAT16_MATH_FUNCTIONS,
(ur_device_info_t)UR_DEVICE_INFO_BFLOAT16},
{PI_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES,
(ur_device_info_t)UR_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES},
{PI_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES,
{PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES,
(ur_device_info_t)UR_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES},
{PI_EXT_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES,
(ur_device_info_t)UR_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES},
{PI_EXT_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES,
(ur_device_info_t)UR_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES},
{PI_EXT_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES,
(ur_device_info_t)UR_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES},
};

auto InfoType = InfoMapping.find(ParamName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1185,6 +1185,30 @@ ur_result_t urDeviceGetInfo(

return ReturnValue(result);
}
case UR_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: {
// There are no explicit restrictions in L0 programming guide, so assume all
// are supported
ur_memory_order_capability_flags_t result =
UR_MEMORY_ORDER_CAPABILITY_FLAG_RELAXED |
UR_MEMORY_ORDER_CAPABILITY_FLAG_ACQUIRE |
UR_MEMORY_ORDER_CAPABILITY_FLAG_RELEASE |
UR_MEMORY_ORDER_CAPABILITY_FLAG_ACQ_REL |
UR_MEMORY_ORDER_CAPABILITY_FLAG_SEQ_CST;

return ReturnValue(result);
}
case UR_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: {
// There are no explicit restrictions in L0 programming guide, so assume all
// are supported
ur_memory_scope_capability_flags_t result =
UR_MEMORY_SCOPE_CAPABILITY_FLAG_WORK_ITEM |
UR_MEMORY_SCOPE_CAPABILITY_FLAG_SUB_GROUP |
UR_MEMORY_SCOPE_CAPABILITY_FLAG_WORK_GROUP |
UR_MEMORY_SCOPE_CAPABILITY_FLAG_DEVICE |
UR_MEMORY_SCOPE_CAPABILITY_FLAG_SYSTEM;

return ReturnValue(result);
}

case UR_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: {
ur_memory_order_capability_flags_t capabilities =
Expand Down
4 changes: 4 additions & 0 deletions sycl/plugins/unified_runtime/ur/ur.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ const int UR_EXT_DEVICE_INFO_FREE_MEMORY = UR_EXT_DEVICE_INFO_END - 13;
// const int ZER_EXT_DEVICE_INFO_DEVICE_ID = UR_EXT_DEVICE_INFO_END - 14;
// const int ZER_EXT_DEVICE_INFO_IMAGE_MAX_ARRAY_SIZE =
// UR_DEVICE_INFO_IMAGE_MAX_ARRAY_SIZE;
const int UR_DEVICE_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES =
UR_EXT_DEVICE_INFO_END - 16;
const int UR_DEVICE_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES =
UR_EXT_DEVICE_INFO_END - 17;
Comment on lines +46 to +49
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kbenzie: please take this change into UR


const ur_device_info_t UR_EXT_DEVICE_INFO_OPENCL_C_VERSION =
(ur_device_info_t)0x103D;
Expand Down
Loading