From 5d2c1649f408ccd6a2bce8ef29fc78f743e1cbfc Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Wed, 9 Sep 2020 14:12:30 -0500 Subject: [PATCH] Add OpenCL 3 constants --- doc/make_constants.py | 55 ++++++++++++++++++++++++-- pyopencl/__init__.py | 7 ++++ src/wrap_constants.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+), 4 deletions(-) diff --git a/doc/make_constants.py b/doc/make_constants.py index 2e20383b..cca0b7ce 100644 --- a/doc/make_constants.py +++ b/doc/make_constants.py @@ -31,6 +31,7 @@ cl_12 = ("CL_1.2", "2011.2") cl_12_2015 = ("CL_1.2", "2015.2") cl_20 = ("CL_2.0", "2015.2") cl_21 = ("CL_2.1", "2016.2") +cl_30 = ("CL_3.0", "2020.3") amd_devattr = ("cl_amd_device_attribute_query", "2013.2") qcom_hp_devattr = ("cl_qcom_ext_host_ptr", "2016.2") intel_me_devattr = ("cl_intel_advanced_motion_estimation", "2016.2") @@ -58,6 +59,7 @@ def get_extra_lines(tup): yield " .. versionadded:: %s" % pyopencl_ver yield "" + const_ext_lookup = { cl.status_code: { "PLATFORM_NOT_FOUND_KHR": ("cl_khr_icd", "2011.1"), @@ -184,6 +186,21 @@ const_ext_lookup = { "IL_VERSION": cl_21, "MAX_NUM_SUB_GROUPS": cl_21, "SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS": cl_21, + + "NUMERIC_VERSION": cl_30, + "EXTENSIONS_WITH_VERSION": cl_30, + "ILS_WITH_VERSION": cl_30, + "BUILT_IN_KERNELS_WITH_VERSION": cl_30, + "ATOMIC_MEMORY_CAPABILITIES": cl_30, + "ATOMIC_FENCE_CAPABILITIES": cl_30, + "NON_UNIFORM_WORK_GROUP_SUPPORT": cl_30, + "OPENCL_C_ALL_VERSIONS": cl_30, + "PREFERRED_WORK_GROUP_SIZE_MULTIPLE": cl_30, + "WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT": cl_30, + "GENERIC_ADDRESS_SPACE_SUPPORT": cl_30, + "OPENCL_C_FEATURES": cl_30, + "DEVICE_ENQUEUE_SUPPORT": cl_30, + "PIPE_SUPPORT": cl_30, }, cl.mem_object_type: { @@ -251,6 +268,7 @@ const_ext_lookup = { "MIP_FILTER_MODE": cl_20, "LOD_MIN": cl_20, "LOD_MAX": cl_20, + "PROPERTIES": cl_30, }, cl.event_info: { @@ -271,6 +289,12 @@ const_ext_lookup = { "NUM_SAMPLES": cl_12, }, + cl.pipe_info: { + "PACKET_SIZE": ("CL_2.0", "2020.3"), + "MAX_PACKETS": ("CL_2.0", "2020.3"), + "PROPERTIES": cl_30, + }, + cl.map_flags: { "WRITE_INVALIDATE_REGION": cl_12, }, @@ -343,6 +367,7 @@ const_ext_lookup = { "SVM_MEMFILL": cl_20, "SVM_MAP": cl_20, "SVM_UNMAP": cl_20, + "SVM_MIGRATE_MEM": cl_30, }, cl.command_queue_info: { @@ -396,6 +421,16 @@ const_ext_lookup = { "NEXT_PARITIONNABLE": cl_12, }, + cl.device_atomic_capabilities: { + "ORDER_RELAXED": cl_30, + "ORDER_ACQ_REL": cl_30, + "ORDER_SEQ_CST": cl_30, + "SCOPE_WORK_ITEM": cl_30, + "SCOPE_WORK_GROUP": cl_30, + "SCOPE_DEVICE": cl_30, + "SCOPE_ALL_DEVICES": cl_30, + }, + cl.profiling_info: { "COMPLETE": cl_20, }, @@ -405,6 +440,18 @@ const_ext_lookup = { "CONTENT_UNDEFINED": cl_12, }, + cl.version_bits: { + "MAJOR_BITS": cl_30, + "MINOR_BITS": cl_30, + "PATCH_BITS": cl_30, + "MAJOR_MASK": cl_30, + "MINOR_MASK": cl_30, + "PATCH_MASK": cl_30, + }, + + cl.khronos_vendor_id: { + "CODEPLAY": cl_30, + }, } try: gl_ci = cl.gl_context_info @@ -433,8 +480,8 @@ def doc_class(cls): print() if cls in cls_ext_lookup: - for l in get_extra_lines(cls_ext_lookup[cls]): - print(l) + for ln in get_extra_lines(cls_ext_lookup[cls]): + print(ln) cls_const_ext = const_ext_lookup.get(cls, {}) for name in sorted(dir(cls)): @@ -442,8 +489,8 @@ def doc_class(cls): print(" .. attribute :: %s" % name) if name in cls_const_ext: - for l in get_extra_lines(cls_const_ext[name]): - print(" "+l) + for ln in get_extra_lines(cls_const_ext[name]): + print(" "+ln) print(" .. method :: to_string(value)") print() diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index 4e2ef296..354b942b 100644 --- a/pyopencl/__init__.py +++ b/pyopencl/__init__.py @@ -79,6 +79,7 @@ from pyopencl._cl import ( # noqa mem_object_type, mem_info, image_info, + pipe_info, addressing_mode, filter_mode, sampler_info, @@ -102,6 +103,10 @@ from pyopencl._cl import ( # noqa mem_migration_flags, device_partition_property, device_affinity_domain, + device_atomic_capabilities, + + version_bits, + khronos_vendor_id, Error, MemoryError, LogicError, RuntimeError, @@ -229,6 +234,8 @@ BITFIELD_CONSTANT_CLASSES = ( _cl.device_svm_capabilities, _cl.queue_properties, _cl.svm_mem_flags, + _cl.device_atomic_capabilities, + _cl.version_bits, ) diff --git a/src/wrap_constants.cpp b/src/wrap_constants.cpp index 2420be38..6fc5658f 100644 --- a/src/wrap_constants.cpp +++ b/src/wrap_constants.cpp @@ -58,6 +58,7 @@ namespace class mem_object_type { }; class mem_info { }; class image_info { }; + class pipe_info { }; class addressing_mode { }; class filter_mode { }; class sampler_info { }; @@ -82,6 +83,10 @@ namespace class device_partition_property { }; class device_affinity_domain { }; + class device_atomic_capabilities { }; + + class version_bits { }; + class khronos_vendor_id { }; class gl_object_type { }; class gl_texture_info { }; @@ -249,6 +254,13 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(PLATFORM_, VENDOR); #if !(defined(CL_PLATFORM_NVIDIA) && CL_PLATFORM_NVIDIA == 0x3001) ADD_ATTR(PLATFORM_, EXTENSIONS); +#endif +#if PYOPENCL_CL_VERSION >= 0x2010 + ADD_ATTR(PLATFORM_, HOST_TIMER_RESOLUTION); +#endif +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(PLATFORM_, NUMERIC_VERSION); + ADD_ATTR(PLATFORM_, EXTENSIONS_WITH_VERSION); #endif } @@ -459,6 +471,22 @@ void pyopencl_expose_constants(py::module &m) #ifdef CL_DEVICE_ME_VERSION_INTEL ADD_ATTR(DEVICE_, ME_VERSION_INTEL); #endif +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(DEVICE_, NUMERIC_VERSION); + ADD_ATTR(DEVICE_, EXTENSIONS_WITH_VERSION); + ADD_ATTR(DEVICE_, ILS_WITH_VERSION); + ADD_ATTR(DEVICE_, BUILT_IN_KERNELS_WITH_VERSION); + ADD_ATTR(DEVICE_, ATOMIC_MEMORY_CAPABILITIES); + ADD_ATTR(DEVICE_, ATOMIC_FENCE_CAPABILITIES); + ADD_ATTR(DEVICE_, NON_UNIFORM_WORK_GROUP_SUPPORT); + ADD_ATTR(DEVICE_, OPENCL_C_ALL_VERSIONS); + ADD_ATTR(DEVICE_, PREFERRED_WORK_GROUP_SIZE_MULTIPLE); + ADD_ATTR(DEVICE_, WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT); + ADD_ATTR(DEVICE_, GENERIC_ADDRESS_SPACE_SUPPORT); + ADD_ATTR(DEVICE_, OPENCL_C_FEATURES); + ADD_ATTR(DEVICE_, DEVICE_ENQUEUE_SUPPORT); + ADD_ATTR(DEVICE_, PIPE_SUPPORT); +#endif /* cl_qcom_ext_host_ptr */ #ifdef CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM @@ -595,6 +623,9 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(QUEUE_, DEVICE); ADD_ATTR(QUEUE_, REFERENCE_COUNT); ADD_ATTR(QUEUE_, PROPERTIES); +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(QUEUE_, PROPERTIES_ARRAY); +#endif } { @@ -602,6 +633,9 @@ void pyopencl_expose_constants(py::module &m) #if PYOPENCL_CL_VERSION >= 0x2000 ADD_ATTR(QUEUE_, PROPERTIES); ADD_ATTR(QUEUE_, SIZE); +#endif +#if PYOPENCL_CL_VERSION >= 0x2010 + ADD_ATTR(QUEUE_, DEVICE_DEFAULT); #endif } @@ -712,6 +746,9 @@ void pyopencl_expose_constants(py::module &m) #endif #if PYOPENCL_CL_VERSION >= 0x2000 ADD_ATTR(MEM_, USES_SVM_POINTER); +#endif +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(MEM_, PROPERTIES); #endif } @@ -732,6 +769,16 @@ void pyopencl_expose_constants(py::module &m) #endif } + { + py::class_<pipe_info> cls(m, "pipe_info"); +#if PYOPENCL_CL_VERSION >= 0x2000 + ADD_ATTR(PIPE_, PACKET_SIZE); + ADD_ATTR(PIPE_, MAX_PACKETS); +#endif +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(PIPE_, PROPERTIES); +#endif + } { py::class_<addressing_mode> cls(m, "addressing_mode"); ADD_ATTR(ADDRESS_, NONE); @@ -760,6 +807,9 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(SAMPLER_, MIP_FILTER_MODE); ADD_ATTR(SAMPLER_, LOD_MIN); ADD_ATTR(SAMPLER_, LOD_MAX); +#endif +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(SAMPLER_, PROPERTIES); #endif } @@ -938,6 +988,9 @@ void pyopencl_expose_constants(py::module &m) ADD_ATTR(COMMAND_, SVM_MEMFILL); ADD_ATTR(COMMAND_, SVM_MAP); ADD_ATTR(COMMAND_, SVM_UNMAP); +#endif +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(COMMAND_, SVM_MIGRATE_MEM); #endif } @@ -1001,6 +1054,40 @@ void pyopencl_expose_constants(py::module &m) #endif } + { + py::class_<device_atomic_capabilities> cls(m, "device_atomic_capabilities"); +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(DEVICE_ATOMIC_, ORDER_RELAXED); + ADD_ATTR(DEVICE_ATOMIC_, ORDER_ACQ_REL); + ADD_ATTR(DEVICE_ATOMIC_, ORDER_SEQ_CST); + ADD_ATTR(DEVICE_ATOMIC_, SCOPE_WORK_ITEM); + ADD_ATTR(DEVICE_ATOMIC_, SCOPE_WORK_GROUP); + ADD_ATTR(DEVICE_ATOMIC_, SCOPE_DEVICE); + ADD_ATTR(DEVICE_ATOMIC_, SCOPE_ALL_DEVICES); +#endif + } + + { + py::class_<version_bits> cls(m, "version_bits"); +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(VERSION_, MAJOR_BITS); + ADD_ATTR(VERSION_, MINOR_BITS); + ADD_ATTR(VERSION_, PATCH_BITS); + + ADD_ATTR(VERSION_, MAJOR_MASK); + ADD_ATTR(VERSION_, MINOR_MASK); + ADD_ATTR(VERSION_, PATCH_MASK); +#endif + } + + { + py::class_<khronos_vendor_id> cls(m, "khronos_vendor_id"); +#if PYOPENCL_CL_VERSION >= 0x3000 + ADD_ATTR(KHRONOS_VENDOR_ID_, CODEPLAY); +#endif + } + + #ifdef HAVE_GL { py::class_<gl_object_type> cls(m, "gl_object_type"); -- GitLab