Skip to content

Commit 8feb558

Browse files
[SYCL] Add check for atomic64 support (#5430)
Added check for atomic64 support for OpenCL and L0.
1 parent 265c5c2 commit 8feb558

File tree

3 files changed

+18
-19
lines changed

3 files changed

+18
-19
lines changed

sycl/plugins/level_zero/pi_level_zero.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2271,6 +2271,9 @@ pi_result piDeviceGetInfo(pi_device Device, pi_device_info ParamName,
22712271
// std::array<std::byte, 16>. For details about this extension,
22722272
// see sycl/doc/extensions/supported/sycl_ext_intel_device_info.md.
22732273
return ReturnValue(Device->ZeDeviceProperties->uuid.id);
2274+
case PI_DEVICE_INFO_ATOMIC_64:
2275+
return ReturnValue(pi_bool{Device->ZeDeviceModuleProperties->flags &
2276+
ZE_DEVICE_MODULE_FLAG_INT64_ATOMICS});
22742277
case PI_DEVICE_INFO_EXTENSIONS: {
22752278
// Convention adopted from OpenCL:
22762279
// "Returns a space separated list of extension names (the extension

sycl/plugins/opencl/pi_opencl.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,24 @@ pi_result piDeviceGetInfo(pi_device device, pi_device_info paramName,
193193
// For details about Intel UUID extension, see
194194
// sycl/doc/extensions/supported/sycl_ext_intel_device_info.md
195195
case PI_DEVICE_INFO_UUID:
196-
// TODO: Implement.
197-
case PI_DEVICE_INFO_ATOMIC_64:
198196
case PI_DEVICE_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES:
199197
case PI_DEVICE_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES:
200198
return PI_INVALID_VALUE;
199+
case PI_DEVICE_INFO_ATOMIC_64: {
200+
size_t extSize;
201+
cl_bool result = clGetDeviceInfo(
202+
cast<cl_device_id>(device), CL_DEVICE_EXTENSIONS, 0, nullptr, &extSize);
203+
std::string extStr(extSize, '\0');
204+
result = clGetDeviceInfo(cast<cl_device_id>(device), CL_DEVICE_EXTENSIONS,
205+
extSize, &extStr.front(), nullptr);
206+
if (extStr.find("cl_khr_int64_base_atomics") == std::string::npos ||
207+
extStr.find("cl_khr_int64_extended_atomics") == std::string::npos)
208+
result = false;
209+
else
210+
result = true;
211+
std::memcpy(paramValue, &result, sizeof(cl_bool));
212+
return PI_SUCCESS;
213+
}
201214
case PI_DEVICE_INFO_IMAGE_SRGB: {
202215
cl_bool result = true;
203216
std::memcpy(paramValue, &result, sizeof(cl_bool));

sycl/source/detail/device_info.hpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -234,23 +234,6 @@ template <> struct get_device_info<bool, info::device::queue_profiling> {
234234
}
235235
};
236236

237-
// Specialization for atomic64 that is necessary because
238-
// PI_DEVICE_INFO_ATOMIC_64 is currently only implemented for the cuda backend.
239-
template <> struct get_device_info<bool, info::device::atomic64> {
240-
static bool get(RT::PiDevice dev, const plugin &Plugin) {
241-
242-
bool result = false;
243-
244-
RT::PiResult Err = Plugin.call_nocheck<PiApiKind::piDeviceGetInfo>(
245-
dev, pi::cast<RT::PiDeviceInfo>(info::device::atomic64), sizeof(result),
246-
&result, nullptr);
247-
if (Err != PI_SUCCESS) {
248-
return false;
249-
}
250-
return result;
251-
}
252-
};
253-
254237
// Specialization for atomic_memory_order_capabilities, PI returns a bitfield
255238
template <>
256239
struct get_device_info<std::vector<memory_order>,

0 commit comments

Comments
 (0)