From fd9f3116711595cbc113e5494bbd1a94b16202f7 Mon Sep 17 00:00:00 2001 From: Shane-J-Latham <shane.latham@anu.edu.au> Date: Sun, 12 Jun 2016 00:11:18 +1000 Subject: [PATCH] Export various vendor extension device attributes to python. --- doc/make_constants.py | 22 ++++++++++++++ src/c_wrapper/device.cpp | 48 ++++++++++++++++++++++++++++- src/c_wrapper/wrap_constants.cpp | 52 ++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 1 deletion(-) diff --git a/doc/make_constants.py b/doc/make_constants.py index bd2acc57..0ccf5d9a 100644 --- a/doc/make_constants.py +++ b/doc/make_constants.py @@ -27,11 +27,16 @@ import pyopencl as cl fission = ("cl_ext_device_fission", "2011.1") nv_devattr = ("cl_nv_device_attribute_query", "0.92") gl_sharing = ("cl_khr_gl_sharing", "0.92") +cl_spir_devattr = ("cl_khr_spir", "2016.2") cl_11 = ("CL_1.1", "0.92") cl_12 = ("CL_1.2", "2011.2") cl_12_2015 = ("CL_1.2", "2015.2") cl_20 = ("CL_2.0", "2015.2") 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") +intel_ss_devattr = ("cl_intel_simultaneous_sharing", "2016.2") +altera_temp_devattr = ("cl_altera_device_temperature", "2016.2") def get_extra_lines(tup): @@ -90,6 +95,7 @@ const_ext_lookup = { "NATIVE_VECTOR_WIDTH_DOUBLE": cl_11, "NATIVE_VECTOR_WIDTH_HALF": cl_11, "OPENCL_C_VERSION": cl_11, + "SPIR_VERSIONS": cl_spir_devattr, "COMPUTE_CAPABILITY_MAJOR_NV": nv_devattr, "COMPUTE_CAPABILITY_MINOR_NV": nv_devattr, "REGISTERS_PER_BLOCK_NV": nv_devattr, @@ -97,6 +103,9 @@ const_ext_lookup = { "GPU_OVERLAP_NV": nv_devattr, "KERNEL_EXEC_TIMEOUT_NV": nv_devattr, "INTEGRATED_MEMORY_NV": nv_devattr, + "ATTRIBUTE_ASYNC_ENGINE_COUNT_NV": nv_devattr, + "PCI_BUS_ID_NV": nv_devattr, + "PCI_BUS_SLOT_NV": nv_devattr, "DOUBLE_FP_CONFIG": ("cl_khr_fp64", "2011.1"), @@ -116,6 +125,19 @@ const_ext_lookup = { "GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD": amd_devattr, "LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD": amd_devattr, "LOCAL_MEM_BANKS_AMD": amd_devattr, + "THREAD_TRACE_SUPPORTED_AMD": amd_devattr, + "GFXIP_MAJOR_AMD": amd_devattr, + "GFXIP_MINOR_AMD": amd_devattr, + "AVAILABLE_ASYNC_QUEUES_AMD": amd_devattr, + + "ME_VERSION_INTEL": intel_me_devattr, + "SIMULTANEOUS_INTEROPS_INTEL": intel_ss_devattr, + "NUM_SIMULTANEOUS_INTEROPS_INTEL": intel_ss_devattr, + + "EXT_MEM_PADDING_IN_BYTES_QCOM": qcom_hp_devattr, + "PAGE_SIZE_QCOM": qcom_devattr, + + "CORE_TEMPERATURE_ALTERA": altera_temp_devattr, "MAX_ATOMIC_COUNTERS_EXT": ("cl_ext_atomic_counters_64", "2013.2"), diff --git a/src/c_wrapper/device.cpp b/src/c_wrapper/device.cpp index 5e9ec8fc..4bb882ca 100644 --- a/src/c_wrapper/device.cpp +++ b/src/c_wrapper/device.cpp @@ -143,6 +143,15 @@ device::get_info(cl_uint param_name) const case CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV: case CL_DEVICE_REGISTERS_PER_BLOCK_NV: case CL_DEVICE_WARP_SIZE_NV: +#ifdef CL_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT_NV + case CL_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT_NV: +#endif +#ifdef CL_DEVICE_PCI_BUS_ID_NV + case CL_DEVICE_PCI_BUS_ID_NV: +#endif +#ifdef CL_DEVICE_PCI_SLOT_ID_NV + case CL_DEVICE_PCI_SLOT_ID_NV: +#endif return DEV_GET_INT_INF(cl_uint); case CL_DEVICE_GPU_OVERLAP_NV: case CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV: @@ -223,6 +232,10 @@ device::get_info(cl_uint param_name) const case CL_DEVICE_TOPOLOGY_AMD: #endif */ +#ifdef CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD + case CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD: + return DEV_GET_INT_INF(cl_bool); +#endif #ifdef CL_DEVICE_BOARD_NAME_AMD case CL_DEVICE_BOARD_NAME_AMD: ; return pyopencl_get_str_info(Device, PYOPENCL_CL_CASTABLE_THIS, param_name); @@ -259,12 +272,45 @@ device::get_info(cl_uint param_name) const #ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD case CL_DEVICE_LOCAL_MEM_BANKS_AMD: #endif - #ifdef CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT case CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT: +#endif +#ifdef CL_DEVICE_GFXIP_MAJOR_AMD + case CL_DEVICE_GFXIP_MAJOR_AMD: +#endif +#ifdef CL_DEVICE_GFXIP_MINOR_AMD + case CL_DEVICE_GFXIP_MINOR_AMD: +#endif +#ifdef CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD + case CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD: #endif return DEV_GET_INT_INF(cl_uint); // }}} +#ifdef CL_DEVICE_ME_VERSION_INTEL + case CL_DEVICE_ME_VERSION_INTEL: +#endif +#ifdef CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM + case CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM: +#endif +#ifdef CL_DEVICE_PAGE_SIZE_QCOM + case CL_DEVICE_PAGE_SIZE_QCOM: +#endif +#ifdef CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL + case CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL: +#endif + return DEV_GET_INT_INF(cl_uint); +#ifdef CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL + case CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL: + return pyopencl_get_array_info(cl_uint, Device, PYOPENCL_CL_CASTABLE_THIS, param_name); +#endif +#ifdef CL_DEVICE_SPIR_VERSIONS + case CL_DEVICE_SPIR_VERSIONS: + return pyopencl_get_str_info(Device, PYOPENCL_CL_CASTABLE_THIS, param_name); +#endif +#ifdef CL_DEVICE_CORE_TEMPERATURE_ALTERA + case CL_DEVICE_CORE_TEMPERATURE_ALTERA: + return DEV_GET_INT_INF(cl_int); +#endif default: throw clerror("Device.get_info", CL_INVALID_VALUE); diff --git a/src/c_wrapper/wrap_constants.cpp b/src/c_wrapper/wrap_constants.cpp index 1a024550..bfa882a6 100644 --- a/src/c_wrapper/wrap_constants.cpp +++ b/src/c_wrapper/wrap_constants.cpp @@ -201,6 +201,16 @@ void populate_constants(void(*add)(const char*, const char*, int64_t value)) ADD_ATTR("device_info", DEVICE_, GPU_OVERLAP_NV); ADD_ATTR("device_info", DEVICE_, KERNEL_EXEC_TIMEOUT_NV); ADD_ATTR("device_info", DEVICE_, INTEGRATED_MEMORY_NV); + // Nvidia specific device attributes, not defined in Khronos CL/cl_ext.h +#ifdef CL_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT_NV + ADD_ATTR("device_info", DEVICE_, ATTRIBUTE_ASYNC_ENGINE_COUNT_NV); +#endif +#ifdef CL_DEVICE_PCI_BUS_ID_NV + ADD_ATTR("device_info", DEVICE_, PCI_BUS_ID_NV); +#endif +#ifdef CL_DEVICE_PCI_SLOT_ID_NV + ADD_ATTR("device_info", DEVICE_, PCI_SLOT_ID_NV); +#endif #endif #ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD ADD_ATTR("device_info", DEVICE_, PROFILING_TIMER_OFFSET_AMD); @@ -242,6 +252,19 @@ void populate_constants(void(*add)(const char*, const char*, int64_t value)) ADD_ATTR("device_info", DEVICE_, LOCAL_MEM_BANKS_AMD); #endif +#ifdef CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD + ADD_ATTR("device_info", DEVICE_, THREAD_TRACE_SUPPORTED_AMD); +#endif +#ifdef CL_DEVICE_GFXIP_MAJOR_AMD + ADD_ATTR("device_info", DEVICE_, GFXIP_MAJOR_AMD); +#endif +#ifdef CL_DEVICE_GFXIP_MINOR_AMD + ADD_ATTR("device_info", DEVICE_, GFXIP_MINOR_AMD); +#endif +#ifdef CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD + ADD_ATTR("device_info", DEVICE_, AVAILABLE_ASYNC_QUEUES_AMD); +#endif + #ifdef CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT ADD_ATTR("device_info", DEVICE_, MAX_ATOMIC_COUNTERS_EXT); #endif @@ -280,7 +303,36 @@ void populate_constants(void(*add)(const char*, const char*, int64_t value)) ADD_ATTR("device_info", DEVICE_, PREFERRED_GLOBAL_ATOMIC_ALIGNMENT); ADD_ATTR("device_info", DEVICE_, PREFERRED_LOCAL_ATOMIC_ALIGNMENT); #endif + /* cl_intel_advanced_motion_estimation */ +#ifdef CL_DEVICE_ME_VERSION_INTEL + ADD_ATTR("device_info", DEVICE_, ME_VERSION_INTEL); +#endif + /* cl_qcom_ext_host_ptr */ +#ifdef CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM + ADD_ATTR("device_info", DEVICE_, EXT_MEM_PADDING_IN_BYTES_QCOM); +#endif +#ifdef CL_DEVICE_PAGE_SIZE_QCOM + ADD_ATTR("device_info", DEVICE_, PAGE_SIZE_QCOM); +#endif + + /* cl_khr_spir */ +#ifdef CL_DEVICE_SPIR_VERSIONS + ADD_ATTR("device_info", DEVICE_, SPIR_VERSIONS); +#endif + + /* cl_altera_device_temperature */ +#ifdef CL_DEVICE_CORE_TEMPERATURE_ALTERA + ADD_ATTR("device_info", DEVICE_, CORE_TEMPERATURE_ALTERA); +#endif + + /* cl_intel_simultaneous_sharing */ +#ifdef CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL + ADD_ATTR("device_info", DEVICE_, SIMULTANEOUS_INTEROPS_INTEL); +#endif +#ifdef CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL + ADD_ATTR("device_info", DEVICE_, NUM_SIMULTANEOUS_INTEROPS_INTEL); +#endif // device_fp_config ADD_ATTR("device_fp_config", FP_, DENORM); -- GitLab