diff --git a/src/c_wrapper/wrap_cl.cpp b/src/c_wrapper/wrap_cl.cpp index c3fdf08df386e53fccf087f94b2505c5a3c65c3e..bddd84e6614d2fdd8aadd94c9cf8458c169e7ba9 100644 --- a/src/c_wrapper/wrap_cl.cpp +++ b/src/c_wrapper/wrap_cl.cpp @@ -448,204 +448,204 @@ namespace pyopencl PYOPENCL_EQUALITY_TESTS(device); - generic_info get_info(cl_device_info param_name) const - { +generic_info get_info(cl_device_info param_name) const +{ #define DEV_GET_INT_INF(TYPE) PYOPENCL_GET_INTEGRAL_INFO(Device, m_device, param_name, TYPE); - switch (param_name) - { - // case CL_DEVICE_TYPE: DEV_GET_INT_INF(cl_device_type); - // case CL_DEVICE_VENDOR_ID: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_MAX_COMPUTE_UNITS: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_MAX_WORK_GROUP_SIZE: DEV_GET_INT_INF(size_t); - - // case CL_DEVICE_MAX_WORK_ITEM_SIZES: - // { - // std::vector<size_t> result; - // PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); - // PYOPENCL_RETURN_VECTOR(size_t, result); - // } - - // case CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE: DEV_GET_INT_INF(cl_uint); - - // case CL_DEVICE_MAX_CLOCK_FREQUENCY: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_ADDRESS_BITS: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_MAX_READ_IMAGE_ARGS: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_MAX_WRITE_IMAGE_ARGS: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_MAX_MEM_ALLOC_SIZE: DEV_GET_INT_INF(cl_ulong); - // case CL_DEVICE_IMAGE2D_MAX_WIDTH: DEV_GET_INT_INF(size_t); - // case CL_DEVICE_IMAGE2D_MAX_HEIGHT: DEV_GET_INT_INF(size_t); - // case CL_DEVICE_IMAGE3D_MAX_WIDTH: DEV_GET_INT_INF(size_t); - // case CL_DEVICE_IMAGE3D_MAX_HEIGHT: DEV_GET_INT_INF(size_t); - // case CL_DEVICE_IMAGE3D_MAX_DEPTH: DEV_GET_INT_INF(size_t); - // case CL_DEVICE_IMAGE_SUPPORT: DEV_GET_INT_INF(cl_bool); - // case CL_DEVICE_MAX_PARAMETER_SIZE: DEV_GET_INT_INF(size_t); - // case CL_DEVICE_MAX_SAMPLERS: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_MEM_BASE_ADDR_ALIGN: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_SINGLE_FP_CONFIG: DEV_GET_INT_INF(cl_device_fp_config); - // #ifdef CL_DEVICE_DOUBLE_FP_CONFIG - // case CL_DEVICE_DOUBLE_FP_CONFIG: DEV_GET_INT_INF(cl_device_fp_config); - // #endif - // #ifdef CL_DEVICE_HALF_FP_CONFIG - // case CL_DEVICE_HALF_FP_CONFIG: DEV_GET_INT_INF(cl_device_fp_config); - // #endif - - // case CL_DEVICE_GLOBAL_MEM_CACHE_TYPE: DEV_GET_INT_INF(cl_device_mem_cache_type); - // case CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_GLOBAL_MEM_CACHE_SIZE: DEV_GET_INT_INF(cl_ulong); - // case CL_DEVICE_GLOBAL_MEM_SIZE: DEV_GET_INT_INF(cl_ulong); - - // case CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: DEV_GET_INT_INF(cl_ulong); - // case CL_DEVICE_MAX_CONSTANT_ARGS: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_LOCAL_MEM_TYPE: DEV_GET_INT_INF(cl_device_local_mem_type); - // case CL_DEVICE_LOCAL_MEM_SIZE: DEV_GET_INT_INF(cl_ulong); - // case CL_DEVICE_ERROR_CORRECTION_SUPPORT: DEV_GET_INT_INF(cl_bool); - // case CL_DEVICE_PROFILING_TIMER_RESOLUTION: DEV_GET_INT_INF(size_t); - // case CL_DEVICE_ENDIAN_LITTLE: DEV_GET_INT_INF(cl_bool); - // case CL_DEVICE_AVAILABLE: DEV_GET_INT_INF(cl_bool); - // case CL_DEVICE_COMPILER_AVAILABLE: DEV_GET_INT_INF(cl_bool); - // case CL_DEVICE_EXECUTION_CAPABILITIES: DEV_GET_INT_INF(cl_device_exec_capabilities); - // case CL_DEVICE_QUEUE_PROPERTIES: DEV_GET_INT_INF(cl_command_queue_properties); - - case CL_DEVICE_NAME: - case CL_DEVICE_VENDOR: - case CL_DRIVER_VERSION: - case CL_DEVICE_PROFILE: - case CL_DEVICE_VERSION: - case CL_DEVICE_EXTENSIONS: - PYOPENCL_GET_STR_INFO(Device, m_device, param_name); + switch (param_name) + { + case CL_DEVICE_TYPE: DEV_GET_INT_INF(cl_device_type); + case CL_DEVICE_VENDOR_ID: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MAX_COMPUTE_UNITS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MAX_WORK_GROUP_SIZE: DEV_GET_INT_INF(size_t); + + case CL_DEVICE_MAX_WORK_ITEM_SIZES: + { + std::vector<size_t> result; + PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); + PYOPENCL_GET_ARRAY_INFO(size_t, result); + } + + case CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE: DEV_GET_INT_INF(cl_uint); + + case CL_DEVICE_MAX_CLOCK_FREQUENCY: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_ADDRESS_BITS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MAX_READ_IMAGE_ARGS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MAX_WRITE_IMAGE_ARGS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MAX_MEM_ALLOC_SIZE: DEV_GET_INT_INF(cl_ulong); + case CL_DEVICE_IMAGE2D_MAX_WIDTH: DEV_GET_INT_INF(size_t); + case CL_DEVICE_IMAGE2D_MAX_HEIGHT: DEV_GET_INT_INF(size_t); + case CL_DEVICE_IMAGE3D_MAX_WIDTH: DEV_GET_INT_INF(size_t); + case CL_DEVICE_IMAGE3D_MAX_HEIGHT: DEV_GET_INT_INF(size_t); + case CL_DEVICE_IMAGE3D_MAX_DEPTH: DEV_GET_INT_INF(size_t); + case CL_DEVICE_IMAGE_SUPPORT: DEV_GET_INT_INF(cl_bool); + case CL_DEVICE_MAX_PARAMETER_SIZE: DEV_GET_INT_INF(size_t); + case CL_DEVICE_MAX_SAMPLERS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MEM_BASE_ADDR_ALIGN: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_SINGLE_FP_CONFIG: DEV_GET_INT_INF(cl_device_fp_config); +#ifdef CL_DEVICE_DOUBLE_FP_CONFIG + case CL_DEVICE_DOUBLE_FP_CONFIG: DEV_GET_INT_INF(cl_device_fp_config); +#endif +#ifdef CL_DEVICE_HALF_FP_CONFIG + case CL_DEVICE_HALF_FP_CONFIG: DEV_GET_INT_INF(cl_device_fp_config); +#endif + + case CL_DEVICE_GLOBAL_MEM_CACHE_TYPE: DEV_GET_INT_INF(cl_device_mem_cache_type); + case CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_GLOBAL_MEM_CACHE_SIZE: DEV_GET_INT_INF(cl_ulong); + case CL_DEVICE_GLOBAL_MEM_SIZE: DEV_GET_INT_INF(cl_ulong); + + case CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: DEV_GET_INT_INF(cl_ulong); + case CL_DEVICE_MAX_CONSTANT_ARGS: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_LOCAL_MEM_TYPE: DEV_GET_INT_INF(cl_device_local_mem_type); + case CL_DEVICE_LOCAL_MEM_SIZE: DEV_GET_INT_INF(cl_ulong); + case CL_DEVICE_ERROR_CORRECTION_SUPPORT: DEV_GET_INT_INF(cl_bool); + case CL_DEVICE_PROFILING_TIMER_RESOLUTION: DEV_GET_INT_INF(size_t); + case CL_DEVICE_ENDIAN_LITTLE: DEV_GET_INT_INF(cl_bool); + case CL_DEVICE_AVAILABLE: DEV_GET_INT_INF(cl_bool); + case CL_DEVICE_COMPILER_AVAILABLE: DEV_GET_INT_INF(cl_bool); + case CL_DEVICE_EXECUTION_CAPABILITIES: DEV_GET_INT_INF(cl_device_exec_capabilities); + case CL_DEVICE_QUEUE_PROPERTIES: DEV_GET_INT_INF(cl_command_queue_properties); + + case CL_DEVICE_NAME: + case CL_DEVICE_VENDOR: + case CL_DRIVER_VERSION: + case CL_DEVICE_PROFILE: + case CL_DEVICE_VERSION: + case CL_DEVICE_EXTENSIONS: + PYOPENCL_GET_STR_INFO(Device, m_device, param_name); - case CL_DEVICE_PLATFORM: - PYOPENCL_GET_OPAQUE_INFO(Device, m_device, param_name, cl_platform_id, platform, PLATFORM); - - // #if PYOPENCL_CL_VERSION >= 0x1010 - // case CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF: DEV_GET_INT_INF(cl_uint); - - // case CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_NATIVE_VECTOR_WIDTH_INT: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF: DEV_GET_INT_INF(cl_uint); - - // case CL_DEVICE_HOST_UNIFIED_MEMORY: DEV_GET_INT_INF(cl_bool); - // case CL_DEVICE_OPENCL_C_VERSION: - // PYOPENCL_GET_STR_INFO(Device, m_device, param_name); - // #endif - // #ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV - // case CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV: - // case CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV: - // case CL_DEVICE_REGISTERS_PER_BLOCK_NV: - // case CL_DEVICE_WARP_SIZE_NV: - // DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_GPU_OVERLAP_NV: - // case CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV: - // case CL_DEVICE_INTEGRATED_MEMORY_NV: - // DEV_GET_INT_INF(cl_bool); - // #endif - // #if defined(cl_ext_device_fission) && defined(PYOPENCL_USE_DEVICE_FISSION) - // case CL_DEVICE_PARENT_DEVICE_EXT: - // PYOPENCL_GET_OPAQUE_INFO(Device, m_device, param_name, cl_device_id, device, DEVICE); - // case CL_DEVICE_PARTITION_TYPES_EXT: - // case CL_DEVICE_AFFINITY_DOMAINS_EXT: - // case CL_DEVICE_PARTITION_STYLE_EXT: - // { - // std::vector<cl_device_partition_property_ext> result; - // PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); - // PYOPENCL_RETURN_VECTOR(cl_device_partition_property_ext, result); - // } - // case CL_DEVICE_REFERENCE_COUNT_EXT: DEV_GET_INT_INF(cl_uint); - // #endif - // #if PYOPENCL_CL_VERSION >= 0x1020 - // case CL_DEVICE_LINKER_AVAILABLE: DEV_GET_INT_INF(cl_bool); - // case CL_DEVICE_BUILT_IN_KERNELS: - // PYOPENCL_GET_STR_INFO(Device, m_device, param_name); - // case CL_DEVICE_IMAGE_MAX_BUFFER_SIZE: DEV_GET_INT_INF(size_t); - // case CL_DEVICE_IMAGE_MAX_ARRAY_SIZE: DEV_GET_INT_INF(size_t); - // case CL_DEVICE_PARENT_DEVICE: - // PYOPENCL_GET_OPAQUE_INFO(Device, m_device, param_name, cl_device_id, device, DEVICE); - // case CL_DEVICE_PARTITION_MAX_SUB_DEVICES: DEV_GET_INT_INF(cl_uint); - // case CL_DEVICE_PARTITION_TYPE: - // case CL_DEVICE_PARTITION_PROPERTIES: - // { - // std::vector<cl_device_partition_property> result; - // PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); - // PYOPENCL_RETURN_VECTOR(cl_device_partition_property, result); - // } - // case CL_DEVICE_PARTITION_AFFINITY_DOMAIN: - // { - // std::vector<cl_device_affinity_domain> result; - // PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); - // PYOPENCL_RETURN_VECTOR(cl_device_affinity_domain, result); - // } - // case CL_DEVICE_REFERENCE_COUNT: DEV_GET_INT_INF(cl_uint); - // 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<size_t> 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 + case CL_DEVICE_PLATFORM: + PYOPENCL_GET_OPAQUE_INFO(Device, m_device, param_name, cl_platform_id, platform, PLATFORM); + +#if PYOPENCL_CL_VERSION >= 0x1010 + case CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF: DEV_GET_INT_INF(cl_uint); + + case CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_NATIVE_VECTOR_WIDTH_INT: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF: DEV_GET_INT_INF(cl_uint); + + case CL_DEVICE_HOST_UNIFIED_MEMORY: DEV_GET_INT_INF(cl_bool); + case CL_DEVICE_OPENCL_C_VERSION: + PYOPENCL_GET_STR_INFO(Device, m_device, param_name); +#endif +#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV + case CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV: + case CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV: + case CL_DEVICE_REGISTERS_PER_BLOCK_NV: + case CL_DEVICE_WARP_SIZE_NV: + DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_GPU_OVERLAP_NV: + case CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV: + case CL_DEVICE_INTEGRATED_MEMORY_NV: + DEV_GET_INT_INF(cl_bool); +#endif +#if defined(cl_ext_device_fission) && defined(PYOPENCL_USE_DEVICE_FISSION) + case CL_DEVICE_PARENT_DEVICE_EXT: + PYOPENCL_GET_OPAQUE_INFO(Device, m_device, param_name, cl_device_id, device, DEVICE); + case CL_DEVICE_PARTITION_TYPES_EXT: + case CL_DEVICE_AFFINITY_DOMAINS_EXT: + case CL_DEVICE_PARTITION_STYLE_EXT: + { + std::vector<cl_device_partition_property_ext> result; + PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); + PYOPENCL_GET_ARRAY_INFO(cl_device_partition_property_ext, result); + } + case CL_DEVICE_REFERENCE_COUNT_EXT: DEV_GET_INT_INF(cl_uint); +#endif +#if PYOPENCL_CL_VERSION >= 0x1020 + case CL_DEVICE_LINKER_AVAILABLE: DEV_GET_INT_INF(cl_bool); + case CL_DEVICE_BUILT_IN_KERNELS: + PYOPENCL_GET_STR_INFO(Device, m_device, param_name); + case CL_DEVICE_IMAGE_MAX_BUFFER_SIZE: DEV_GET_INT_INF(size_t); + case CL_DEVICE_IMAGE_MAX_ARRAY_SIZE: DEV_GET_INT_INF(size_t); + case CL_DEVICE_PARENT_DEVICE: + PYOPENCL_GET_OPAQUE_INFO(Device, m_device, param_name, cl_device_id, device, DEVICE); + case CL_DEVICE_PARTITION_MAX_SUB_DEVICES: DEV_GET_INT_INF(cl_uint); + case CL_DEVICE_PARTITION_TYPE: + case CL_DEVICE_PARTITION_PROPERTIES: + { + std::vector<cl_device_partition_property> result; + PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); + PYOPENCL_GET_ARRAY_INFO(cl_device_partition_property, result); + } + case CL_DEVICE_PARTITION_AFFINITY_DOMAIN: + { + std::vector<cl_device_affinity_domain> result; + PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); + PYOPENCL_GET_ARRAY_INFO(cl_device_affinity_domain, result); + } + case CL_DEVICE_REFERENCE_COUNT: DEV_GET_INT_INF(cl_uint); + 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<size_t> result; + PYOPENCL_GET_VEC_INFO(Device, m_device, param_name, result); + PYOPENCL_GET_ARRAY_INFO(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);