From 76d887331e9efc494c1e13814c50775099850d0d Mon Sep 17 00:00:00 2001 From: Aaron Greig Date: Fri, 22 Nov 2024 12:10:58 +0000 Subject: [PATCH] Remove CONTEXT_INFO_ATOMIC queries. These were used as dummy values in the sycl runtime to implement meta-queries for each device in the given context. The affiliated LLVM change for this PR updates that to use __SYCL_TRAIT_HANDLED_IN_RT instead. Fixes #2119 --- include/ur_api.h | 34 ++++------ include/ur_print.hpp | 64 ------------------- scripts/core/context.yml | 12 ---- source/adapters/cuda/context.cpp | 28 -------- source/adapters/hip/context.cpp | 8 --- source/adapters/level_zero/context.cpp | 15 ----- source/adapters/level_zero/v2/context.cpp | 6 -- source/adapters/native_cpu/context.cpp | 6 -- source/adapters/opencl/context.cpp | 8 --- source/loader/layers/validation/ur_valddi.cpp | 2 +- source/loader/ur_libapi.cpp | 2 +- source/ur_api.cpp | 2 +- test/conformance/context/urContextGetInfo.cpp | 35 ++-------- 13 files changed, 21 insertions(+), 201 deletions(-) diff --git a/include/ur_api.h b/include/ur_api.h index 3205fcb207..d3fdc0580a 100644 --- a/include/ur_api.h +++ b/include/ur_api.h @@ -2270,27 +2270,17 @@ urContextRetain( /////////////////////////////////////////////////////////////////////////////// /// @brief Supported context info typedef enum ur_context_info_t { - UR_CONTEXT_INFO_NUM_DEVICES = 0, ///< [uint32_t] The number of the devices in the context - UR_CONTEXT_INFO_DEVICES = 1, ///< [::ur_device_handle_t[]] The array of the device handles in the - ///< context - UR_CONTEXT_INFO_REFERENCE_COUNT = 2, ///< [uint32_t] Reference count of the context object. - ///< The reference count returned should be considered immediately stale. - ///< It is unsuitable for general use in applications. This feature is - ///< provided for identifying memory leaks. - UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT = 3, ///< [::ur_bool_t] to indicate if the ::urEnqueueUSMMemcpy2D entrypoint is - ///< supported. - UR_CONTEXT_INFO_USM_FILL2D_SUPPORT = 4, ///< [::ur_bool_t] to indicate if the ::urEnqueueUSMFill2D entrypoint is - ///< supported. - UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES = 5, ///< [::ur_memory_order_capability_flags_t] return a bit-field of atomic - ///< memory order capabilities. - UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES = 6, ///< [::ur_memory_scope_capability_flags_t] return a bit-field of atomic - ///< memory scope capabilities. - UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES = 7, ///< [::ur_memory_order_capability_flags_t] return a bit-field of atomic - ///< memory fence order capabilities. - ///< Zero is returned if the backend does not support context-level fences. - UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES = 8, ///< [::ur_memory_scope_capability_flags_t] return a bit-field of atomic - ///< memory fence scope capabilities. - ///< Zero is returned if the backend does not support context-level fences. + UR_CONTEXT_INFO_NUM_DEVICES = 0, ///< [uint32_t] The number of the devices in the context + UR_CONTEXT_INFO_DEVICES = 1, ///< [::ur_device_handle_t[]] The array of the device handles in the + ///< context + UR_CONTEXT_INFO_REFERENCE_COUNT = 2, ///< [uint32_t] Reference count of the context object. + ///< The reference count returned should be considered immediately stale. + ///< It is unsuitable for general use in applications. This feature is + ///< provided for identifying memory leaks. + UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT = 3, ///< [::ur_bool_t] to indicate if the ::urEnqueueUSMMemcpy2D entrypoint is + ///< supported. + UR_CONTEXT_INFO_USM_FILL2D_SUPPORT = 4, ///< [::ur_bool_t] to indicate if the ::urEnqueueUSMFill2D entrypoint is + ///< supported. /// @cond UR_CONTEXT_INFO_FORCE_UINT32 = 0x7fffffff /// @endcond @@ -2340,7 +2330,7 @@ urContextRelease( /// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE /// + `NULL == hContext` /// - ::UR_RESULT_ERROR_INVALID_ENUMERATION -/// + `::UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES < propName` +/// + `::UR_CONTEXT_INFO_USM_FILL2D_SUPPORT < propName` /// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION /// + If `propName` is not supported by the adapter. /// - ::UR_RESULT_ERROR_INVALID_SIZE diff --git a/include/ur_print.hpp b/include/ur_print.hpp index 1d28b8eac0..d7d57bcde4 100644 --- a/include/ur_print.hpp +++ b/include/ur_print.hpp @@ -5335,18 +5335,6 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_context_info_t value) case UR_CONTEXT_INFO_USM_FILL2D_SUPPORT: os << "UR_CONTEXT_INFO_USM_FILL2D_SUPPORT"; break; - case UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: - os << "UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES"; - break; - case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: - os << "UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES"; - break; - case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: - os << "UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES"; - break; - case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: - os << "UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES"; - break; default: os << "unknown enumerator"; break; @@ -5426,58 +5414,6 @@ inline ur_result_t printTagged(std::ostream &os, const void *ptr, ur_context_inf os << ")"; } break; - case UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: { - const ur_memory_order_capability_flags_t *tptr = (const ur_memory_order_capability_flags_t *)ptr; - if (sizeof(ur_memory_order_capability_flags_t) > size) { - os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_memory_order_capability_flags_t) << ")"; - return UR_RESULT_ERROR_INVALID_SIZE; - } - os << (const void *)(tptr) << " ("; - - ur::details::printFlag(os, - *tptr); - - os << ")"; - } break; - case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: { - const ur_memory_scope_capability_flags_t *tptr = (const ur_memory_scope_capability_flags_t *)ptr; - if (sizeof(ur_memory_scope_capability_flags_t) > size) { - os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_memory_scope_capability_flags_t) << ")"; - return UR_RESULT_ERROR_INVALID_SIZE; - } - os << (const void *)(tptr) << " ("; - - ur::details::printFlag(os, - *tptr); - - os << ")"; - } break; - case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: { - const ur_memory_order_capability_flags_t *tptr = (const ur_memory_order_capability_flags_t *)ptr; - if (sizeof(ur_memory_order_capability_flags_t) > size) { - os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_memory_order_capability_flags_t) << ")"; - return UR_RESULT_ERROR_INVALID_SIZE; - } - os << (const void *)(tptr) << " ("; - - ur::details::printFlag(os, - *tptr); - - os << ")"; - } break; - case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { - const ur_memory_scope_capability_flags_t *tptr = (const ur_memory_scope_capability_flags_t *)ptr; - if (sizeof(ur_memory_scope_capability_flags_t) > size) { - os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_memory_scope_capability_flags_t) << ")"; - return UR_RESULT_ERROR_INVALID_SIZE; - } - os << (const void *)(tptr) << " ("; - - ur::details::printFlag(os, - *tptr); - - os << ")"; - } break; default: os << "unknown enumerator"; return UR_RESULT_ERROR_INVALID_ENUMERATION; diff --git a/scripts/core/context.yml b/scripts/core/context.yml index e45c93010d..f422324f5f 100644 --- a/scripts/core/context.yml +++ b/scripts/core/context.yml @@ -101,18 +101,6 @@ etors: desc: "[$x_bool_t] to indicate if the $xEnqueueUSMMemcpy2D entrypoint is supported." - name: USM_FILL2D_SUPPORT desc: "[$x_bool_t] to indicate if the $xEnqueueUSMFill2D entrypoint is supported." - - name: ATOMIC_MEMORY_ORDER_CAPABILITIES - desc: "[$x_memory_order_capability_flags_t] return a bit-field of atomic memory order capabilities." - - name: ATOMIC_MEMORY_SCOPE_CAPABILITIES - desc: "[$x_memory_scope_capability_flags_t] return a bit-field of atomic memory scope capabilities." - - name: ATOMIC_FENCE_ORDER_CAPABILITIES - desc: | - [$x_memory_order_capability_flags_t] return a bit-field of atomic memory fence order capabilities. - Zero is returned if the backend does not support context-level fences. - - name: ATOMIC_FENCE_SCOPE_CAPABILITIES - desc: | - [$x_memory_scope_capability_flags_t] return a bit-field of atomic memory fence scope capabilities. - Zero is returned if the backend does not support context-level fences. --- #-------------------------------------------------------------------------- type: function desc: "Releases the context handle reference indicating end of its usage" diff --git a/source/adapters/cuda/context.cpp b/source/adapters/cuda/context.cpp index ffd991d59f..8d1adc900d 100644 --- a/source/adapters/cuda/context.cpp +++ b/source/adapters/cuda/context.cpp @@ -74,34 +74,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urContextGetInfo( hContext->getDevices().size()); case UR_CONTEXT_INFO_REFERENCE_COUNT: return ReturnValue(hContext->getReferenceCount()); - case UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: { - uint32_t Capabilities = 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; - return ReturnValue(Capabilities); - } - case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: { - int Major = 0; - UR_CHECK_ERROR(cuDeviceGetAttribute( - &Major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, - hContext->getDevices()[0]->get())); - uint32_t Capabilities = - (Major >= 7) ? 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 - : 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; - return ReturnValue(Capabilities); - } - case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { - return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; - } case UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT: // 2D USM memcpy is supported. return ReturnValue(true); diff --git a/source/adapters/hip/context.cpp b/source/adapters/hip/context.cpp index b36ed73560..30bf4743a4 100644 --- a/source/adapters/hip/context.cpp +++ b/source/adapters/hip/context.cpp @@ -69,14 +69,6 @@ urContextGetInfo(ur_context_handle_t hContext, ur_context_info_t propName, hContext->getDevices().size()); case UR_CONTEXT_INFO_REFERENCE_COUNT: return ReturnValue(hContext->getReferenceCount()); - case UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { - // These queries should be dealt with in context_impl.cpp by calling the - // queries of each device separately and building the intersection set. - return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; - } case UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT: // 2D USM memcpy is supported. return ReturnValue(true); diff --git a/source/adapters/level_zero/context.cpp b/source/adapters/level_zero/context.cpp index 7c1c412ee4..3625828ee8 100644 --- a/source/adapters/level_zero/context.cpp +++ b/source/adapters/level_zero/context.cpp @@ -116,21 +116,6 @@ ur_result_t urContextGetInfo( case UR_CONTEXT_INFO_USM_FILL2D_SUPPORT: // 2D USM fill is not supported. return ReturnValue(uint8_t{false}); - case UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: { - - ur_memory_order_capability_flags_t Capabilities = - 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(Capabilities); - } - case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { - return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; - } default: // TODO: implement other parameters diff --git a/source/adapters/level_zero/v2/context.cpp b/source/adapters/level_zero/v2/context.cpp index 89e77c98e9..50941140bb 100644 --- a/source/adapters/level_zero/v2/context.cpp +++ b/source/adapters/level_zero/v2/context.cpp @@ -180,12 +180,6 @@ ur_result_t urContextGetInfo(ur_context_handle_t hContext, case UR_CONTEXT_INFO_USM_FILL2D_SUPPORT: // 2D USM fill is not supported. return ReturnValue(uint8_t{false}); - case UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { - return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; - } default: return UR_RESULT_ERROR_INVALID_ENUMERATION; } diff --git a/source/adapters/native_cpu/context.cpp b/source/adapters/native_cpu/context.cpp index 7c178f951a..d8adffe4b5 100644 --- a/source/adapters/native_cpu/context.cpp +++ b/source/adapters/native_cpu/context.cpp @@ -60,12 +60,6 @@ urContextGetInfo(ur_context_handle_t hContext, ur_context_info_t propName, // case UR_CONTEXT_INFO_USM_MEMSET2D_SUPPORT: // 2D USM operations currently not supported. return returnValue(false); - case UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { - return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; - } default: return UR_RESULT_ERROR_INVALID_ENUMERATION; } diff --git a/source/adapters/opencl/context.cpp b/source/adapters/opencl/context.cpp index 34181eda3b..4363c4dbb2 100644 --- a/source/adapters/opencl/context.cpp +++ b/source/adapters/opencl/context.cpp @@ -83,14 +83,6 @@ urContextGetInfo(ur_context_handle_t hContext, ur_context_info_t propName, case UR_CONTEXT_INFO_USM_FILL2D_SUPPORT: { return ReturnValue(false); } - case UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: - case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { - /* These queries should be dealt with in context_impl.cpp by calling the - * queries of each device separately and building the intersection set. */ - return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; - } case UR_CONTEXT_INFO_NUM_DEVICES: case UR_CONTEXT_INFO_DEVICES: case UR_CONTEXT_INFO_REFERENCE_COUNT: { diff --git a/source/loader/layers/validation/ur_valddi.cpp b/source/loader/layers/validation/ur_valddi.cpp index 195c1d3c69..2d57ea0b70 100644 --- a/source/loader/layers/validation/ur_valddi.cpp +++ b/source/loader/layers/validation/ur_valddi.cpp @@ -931,7 +931,7 @@ __urdlllocal ur_result_t UR_APICALL urContextGetInfo( return UR_RESULT_ERROR_INVALID_NULL_POINTER; } - if (UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES < propName) { + if (UR_CONTEXT_INFO_USM_FILL2D_SUPPORT < propName) { return UR_RESULT_ERROR_INVALID_ENUMERATION; } diff --git a/source/loader/ur_libapi.cpp b/source/loader/ur_libapi.cpp index 8dca26d4ba..dfe6db43a1 100644 --- a/source/loader/ur_libapi.cpp +++ b/source/loader/ur_libapi.cpp @@ -1341,7 +1341,7 @@ ur_result_t UR_APICALL urContextRelease( /// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE /// + `NULL == hContext` /// - ::UR_RESULT_ERROR_INVALID_ENUMERATION -/// + `::UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES < propName` +/// + `::UR_CONTEXT_INFO_USM_FILL2D_SUPPORT < propName` /// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION /// + If `propName` is not supported by the adapter. /// - ::UR_RESULT_ERROR_INVALID_SIZE diff --git a/source/ur_api.cpp b/source/ur_api.cpp index 22c76f122e..535cda339f 100644 --- a/source/ur_api.cpp +++ b/source/ur_api.cpp @@ -1170,7 +1170,7 @@ ur_result_t UR_APICALL urContextRelease( /// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE /// + `NULL == hContext` /// - ::UR_RESULT_ERROR_INVALID_ENUMERATION -/// + `::UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES < propName` +/// + `::UR_CONTEXT_INFO_USM_FILL2D_SUPPORT < propName` /// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION /// + If `propName` is not supported by the adapter. /// - ::UR_RESULT_ERROR_INVALID_SIZE diff --git a/test/conformance/context/urContextGetInfo.cpp b/test/conformance/context/urContextGetInfo.cpp index 46bc2cd179..8fe13c49a9 100644 --- a/test/conformance/context/urContextGetInfo.cpp +++ b/test/conformance/context/urContextGetInfo.cpp @@ -16,26 +16,7 @@ struct urContextGetInfoTestWithInfoParam {UR_CONTEXT_INFO_DEVICES, sizeof(ur_device_handle_t)}, {UR_CONTEXT_INFO_REFERENCE_COUNT, sizeof(uint32_t)}, {UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, sizeof(bool)}, - {UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, sizeof(bool)}, - {UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES, - sizeof(ur_memory_order_capability_flags_t)}, - {UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES, - sizeof(ur_memory_order_capability_flags_t)}, - {UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES, - sizeof(ur_memory_order_capability_flags_t)}, - {UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES, - sizeof(ur_memory_order_capability_flags_t)}}; - - ctx_info_mem_flags_map = { - {UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES, - UR_MEMORY_ORDER_CAPABILITY_FLAGS_MASK}, - {UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES, - UR_MEMORY_SCOPE_CAPABILITY_FLAGS_MASK}, - {UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES, - UR_MEMORY_ORDER_CAPABILITY_FLAGS_MASK}, - {UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES, - UR_MEMORY_SCOPE_CAPABILITY_FLAGS_MASK}, - }; + {UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, sizeof(bool)}}; } void TearDown() override { @@ -51,15 +32,11 @@ struct urContextGetInfoTestWithInfoParam UUR_TEST_SUITE_P(urContextGetInfoTestWithInfoParam, ::testing::Values( - UR_CONTEXT_INFO_NUM_DEVICES, // - UR_CONTEXT_INFO_DEVICES, // - UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, // - UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, // - UR_CONTEXT_INFO_REFERENCE_COUNT, // - UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES, // - UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES, // - UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES, // - UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES // + UR_CONTEXT_INFO_NUM_DEVICES, // + UR_CONTEXT_INFO_DEVICES, // + UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, // + UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, // + UR_CONTEXT_INFO_REFERENCE_COUNT // ), uur::deviceTestWithParamPrinter);