diff --git a/doc/make_constants.py b/doc/make_constants.py index cef8c8c99c6981d0c02a34d7ffd9cb02161d9422..6416ca0f73f9041514cd3fe554b0a8a483d6b29d 100644 --- a/doc/make_constants.py +++ b/doc/make_constants.py @@ -27,6 +27,7 @@ nv_devattr = ("cl_nv_device_attribute_query", "0.92") gl_sharing = ("cl_khr_gl_sharing", "0.92") cl_11 = ("CL_1.1", "0.92") cl_12 = ("CL_1.2", "2011.2") +amd_devattr = ("cl_amd_device_attribute_query", "2013.2") def get_extra_lines(tup): @@ -95,8 +96,22 @@ const_ext_lookup = { "HALF_FP_CONFIG": ("cl_khr_fp16", "2011.1"), - "PROFILING_TIMER_OFFSET_AMD": - ("cl_amd_device_attribute_query", "2011.1"), + "PROFILING_TIMER_OFFSET_AMD": amd_devattr, + "TOPOLOGY_AMD": amd_devattr, + "BOARD_NAME_AMD": amd_devattr, + "GLOBAL_FREE_MEMORY_AMD": amd_devattr, + "SIMD_PER_COMPUTE_UNIT_AMD": amd_devattr, + "SIMD_WIDTH_AMD": amd_devattr, + "SIMD_INSTRUCTION_WIDTH_AMD": amd_devattr, + "WAVEFRONT_WIDTH_AMD": amd_devattr, + "GLOBAL_MEM_CHANNELS_AMD": amd_devattr, + "GLOBAL_MEM_CHANNEL_BANKS_AMD": amd_devattr, + "GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD": amd_devattr, + "LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD": amd_devattr, + "LOCAL_MEM_BANKS_AMD": amd_devattr, + + "MAX_ATOMIC_COUNTERS_EXT": + ("cl_ext_atomic_counters_64", "2013.2"), "PARENT_DEVICE_EXT": fission, diff --git a/pyopencl/array.py b/pyopencl/array.py index 68f28e5d160e6ff3ca25aec4a2d50213aff2979a..ea99b1115049079357ea212665f6337c9cd8a858 100644 --- a/pyopencl/array.py +++ b/pyopencl/array.py @@ -232,7 +232,7 @@ class Array(object): as in :mod:`numpy`. Arithmetic methods in :class:`Array` support the broadcasting of scalars. (e.g. `array+5`) - *cqa* must be a :class:`pyopencl.CommandQueue` or a:class:`Context`. + *cqa* must be a :class:`pyopencl.CommandQueue` or a :class:`pyopencl.Context`. If it is a queue, *cqa* specifies the queue in which the array carries out its computations by default. If a default queue (and thereby overloaded @@ -240,7 +240,8 @@ class Array(object): :class:`Context`. *cqa* will at some point be renamed *cq*, so it should be considered - 'positional-only'. + 'positional-only'. Arguments starting from 'order' should be considered + keyword-only. *allocator* may be `None` or a callable that, upon being called with an argument of the number of bytes to be allocated, returns an diff --git a/src/wrapper/wrap_cl.hpp b/src/wrapper/wrap_cl.hpp index d246f15062baf3e87f9d35967374562231ddf9af..b85cb6f0fd04786384183a05e9663eacd8aa5ce9 100644 --- a/src/wrapper/wrap_cl.hpp +++ b/src/wrapper/wrap_cl.hpp @@ -720,6 +720,62 @@ namespace pyopencl case CL_DEVICE_PREFERRED_INTEROP_USER_SYNC: DEV_GET_INT_INF(cl_bool); case CL_DEVICE_PRINTF_BUFFER_SIZE: DEV_GET_INT_INF(cl_bool); #endif +// {{{ AMD dev attrs +// +// types of AMD dev attrs divined from +// https://www.khronos.org/registry/cl/api/1.2/cl.hpp +#ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD + case CL_DEVICE_PROFILING_TIMER_OFFSET_AMD: DEV_GET_INT_INF(cl_ulong); +#endif +/* FIXME +#ifdef CL_DEVICE_TOPOLOGY_AMD + case CL_DEVICE_TOPOLOGY_AMD: +#endif +*/ +#ifdef CL_DEVICE_BOARD_NAME_AMD + case CL_DEVICE_BOARD_NAME_AMD: ; + PYOPENCL_GET_STR_INFO(Device, m_device, param_name); +#endif +#ifdef CL_DEVICE_GLOBAL_FREE_MEMORY_AMD + case CL_DEVICE_GLOBAL_FREE_MEMORY_AMD: + { + std::vector result; + PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); + PYOPENCL_RETURN_VECTOR(size_t, result); + } +#endif +#ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD + case CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_SIMD_WIDTH_AMD + case CL_DEVICE_SIMD_WIDTH_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD + case CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD + case CL_DEVICE_WAVEFRONT_WIDTH_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD + case CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD + case CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD + case CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD + case CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD: DEV_GET_INT_INF(cl_uint); +#endif +#ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD + case CL_DEVICE_LOCAL_MEM_BANKS_AMD: DEV_GET_INT_INF(cl_uint); +#endif +// }}} + +#ifdef CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT + case CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT: DEV_GET_INT_INF(cl_uint); +#endif default: throw error("Device.get_info", CL_INVALID_VALUE); diff --git a/src/wrapper/wrap_constants.cpp b/src/wrapper/wrap_constants.cpp index d6e2246cf19073f59d055cf97f154b2a682ee912..64511d01656c5a5c0f629242884fdab4944f56b3 100644 --- a/src/wrapper/wrap_constants.cpp +++ b/src/wrapper/wrap_constants.cpp @@ -312,10 +312,50 @@ void pyopencl_expose_constants() ADD_ATTR(DEVICE_, KERNEL_EXEC_TIMEOUT_NV); ADD_ATTR(DEVICE_, INTEGRATED_MEMORY_NV); #endif -// cl_amd_device_attribute_query +// {{{ cl_amd_device_attribute_query #ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD ADD_ATTR(DEVICE_, PROFILING_TIMER_OFFSET_AMD); #endif +#ifdef CL_DEVICE_TOPOLOGY_AMD + ADD_ATTR(DEVICE_, TOPOLOGY_AMD); +#endif +#ifdef CL_DEVICE_BOARD_NAME_AMD + ADD_ATTR(DEVICE_, BOARD_NAME_AMD); +#endif +#ifdef CL_DEVICE_GLOBAL_FREE_MEMORY_AMD + ADD_ATTR(DEVICE_, GLOBAL_FREE_MEMORY_AMD); +#endif +#ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD + ADD_ATTR(DEVICE_, SIMD_PER_COMPUTE_UNIT_AMD); +#endif +#ifdef CL_DEVICE_SIMD_WIDTH_AMD + ADD_ATTR(DEVICE_, SIMD_WIDTH_AMD); +#endif +#ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD + ADD_ATTR(DEVICE_, SIMD_INSTRUCTION_WIDTH_AMD); +#endif +#ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD + ADD_ATTR(DEVICE_, WAVEFRONT_WIDTH_AMD); +#endif +#ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD + ADD_ATTR(DEVICE_, GLOBAL_MEM_CHANNELS_AMD); +#endif +#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD + ADD_ATTR(DEVICE_, GLOBAL_MEM_CHANNEL_BANKS_AMD); +#endif +#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD + ADD_ATTR(DEVICE_, GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD); +#endif +#ifdef CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD + ADD_ATTR(DEVICE_, LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD); +#endif +#ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD + ADD_ATTR(DEVICE_, LOCAL_MEM_BANKS_AMD); +#endif +// }}} +#ifdef CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT + ADD_ATTR(DEVICE_, MAX_ATOMIC_COUNTERS_EXT); +#endif #if defined(cl_ext_device_fission) && defined(PYOPENCL_USE_DEVICE_FISSION) ADD_ATTR(DEVICE_, PARENT_DEVICE_EXT); ADD_ATTR(DEVICE_, PARTITION_TYPES_EXT); @@ -336,6 +376,10 @@ void pyopencl_expose_constants() ADD_ATTR(DEVICE_, REFERENCE_COUNT); ADD_ATTR(DEVICE_, PREFERRED_INTEROP_USER_SYNC); ADD_ATTR(DEVICE_, PRINTF_BUFFER_SIZE); +#endif +#ifdef cl_khr_image2d_from_buffer + ADD_ATTR(DEVICE_, IMAGE_PITCH_ALIGNMENT); + ADD_ATTR(DEVICE_, IMAGE_BASE_ADDRESS_ALIGNMENT); #endif }