diff --git a/api/cl_khr_unified_svm.asciidoc b/api/cl_khr_unified_svm.asciidoc new file mode 100644 index 000000000..0754b6501 --- /dev/null +++ b/api/cl_khr_unified_svm.asciidoc @@ -0,0 +1,101 @@ +// Copyright 2025 The Khronos Group Inc. +// SPDX-License-Identifier: CC-BY-4.0 + +include::{generated}/meta/{refprefix}cl_khr_unified_svm.txt[] + +=== Other Extension Metadata + +*Last Modified Date*:: + 2025-08-30 +*IP Status*:: + No known IP claims. +*Contributors*:: + - Brice Videau, Argonne National Laboratory + - Kévin Petit, Arm Ltd. + - Ewan Crawford, Codeplay Software Ltd. + - Paul Fradgley, Imagination Technologies + - Ben Ashbaugh, Intel + - Pekka Jääskeläinen, Intel + - Nikhil Joshi, NVIDIA + - Balaji Calidas, Qualcomm Technologies Inc. + +=== Description + +This extension adds additional types of Shared Virtual Memory (SVM) to OpenCL. + +The extension is still under development. +To learn more about the APIs proposed for this extension, or to provide feedback, please visit: + +https://github.com/KhronosGroup/OpenCL-Docs/pull/1282 + +=== New Commands + + * {clSVMAllocWithPropertiesKHR}[[clSVMAllocWithPropertiesKHR]] + * {clSVMFreeWithPropertiesKHR}[[clSVMFreeWithPropertiesKHR]] + * {clGetSVMPointerInfoKHR}[[clGetSVMPointerInfoKHR]] + * {clGetSVMSuggestedTypeIndexKHR}[[clGetSVMSuggestedTypeIndexKHR]] + +=== New Types + + * {cl_svm_capabilities_khr_TYPE} + * {cl_svm_alloc_properties_khr_TYPE} + * {cl_svm_alloc_access_flags_khr_TYPE} + * {cl_svm_free_properties_khr_TYPE} + * {cl_svm_free_flags_khr_TYPE} + * {cl_svm_pointer_info_khr_TYPE} + +=== New Enums + + * {cl_platform_info_TYPE} + ** {CL_PLATFORM_SVM_TYPE_CAPABILITIES_KHR_ANCHOR} + * {cl_device_info_TYPE} + ** {CL_DEVICE_SVM_TYPE_CAPABILITIES_KHR_ANCHOR} + * {cl_svm_capabilities_khr_TYPE} + ** {CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_SYSTEM_ALLOCATED_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_DEVICE_OWNED_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_DEVICE_UNASSOCIATED_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_CONTEXT_ACCESS_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_HOST_OWNED_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_HOST_READ_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_HOST_WRITE_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_HOST_MAP_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_DEVICE_READ_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_DEVICE_WRITE_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_DEVICE_ATOMIC_ACCESS_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_CONCURRENT_ATOMIC_ACCESS_KHR_ANCHOR} + ** {CL_SVM_CAPABILITY_INDIRECT_ACCESS_KHR_ANCHOR} + * {cl_svm_alloc_properties_khr_TYPE} + ** {CL_SVM_ALLOC_ASSOCIATED_DEVICE_HANDLE_KHR_ANCHOR} + ** {CL_SVM_ALLOC_ACCESS_FLAGS_KHR_ANCHOR} + ** {CL_SVM_ALLOC_ALIGNMENT_KHR_ANCHOR} + * {cl_svm_alloc_access_flags_khr_TYPE} + ** {CL_SVM_ALLOC_ACCESS_HOST_NOREAD_KHR_ANCHOR} + ** {CL_SVM_ALLOC_ACCESS_HOST_NOWRITE_KHR_ANCHOR} + ** {CL_SVM_ALLOC_ACCESS_DEVICE_NOREAD_KHR_ANCHOR} + ** {CL_SVM_ALLOC_ACCESS_DEVICE_NOWRITE_KHR_ANCHOR} + * {cl_svm_pointer_info_khr_TYPE} + ** {CL_SVM_INFO_TYPE_INDEX_KHR_ANCHOR} + ** {CL_SVM_INFO_CAPABILITIES_KHR_ANCHOR} + ** {CL_SVM_INFO_PROPERTIES_KHR_ANCHOR} + ** {CL_SVM_INFO_ACCESS_FLAGS_KHR_ANCHOR} + ** {CL_SVM_INFO_BASE_PTR_KHR_ANCHOR} + ** {CL_SVM_INFO_SIZE_KHR_ANCHOR} + ** {CL_SVM_INFO_ASSOCIATED_DEVICE_HANDLE_KHR_ANCHOR} + * {cl_kernel_exec_info_TYPE} + ** {CL_KERNEL_EXEC_INFO_SVM_INDIRECT_ACCESS_KHR_ANCHOR} + +=== SVM Type Convenience Macros + + * {CL_SVM_TYPE_MACRO_COARSE_GRAIN_BUFFER_KHR_ANCHOR} + * {CL_SVM_TYPE_MACRO_FINE_GRAIN_BUFFER_KHR_ANCHOR} + * {CL_SVM_TYPE_MACRO_DEVICE_KHR_ANCHOR} + * {CL_SVM_TYPE_MACRO_HOST_KHR_ANCHOR} + * {CL_SVM_TYPE_MACRO_SINGLE_DEVICE_SHARED_KHR_ANCHOR} + * {CL_SVM_TYPE_MACRO_SYSTEM_KHR_ANCHOR} + +=== Version History + + * Revision 0.9.0, 2025-08-30 + ** Initial revision incorporated into the main specification (experimental). diff --git a/xml/cl.xml b/xml/cl.xml index 66210fcc9..4b83de45d 100644 --- a/xml/cl.xml +++ b/xml/cl.xml @@ -258,6 +258,12 @@ server's OpenCL/api-docs repository. typedef cl_bitfield cl_device_kernel_clock_capabilities_khr; typedef cl_ulong cl_mem_device_address_ext; typedef cl_uint cl_perf_hint_qcom; + typedef cl_bitfield cl_svm_capabilities_khr; + typedef cl_properties cl_svm_alloc_properties_khr; + typedef cl_bitfield cl_svm_alloc_access_flags_khr; + typedef cl_properties cl_svm_free_properties_khr; + typedef cl_bitfield cl_svm_free_flags_khr; + typedef cl_uint cl_svm_pointer_info_khr; Structure types @@ -394,6 +400,69 @@ server's OpenCL/api-docs repository. #endif + #define CL_SVM_TYPE_MACRO_COARSE_GRAIN_BUFFER_KHR \ + (CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_UNASSOCIATED_KHR | \ + CL_SVM_CAPABILITY_CONTEXT_ACCESS_KHR | \ + CL_SVM_CAPABILITY_HOST_MAP_KHR | \ + CL_SVM_CAPABILITY_DEVICE_READ_KHR | \ + CL_SVM_CAPABILITY_DEVICE_WRITE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_ATOMIC_ACCESS_KHR) + + #define CL_SVM_TYPE_MACRO_FINE_GRAIN_BUFFER_KHR \ + (CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_UNASSOCIATED_KHR | \ + CL_SVM_CAPABILITY_CONTEXT_ACCESS_KHR | \ + CL_SVM_CAPABILITY_HOST_READ_KHR | \ + CL_SVM_CAPABILITY_HOST_WRITE_KHR | \ + CL_SVM_CAPABILITY_HOST_MAP_KHR | \ + CL_SVM_CAPABILITY_DEVICE_READ_KHR | \ + CL_SVM_CAPABILITY_DEVICE_WRITE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_ATOMIC_ACCESS_KHR | \ + CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR) + + #define CL_SVM_TYPE_MACRO_DEVICE_KHR \ + (CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_OWNED_KHR | \ + CL_SVM_CAPABILITY_DEVICE_READ_KHR | \ + CL_SVM_CAPABILITY_DEVICE_WRITE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_ATOMIC_ACCESS_KHR | \ + CL_SVM_CAPABILITY_INDIRECT_ACCESS_KHR) + + #define CL_SVM_TYPE_MACRO_HOST_KHR \ + (CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_UNASSOCIATED_KHR | \ + CL_SVM_CAPABILITY_CONTEXT_ACCESS_KHR | \ + CL_SVM_CAPABILITY_HOST_OWNED_KHR | \ + CL_SVM_CAPABILITY_HOST_READ_KHR | \ + CL_SVM_CAPABILITY_HOST_WRITE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_READ_KHR | \ + CL_SVM_CAPABILITY_DEVICE_WRITE_KHR | \ + CL_SVM_CAPABILITY_INDIRECT_ACCESS_KHR) + + #define CL_SVM_TYPE_MACRO_SINGLE_DEVICE_SHARED_KHR \ + (CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_KHR | \ + CL_SVM_CAPABILITY_HOST_READ_KHR | \ + CL_SVM_CAPABILITY_HOST_WRITE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_READ_KHR | \ + CL_SVM_CAPABILITY_DEVICE_WRITE_KHR | \ + CL_SVM_CAPABILITY_INDIRECT_ACCESS_KHR) + + #define CL_SVM_TYPE_MACRO_SYSTEM_KHR \ + (CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_KHR | \ + CL_SVM_CAPABILITY_SYSTEM_ALLOCATED_KHR | \ + CL_SVM_CAPABILITY_DEVICE_UNASSOCIATED_KHR | \ + CL_SVM_CAPABILITY_CONTEXT_ACCESS_KHR | \ + CL_SVM_CAPABILITY_HOST_READ_KHR | \ + CL_SVM_CAPABILITY_HOST_WRITE_KHR | \ + CL_SVM_CAPABILITY_HOST_MAP_KHR | \ + CL_SVM_CAPABILITY_DEVICE_READ_KHR | \ + CL_SVM_CAPABILITY_DEVICE_WRITE_KHR | \ + CL_SVM_CAPABILITY_DEVICE_ATOMIC_ACCESS_KHR | \ + CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR | \ + CL_SVM_CAPABILITY_CONCURRENT_ATOMIC_ACCESS_KHR | \ + CL_SVM_CAPABILITY_INDIRECT_ACCESS_KHR) + @@ -1251,12 +1320,40 @@ server's OpenCL/api-docs repository. + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1407,6 +1504,10 @@ server's OpenCL/api-docs repository. + + + + In order to synchronize vendor IDs across Khronos APIs, Vulkan's vk.xml @@ -1434,7 +1535,8 @@ server's OpenCL/api-docs repository. - + + @@ -1567,7 +1669,8 @@ server's OpenCL/api-docs repository. - + + @@ -1752,7 +1855,8 @@ server's OpenCL/api-docs repository. - + + @@ -1922,7 +2026,17 @@ server's OpenCL/api-docs repository. - + + + + + + + + + + + @@ -2233,8 +2347,11 @@ server's OpenCL/api-docs repository. + + + @@ -3376,6 +3493,40 @@ server's OpenCL/api-docs repository. cl_mem buffer cl_mem content_size_buffer + + void* clSVMAllocWithPropertiesKHR + cl_context context + const cl_svm_alloc_properties_khr* properties + cl_uint svm_type_index + size_t size + cl_int* errcode_ret + + + cl_int clSVMFreeWithPropertiesKHR + cl_context context + const cl_svm_free_properties_khr* properties + cl_svm_free_flags_khr flags + void* ptr + + + cl_int clGetSVMPointerInfoKHR + cl_context context + cl_device_id device + const void* ptr + cl_svm_pointer_info_khr param_name + size_t param_value_size + void* param_value + size_t* param_value_size_ret + + + cl_int clGetSVMSuggestedTypeIndexKHR + cl_context context + cl_svm_capabilities_khr required_capabilities + cl_svm_capabilities_khr desired_capabilities + const cl_svm_alloc_properties_khr* properties + size_t size + cl_uint* suggested_svm_type_index + cl_int clGetPlatformIDs cl_uint num_entries @@ -7730,5 +7881,77 @@ server's OpenCL/api-docs repository. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +