DeviceはOpenCLランタイムライブラリのデバイスオブジェクトに該当するPythonクラスです。
class pyopencl.Device
このクラスのメンバー関数にはget_info関数があり、OpenCLが使用可能なデバイスの情報を取得できます。
その他にもDeviceオブジェクトは、Contextオブジェクトを生成するためのパラメータとしても使うことができます。
get_devices関数はプラットフォームで使用可能なデバイスを取得します。
詳しくは「表:clGetDeviceIDs」(Table B.12, “表:clGetDeviceIDs”)と「表:cl_device_type」(Table B.13, “表:cl_device_type”)を参照ください。
get_devices(device_type=device_type.ALL)
デバイスの種類を指定するdevice_typeを引数とします。
では関数の使用例を見てみましょう。以下は特定のプラットフォームに関連付けられた使用可能なデバイスを取得します。
import pyopencl as cl platform = cl.get_platforms() #(1) devices = platform[0].get_devices(cl.device_type.ALL)
プラットフォームのリストを取得。 |
プラットフォームのリストを取得後に、特定のプラットフォーム内の全ての種類のデバイスのリストを取得します。
詳しくは「表:cl_device_type」(Table B.13, “表:cl_device_type”)を参照ください。
device_typeはデバイスオブジェクトの生成に使う、デバイスの種類を指定するプロパティです。
class pyopencl.device_type
以下のような種類のビットフィールド値を指定することができます。
get_info関数はOpenCLデバイスについての情報を取得します。
詳しくは「表:clGetDeviceInfo」(Table B.14, “表:clGetDeviceInfo”)と「表:cl_device_info」(Table B.15, “表:cl_device_info”)を参照ください。
get_info(param)
引数には次の項目で紹介する、pyopencl.device_infoの列挙値を指定します。
デバイスの種類をクエリーするには以下のようにします。
import pyopencl as cl dev_type = dev.get_info(cl.device_info.TYPE)
この例でのdevはデバイスオブジェクトのことです。
get_infoを使ってデバイスの属性情報、メモリサイズをクエリーをした例が以下のコードとなります。
import pyopencl as cl platform = cl.get_platforms() devices = platform[0].get_devices(cl.device_type.ALL) for dev in devices: dev_type = dev.get_info(cl.device_info.TYPE) print("Device Type: " + str(dev_type)) dev_vendor = dev.get_info(cl.device_info.VENDOR) print("Vendor: " + str(dev_vendor)) el = dev.get_info(cl.device_info.ENDIAN_LITTLE) print("Little endian support: " + str(el)) global_mem_cacheline_size = dev.get_info(cl.device_info.GLOBAL_MEM_CACHELINE_SIZE) print("Global cache line size: " + str(global_mem_cacheline_size)) global_mem_cache_size = dev.get_info(cl.device_info.GLOBAL_MEM_CACHE_SIZE) print("Global cache size: " + str(global_mem_cache_size)) global_mem_size = dev.get_info(cl.device_info.GLOBAL_MEM_SIZE) print("Global memory size: " + str(global_mem_size)) local_mem_size = dev.get_info(cl.device_info.LOCAL_MEM_SIZE) print("Local memory size: " + str(local_mem_size))
以下が実行可能ファイルの出力となります。
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/komatsu/PycharmProjects/MyPythonProject/DeviceInfoTest.py Device Type: 2 Vendor: Intel Little endian support: 1 Global cache line size: 3145728 Global cache size: 64 Global memory size: 4294967296 Local memory size: 32768 Device Type: 4 Vendor: Intel Little endian support: 1 Global cache line size: 0 Global cache size: 0 Global memory size: 1610612736 Local memory size: 65536
get_info関数では引数paramでデバイスオブジェクトに対してクエリーしたい情報を指定します。このparamはdevice_infoのビットフィールド値のうちどれかを指定します。
詳しくは「表:cl_device_info」(Table B.15, “表:cl_device_info”)を参照ください。
class pyopencl.device_info
device_infoの値については以下の表に列挙します。
ADDRESS_BITS |
AVAILABLE |
BOARD_NAME_AMD |
BUILT_IN_KERNELS |
COMPILER_AVAILABLE |
COMPUTE_CAPABILITY_MAJOR_NV |
COMPUTE_CAPABILITY_MINOR_NV |
DOUBLE_FP_CONFIG |
DRIVER_VERSION |
ENDIAN_LITTLE |
ERROR_CORRECTION_SUPPORT |
EXECUTION_CAPABILITIES |
EXTENSIONS |
GLOBAL_FREE_MEMORY_AMD |
GLOBAL_MEM_CACHELINE_SIZE |
GLOBAL_MEM_CACHE_SIZE |
GLOBAL_MEM_CACHE_TYPE |
GLOBAL_MEM_CHANNELS_AMD |
GLOBAL_MEM_CHANNEL_BANKS_AMD |
GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD |
GLOBAL_MEM_SIZE |
GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE(2.0) |
GPU_OVERLAP_NV |
HALF_FP_CONFIG |
HOST_UNIFIED_MEMORY |
IMAGE2D_MAX_HEIGHT |
IMAGE2D_MAX_WIDTH |
IMAGE3D_MAX_DEPTH |
IMAGE3D_MAX_HEIGHT |
IMAGE3D_MAX_WIDTH |
IMAGE_MAX_ARRAY_SIZE |
IMAGE_MAX_BUFFER_SIZE |
IMAGE_SUPPORT |
INTEGRATED_MEMORY_NV |
KERNEL_EXEC_TIMEOUT_NV |
LINKER_AVAILABLE |
LOCAL_MEM_BANKS_AMD |
LOCAL_MEM_SIZE |
LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD |
LOCAL_MEM_TYPE |
MAX_ATOMIC_COUNTERS_EXT |
MAX_CLOCK_FREQUENCY |
MAX_COMPUTE_UNITS |
MAX_CONSTANT_ARGS |
MAX_CONSTANT_BUFFER_SIZE |
MAX_GLOBAL_VARIABLE_SIZE |
MAX_MEM_ALLOC_SIZE |
MAX_ON_DEVICE_EVENTS |
MAX_ON_DEVICE_QUEUES(2.0) |
MAX_PARAMETER_SIZE |
MAX_PIPE_ARGS(2.0) |
MAX_READ_IMAGE_ARGS |
MAX_READ_WRITE_IMAGE_ARG(2.0) |
MAX_SAMPLERS |
MAX_WORK_GROUP_SIZE |
MAX_WORK_ITEM_DIMENSIONS |
MAX_WORK_ITEM_SIZES |
MAX_WRITE_IMAGE_ARGS |
MEM_BASE_ADDR_ALIGN |
MIN_DATA_TYPE_ALIGN_SIZE |
NAME |
NATIVE_VECTOR_WIDTH_CHAR |
NATIVE_VECTOR_WIDTH_DOUBLE |
NATIVE_VECTOR_WIDTH_FLOAT |
NATIVE_VECTOR_WIDTH_HALF |
NATIVE_VECTOR_WIDTH_INT |
NATIVE_VECTOR_WIDTH_LONG |
NATIVE_VECTOR_WIDTH_SHORT |
OPENCL_C_VERSION |
PARENT_DEVICE |
PARTITION_AFFINITY_DOMAIN |
PARTITION_MAX_SUB_DEVICES |
PARTITION_PROPERTIES |
PARTITION_TYPE |
PIPE_MAX_ACTIVE_RESERVATIONS(2.0) |
PIPE_MAX_PACKET_SIZE(2.0) |
PLATFORM |
PREFERRED_GLOBAL_ATOMIC_ALIGNMENT(2.0) |
PREFERRED_INTEROP_USER_SYNC |
PREFERRED_LOCAL_ATOMIC_ALIGNMENT(2.0) |
PREFERRED_PLATFORM_ATOMIC_ALIGNMENT(2.0) |
PREFERRED_VECTOR_WIDTH_CHAR |
PREFERRED_VECTOR_WIDTH_DOUBLE |
PREFERRED_VECTOR_WIDTH_FLOAT |
PREFERRED_VECTOR_WIDTH_HALF |
PREFERRED_VECTOR_WIDTH_INT |
PREFERRED_VECTOR_WIDTH_LONG |
PREFERRED_VECTOR_WIDTH_SHORT |
PRINTF_BUFFER_SIZE |
PROFILE |
PROFILING_TIMER_OFFSET_AMD |
PROFILING_TIMER_RESOLUTION |
QUEUE_ON_DEVICE_MAX_SIZE(2.0) |
QUEUE_ON_DEVICE_PREFERRED_SIZE(2.0) |
QUEUE_ON_DEVICE_PROPERTIES(2.0) |
QUEUE_ON_HOST_PROPERTIES |
QUEUE_PROPERTIES |
REFERENCE_COUNT |
REGISTERS_PER_BLOCK_NV |
SIMD_INSTRUCTION_WIDTH_AMD |
SIMD_PER_COMPUTE_UNIT_AMD |
SIMD_WIDTH_AMD |
SINGLE_FP_CONFIG |
SVM_CAPABILITIES(2.0) |
TOPOLOGY_AMD |
TYPE |
VENDOR |
VENDOR_ID |
VERSION |
WARP_SIZE_NV |
WAVEFRONT_WIDTH_AMD |
(2.0)と表記のある値は、OpenCL 2.0からのサポートとなるため、OpenCL 2.0に対応したデバイスドライバ、SDKが必要になります。
Copyright 2018-2019, by Masaki Komatsu