15.3. Deviceのクエリー

DeviceはOpenCLランタイムライブラリのデバイスオブジェクトに該当するPythonクラスです。

class pyopencl.Device

このクラスのメンバー関数にはget_info関数があり、OpenCLが使用可能なデバイスの情報を取得できます。

その他にもDeviceオブジェクトは、Contextオブジェクトを生成するためのパラメータとしても使うことができます。

15.3.1. pyopencl.Platform.get_devices

get_devices関数はプラットフォームで使用可能なデバイスを取得します。

Note

詳しくは「表: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)

(1)

プラットフォームのリストを取得。

プラットフォームのリストを取得後に、特定のプラットフォーム内の全ての種類のデバイスのリストを取得します。

15.3.2. device_type

Note

詳しくは「表:cl_device_type」(Table B.13, “表:cl_device_type”)を参照ください。

device_typeはデバイスオブジェクトの生成に使う、デバイスの種類を指定するプロパティです。

class pyopencl.device_type

以下のような種類のビットフィールド値を指定することができます。

  • ACCELERATOR
  • ALL
  • CPU
  • CUSTOM
  • DEFAULT
  • GPU

15.3.3. get_info

get_info関数はOpenCLデバイスについての情報を取得します。

Note

詳しくは「表: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

15.3.4. device_info

get_info関数では引数paramでデバイスオブジェクトに対してクエリーしたい情報を指定します。このparamはdevice_infoのビットフィールド値のうちどれかを指定します。

Note

詳しくは「表: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