B.9. Device

B.9.1. clGetDeviceIDs

表B.12 表:clGetDeviceIDs

関数

cl_int

clGetDeviceIDs (
    cl_platform_id platform,
    cl_device_type device_type,
    cl_uint num_entries,
    cl_device_id *devices,
    cl_uint *num_devices
)

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

引数

platform

clGetPlatformIDsで取
得したプラットフォームIDを
指定します(NULL値も指定可能)。
platformがNULL値のときの
振る舞いは実装に依存します。

device_type

取得するOpenCLデバイス
の種類を識別するビット
フィールドです。device_type
は特定のOpenCLデバイスをク
エリーするときや、全ての有効
なOpenCLデバイスを取得する
ことにも使えます。使用可能な
値は下記テーブルを参照。

num_entries

devicesに追加可能な
cl_device_idエントリの数
を指定。devicesがNULLでな
い場合は、num_entriesは0
より大きい必要がある。

devices

OpenCLデバイスのリスト
を戻す。devices内に戻され
たcl_device_idの値は、
特定のOpenCLデバイスを指定
するのに使える。devicesが
NULLの場合は無視。戻される
OpenCLデバイスの数は、
num_entriesで指定した値と
device_typeと一致する
OpenCLデバイスの数のうち値
が小さいものとなる。

num_devices

device_typeとマッチ
する有効なOpenCLデバイス
の個数を戻す。num_devices
がNULLの場合は無視。

成功した場合の戻り値

CL_SUCCESS

失敗した場合の戻り値

CL_INVALID_ DEVICE_TYPE

device_typeが有効
でない値の場合。

CL_INVALID_ VALUE

num_entriesが0に等
しく、devicesがNULL
でない場合。
num_devicesとdevices
の両方がNULLの場合。

CL_DEVICE_ NOT_FOUND

device_typeにマッチ
したOpenCLデバイスが見
つからない場合。

CL_OUT_OF_ RESOURCES

デバイス上のOpenCL
実装が必要とするリソース
確保に失敗した場合。

CL_OUT_OF_ HOST_MEMORY

ホスト上のOpenCL実装
が必要とするリソース確
保に失敗した場合。

B.9.2. cl_device_type

表B.13 表:cl_device_type

cl_device_type

Description


CL_DEVICE_ TYPE_CPU 

ホストプロセッサとなっ
ているOpenCLデバイス。
ホストプロセッサはOpenCL
実装を動かすもので、シン
グル又はマルチコアの
CPUとなる。


CL_DEVICE_ TYPE_GPU

GPUを指す。これはOpenGL
やDirectXといった3D API
をアクセラレートするのにも
用いることが可能。

CL_DEVICE_ TYPE_ ACCELERATOR

IBM CELLなどのようなアク
セラレータ。これらのデバイス
は、PCIeのような接続手段を
用いてホストプロセッ
サと通信する。

CL_DEVICE_ TYPE_CUSTOM  

OpenCL Cで書いたプログラム
をサポートしない専用の
アクセラレータ。



CL_DEVICE_ TYPE_DEFAULT

システムの既定のOpenCL
デバイス。CL_DEVICE_
TYPE_CUSTOMとすること
はできない。

CL_DEVICE_ TYPE_ALL  

システム上の有効なOpneCL
デバイス全て。
(CL_DEVICE_TYPE_CUSTOMは除く)

B.9.3. clGetDeviceInfo

表B.14 表:clGetDeviceInfo

関数

cl_int

clGetDeviceInfo (
    cl_device_id device,
    cl_device_info param_name,
    size_t param_value_size,
    void *param_value,
    size_t *param_value_size_ret
)

OpenCLデバイスについての情報を取得します。device に指定するデバイスはclGetDeviceIDsが戻すデバイス、 またはclCreateSubDevicesで生成したサブデバイスです。 device引数にサブデバイスを指定した場合は、サブデバイス に関する情報が戻ります。

引数

device

clGetDeviceIDsで
取得したデバイスを指定します。

param_name

取得する情報を指定します。

param_value

param_nameで指定した
情報の値が戻るメモリ空間への
ポインタです。NULL 値の場合
は無視されます。

param_value_ size

param_valueが指す
(バイトで表す)メモリサイズ。

param_value_ size_ret

param_valueでクエリー
されるデータの実際の(バイト
で表す)サイズ。NULL値は無
視されます。

成功した場合の戻り値

CL_SUCCESS

失敗した場合の戻り値

CL_INVALID_ DEVICE

device が有効でないとき。

CL_INVALID_ VALUE

param_name がサポートさ
れている値でない、又は、
param_value_size で指定
されたサイズが上記の表で指定
されている戻り値型のサイズ
より小さくかつ param_value
が NULL でないとき。

CL_OUT_ OF_RESOURCES

デバイス上でのリソース確保
に失敗した場合。

CL_OUT_ OF_HOST_MEMORY

ホスト上でのリソース
確保に失敗した場合。)

B.9.4. cl_device_info

表B.15 表:cl_device_info

cl_device_info戻り値の型詳細 
CL_DEVICE_
TYPE
cl_device_
type
OpenCLデバイスのタイプ。
現在サポートされている値は:

CL_DEVICE_TYPE_CPU
CL_DEVICE_TYPE_GPU
CL_DEVICE_TYPE_ACCELERATOR
CL_DEVICE_TYPE_DEFAULT

上記の組み合わせのいずれか、
またはCL_DEVICE_TYPE_CUSTOMです。
CL_DEVICE_
VENDOR_ID


cl_uint



デバイスベンダのユニークな
識別子。例としてPCIeのID等
あります。

CL_DEVICE_
MAX_
COMPUTE_
UNITS
cl_uint
OpenCLデバイス上の並列演算
ユニット(CU)の数。ワークグ
ループは単一の演算ユニット
(CU)で実行するものとし、最
小値は1です。
CL_DEVICE_
MAX_WORK_
ITEM_
DIMENSIONS
cl_uint


データ並列実行モデル
(clEnqueueNDRangeKernel
参照で使うグローバル・ローカル
ワークアイテムIDの次元数の最
大値。CL_DEVICE_TYPE_CUSTOM
以外のデバイスにおける最小値は3です。

CL_DEVICE_
MAX_WORK_
ITEM_SIZES
size_t []
clEnqueueNDRangeKernel
が指定する各ワークグループの
ワークアイテム数の各次元につ
いての最大値。
CL_DEVICE_MAX_WORK_
ITEM_DIMENSIONSが戻す値の
個数がnのとき、n個のsize_t
エントリーを戻します。CL_
DEVICE_TYPE_CUSTOM以外の
デバイスにおける最小値は
(1, 1, 1) です。
CL_DEVICE_
MAX_
WORK_
GROUP_SIZE
size_t
データ並列実行モデル
(clEnqueueNDRangeKernel
参照)を使った、単一の演算ユ
ニット上のカーネル実行で各
ワークグループ内のワークアイ
テム数の最大値。最小値は1です。
CL_DEVICE_
PREFERRED_
VECTOR_WIDTH_
CHAR

CL_DEVICE_
PREFERRED_
VECTOR_WIDTH_
SHORT

CL_DEVICE_
PREFERRED_
VECTOR_
WIDTH_INT

CL_DEVICE_
PREFERRED_
VECTOR_
WIDTH_LONG

CL_DEVICE_
PREFERRED_
VECTOR_
WIDTH_FLOAT

CL_DEVICE_
PREFERRED_
VECTOR_
WIDTH_DOUBLE

CL_DEVICE_
PREFERRED_
VECTOR_
WIDTH_HALF
cl_uint
ベクトル化できる組み込み
スカラ型について推奨される
ネイティブのベクトル幅のサ
イズ。ベクトル幅のサイズは
ベクトル内に保存できるスカ
ラ型要素の個数として定義し
ます。

cl_khr_fp64 がサポート
されていない場合は、
CL_DEVICE_PREFERRED_
VECTOR_WIDTH_DOUBLEは
0を戻します。

cl_khr_fp16 がサポート
されていない場合は、CL_
DEVICE_PREFERRED_
VECTOR_WIDTH_HALFは0
を戻します。
CL_DEVICE_
NATIVE_
VECTOR_
WIDTH_CHAR

CL_DEVICE_
NATIVE_
VECTOR_
WIDTH_SHORT

CL_DEVICE_
NATIVE_
VECTOR_
WIDTH_INT

CL_DEVICE_
NATIVE_
VECTOR_
WIDTH_LONG

CL_DEVICE_
NATIVE_
VECTOR_
WIDTH_FLOAT

CL_DEVICE_
NATIVE_
VECTOR_
WIDTH_DOUBLE

CL_DEVICE_
NATIVE_
VECTOR_
WIDTH_HALF
cl_uint
ISAのネイティブベクトル
幅を戻します。ベクトル幅
はベクトル内に保存できる
スカラ要素の個数として
定義されます。

cl_khr_fp64がサポート
されていない場合は、
CL_DEVICE_NATIVE_
VECTOR_WIDTH_DOUBLEは
0を戻します。
cl_khr_fp16 がサポート
されていない場合は、
CL_DEVICE_NATIVE_
VECTOR_WIDTH_HALFは0
を戻します。
CL_DEVICE_
MAX_
CLOCK_
FREQUENCY
cl_uint


デバイスの最大設定クロック
周波数をMHzで返します。

CL_DEVICE_
ADDRESS_BITS
cl_uint
演算デバイスのアドレス
空間のサイズを(ビットと
して表す)符号なし整数値。
現在サポートしているのは
32ビットか64ビットです。

CL_DEVICE_
MAX_MEM_
ALLOC_SIZE
cl_ulong
メモリオブジェクトとし
て割り当てられる最大の
(バイトで表す)サイズ。
最小値は、

CL_DEVICE_GLOBAL_
MEM_SIZEの4分の1
128*1024*1024

のうち値の大きいものです。
(CL_DEVICE_
TYPE_CUSTOM型のデバイスは除外)

CL_DEVICE_
IMAGE_
SUPPORT
cl_bool
OpenCLデバイスがイメージ
をサポートする場合はCL_TRUE、
サポートしない場合はCL_FALSE
となります。
CL_DEVICE_
MAX_READ_
IMAGE_ARGS
cl_uint
カーネルが同時に読み込める
イメージオブジェクトの最大数。
CL_DEVICE_IMAGE_SUPPORT
がCL_TRUEの場合は最小値は
128です。
CL_DEVICE_
MAX_WRITE_
IMAGE_ARGS


cl_uint

カーネルが同時に書き込め
るイメージオブジェクトの
最大数。CL_DEVICE_
IMAGE_SUPPORTがCL_TRUE
の場合は最小値は8です。
CL_DEVICE_
IMAGE2D_
MAX_WIDTH
size_t
1Dイメージまたは2D
イメージの幅の(ピクセル
で表す)最大サイズ。
CL_DEVICE_IMAGE_
SUPPORTがCL_TRUEの場合
は最小値は8192です。
CL_DEVICE_
IMAGE2D_
MAX_HEIGHT


size_t

2次元イメージの高さの
(ピクセルで表す)最大
サイズ。CL_DEVICE_
IMAGE_SUPPORTが
CL_TRUEの場合は最小値
は8192です。
CL_DEVICE_
IMAGE3D_
MAX_WIDTH
size_t
3次元イメージの幅の
(ピクセルで表す)最大
サイズ。CL_DEVICE_
IMAGE_SUPPORTが
CL_TRUEの場合は最小値
は2048です。
CL_DEVICE_
IMAGE3D_
MAX_HEIGHT


size_t



3次元イメージの高さの
(ピクセルで表す)最大サ
イズ。CL_DEVICE_
IMAGE_SUPPORTがCL_TRUE
の場合は最小値は2048です。
CL_DEVICE_
IMAGE3D_
MAX_DEPTH
size_t
3次元イメージの深さの
(ピクセルで表す)最大
サイズ。CL_DEVICE_
IMAGE_SUPPORTがCL_
TRUEの場合は最小値は
2048です。
CL_DEVICE_
IMAGE_MAX_
BUFFER_SIZE
size_t
1次元イメージの最大
ピクセルの個数。CL_DEVICE_
IMAGE_SUPPORTがCL_TRUE
の場合は最小値は65536です。
CL_DEVICE_
IMAGE_MAX_
ARRAY_SIZE


size_t

1次元または2次元
イメージアレイのイメージ
最大数。CL_DEVICE_
IMAGE_SUPPORTがCL_TRUE
の場合は最小値は2048です。
CL_DEVICE_
MAX_SAMPLERS
cl_uint
カーネルが利用できる
サンプラーの最大数。
CL_DEVICE_IMAGE_
SUPPORT が CL_TRUE
の場合は最小値は16です。
CL_DEVICE_MAX_
PARAMETER_SIZE
size_t
カーネルに渡せる引数の
(バイトで表す)最大
サイズ。最小値は1024です
(CL_DEVICE_TYPE_
CUSTOM型のデバイスは除外)。
戻す値が最小値と同じ場合
、カーネルに渡せる引数
の数は最大で128です。


CL_DEVICE_
MEM_BASE_
ADDR_ALIGN
cl_uint
確保されるメモリオブジェ
クトのベースアドレスのア
ラインメントをビットで返します。

最小値はデバイスがサポート
するOpenCL組み込みデータ型
の(ビットで表す)最大サ
イズです(CL_DEVICE_
TYPE_CUSTOM型のデバイス
は除外)。例えばFULLプロ
ファイルの場合はlong16、
EMBEDDEDプロファイルの場
合はlong16/int16です。

CL_DEVICE_
SINGLE_
FP_CONFIG
cl_device_
fp_config
デバイスの単精度浮動小数
点処理能力の記述。戻ってく
る値は以下の一つ以上の値を
説明するビットフィールドです。

CL_FP_DENORM
- 非正規化数をサポートします。

CL_FP_INF_NAN
- INFおよびquiet NaNをサポートします。

CL_FP_ROUND_TO_NEAREST
- 最近接偶数丸めモードをサポートします。

CL_FP_ROUND_TO_ZERO
- 0方向丸めモードをサポートします。

CL_FP_ROUND_TO_INF
- 正無限大方向丸めモードおよび
負無限大方向丸めモードをサポートします。

CL_FP_FMA
- IEEE 754-2008で定義する
Fused Multiply-Add (FMA)
をサポートします。

CL_FP_SOFT_FLOAT
- 基本的な浮動小数点操作
(加算、減算、乗算など)を実装

浮動小数点処理の最小要件は

CL_FP_INF_NAN |
CL_FP_ROUND_TO_NEAREST

となります。
CL_DEVICE_
DOUBLE_
FP_CONFIG
cl_device_
fp_config
デバイスの倍精度浮動小数点
処理能力の記述。戻ってくる値
は以下の一つ以上の値を説明
するビットフィールドです。

CL_FP_DENORM
- 非正規化数をサポートします。

CL_FP_INF_NAN
- INFおよびquiet NaN
をサポートします。

CL_FP_ROUND_TO_NEAREST
- 最近接偶数丸めモードを
サポートします。

CL_FP_ROUND_TO_ZERO
- 0方向丸めモードをサポート
します。

CL_FP_ROUND_TO_INF
- 正無限大方向丸めモードお
よび負無限大方向丸めモード
をサポートします。

CL_FP_FMA
- IEEE 754-2008で定義す
るFused Multiply-Add
(FMA) をサポートします。

CL_FP_SOFT_FLOAT
- 基本的な浮動小数点操作
(加算、減算、乗算など)
を実装。

倍精度浮動小数点は任意選
択機能のため最小要件は0です。

倍精度浮動小数点がデバイス
でサポートする場合は倍精度
浮動小数点処理の最小要件は

CL_FP_FMA
| CL_FP_ROUND_TO_NEAREST
| CL_FP_ROUND_TO_ZERO
| CL_FP_ROUND_TO_INF
| CL_FP_INF_NAN
| CL_FP_DENORM.

となります。
CL_DEVICE_
GLOBAL_
MEM_CACHE_
TYPE
cl_device_
mem_
cache_type
グローバルメモリのキャッシュ
の種類。有効な値は以下のと
おりです。

CL_NONE
CL_READ_ONLY_CACHE
CL_READ_WRITE_CACHE
CL_DEVICE_
GLOBAL_
MEM_
CACHELINE_SIZE
cl_uint
グローバルメモリのキャッシュ
ラインの(バイトで表す)サイズ。
CL_DEVICE_
GLOBAL_
MEM_CACHE_SIZE
cl_ulong
グローバルメモリのキャッシュ
の(バイトで表す)サイズ。
CL_DEVICE_
GLOBAL_
MEM_SIZE
cl_ulong
グローバルメモリの
(バイトで表す)サイズ。

CL_DEVICE_
MAX_
CONSTANT_
BUFFER_SIZE
cl_ulong
コンスタントバッファ割当
の(バイトで表す)最大サイ
ズ。最小値は64KBです。
CL_DEVICE_
MAX_
CONSTANT_
ARGS
cl_uint
カーネル内で__constant
修飾子をつけて宣言できる
引数の最大数。最小値は8
です。(CL_DEVICE_
TYPE_CUSTOM型のデバイス
は除外)

CL_DEVICE_
LOCAL_
MEM_TYPE
cl_device_
local_
mem_type
ローカルメモリの種類を
返します。

値がCL_LOCALのときは、
SRAMまたはCL_GLOBALの
ような専用のローカルメモ
リの記憶域があることを示
唆します。

カスタムデバイスでは、
ローカルメモリーをサポー
トしないことを指す
CL_NONEとできます。
CL_DEVICE_
LOCAL_
MEM_SIZE


cl_ulong



ローカルメモリ領域の
(バイトで表す)サイズ。
最小値は32KBです。
(CL_DEVICE_TYPE_
CUSTOM型のデバイスは
除外)

CL_DEVICE_
ERROR_
CORRECTION_
SUPPORT
cl_bool
計算デバイスのメモリ
(グローバルおよびコン
スタント)へのアクセスに
ついてのエラー訂正機能
がデバイスに実装されてい
る場合はCL_TRUE、それ
以外はCL_FALSEとなります。

CL_DEVICE_
HOST_
UNIFIED_
MEMORY
cl_bool
ホストとデバイスが統一
メモリサブシステムをも
つ場合はCL_TRUE、それ
以外はCL_FALSEとなります。

CL_DEVICE_
PROFILING_
TIMER_
RESOLUTION
size_t
デバイスタイマーの解像
度を記述。単位はナノ秒です。
CL_DEVICE_
ENDIAN_LITTLE
cl_bool
OpenCLデバイスがリトル
エンディアンの場合はCL_
TRUE、それ以外はCL_FALSE
となります。
CL_DEVICE_
AVAILABLE


cl_bool

デバイスが使用可能な
場合はCL_TRUE、それ以
外はCL_FALSEとなります。






CL_DEVICE_
COMPILER_
AVAILABLE
cl_bool


プログラムソースを
コンパイルするために使用
可能なコンパイラが無い
場合は CL_FALSE。コン
パイラが使用可能な場合
はCL_TRUEとなります。

CL_DEVICE_
LINKER_
AVAILABLE
cl_bool
使用可能なリンカーが
無い場合はCL_FALSE。
リンカーが使用可能な
場合はCL_TRUEとなり
ます。CL_DEVICE_
COMPILER_AVAILABLE
がCL_TRUEのときは、
CL_TRUEとなります。


CL_DEVICE_
EXECUTION_
CAPABILITIES
cl_device_
exec_
capabilities
デバイスの実行能力を記述。
以下の一つ以上の値を記述
するビットフィールドを
戻します。

CL_EXEC_KERNEL
:OpenCLカーネルを実行可能。

CL_EXEC_NATIVE_KERNEL
:ネイティブカーネルを実行可能。

実行についての最小要件は

CL_EXEC_KERNEL

となります。
CL_DEVICE_
QUEUE_
PROPERTIES
cl_command_
queue_
properties
デバイスがサポートする
コマンドキューのプロパ
ティを記述。以下の一つ
以上の値を記述するビット
フィールドを戻します。
下記2つの値を取ります。

CL_QUEUE_OUT_
OF_ORDER_EXEC_
MODE_ENABLE

CL_QUEUE_
PROFILING_ENABLE

最小要件は

CL_QUEUE_
PROFILING_ENABLE

となります。
CL_DEVICE_
BUILT_
IN_KERNELS
char[]
デバイスがサポートする
組込みカーネルで要素区
切りがセミコロンのリスト。
組込みカーネルがサポート
されない場合は空文字列
を戻します。
CL_DEVICE_
PLATFORM


cl_platform_
id

デバイスと関連する
プラットフォーム。





CL_DEVICE_
NAME
char[]
デバイス名の文字列。
CL_DEVICE_
VENDOR


char[]



デバイスベンダ名の
文字列。

CL_DRIVER_
VERSION
char[]


OpenCLソフトウェア
ドライバのバージョン
を次の形式の文字列で
戻します。

major_number.minor_number




CL_DEVICE_
PROFILE5
char[]
OpenCLプロファイル
の文字列。デバイスが
サポートするOpenCL
プロファイル名を戻し
、値は以下のうち一つ
となります。

FULL_PROFILE
- デバイスがOpenCL
の仕様をサポートする
場合

EMBEDDED_PROFILE
- OpenCL組み込みプ
ロファイルをサポート
する場合
CL_DEVICE_
VERSION


char[]

デバイスがサポート
するOpenCLのバージ
ョンを次の形式の文字
列で戻します。

OpenCL<space>
<major_version.minor_version>
<space>
<vendor-specific information>

例えばOpenCL 1.2では
「1.2」が戻り値となります。
CL_DEVICE_
OPENCL_
C_VERSION
char[]


OpenCL C言語のバージョン
を示す文字列。このデバイス
に対応するコンパイラが
サポートする OpenCL C言
語のバージョンのうち最も高
いものを次の形式の文字列で
戻します。(CL_DEVICE_
TYPE_CUSTOMの場合は除外)

OpenCL<space>C
<space>
<major_version.
minor_version>
<space>
<vendor-specific
information>

CL_DEVICE_VERSION
がOpenCL 1.2のときは、
major_version.minor_
versionは1.2です。

CL_DEVICE_VERSIONが
OpenCL 1.1のときは、
major_version.minor_
versionは1.1です。

CL_DEVICE_VERSIONが
OpenCL 1.0のときは、
major_version.minor_
versionは1.0か1.1の
いずれかです。

CL_DEVICE_
EXTENSIONS
char[]
デバイスがサポートする
拡張機能名をスペースで区
切ったリストの文字列を戻
します(拡張機能の名称自
体にはスペースは含みませ
ん)。返される拡張機能の
名称は、ベンダが独自サポ
ートするものとKhronosグ
ループが承認した以下のも
のがあります。

cl_khr_int64_
base_atomics

cl_khr_int64_
extended_atomics

cl_khr_3d_
image_writes

cl_khr_fp16

cl_khr_gl_sharing

cl_khr_gl_event

cl_khr_d3d10_
sharing

cl_khr_dx9_
media_sharing

cl_khr_d3d11_
sharing

cl_khr_depth_
images

cl_khr_gl_
depth_images
cl_khr_gl_
msaa_sharing

cl_khr_image2d_
from_buffer

cl_khr_
initialize_memory

cl_khr_context_
abort

cl_khr_spir

次のKhronosグループ
が承認した拡張機能名
は全てのOpenCL1.2を
サポートするデバイス
で戻されます。

cl_khr_global_
int32_base_atomics

cl_khr_global_
int32_extended_
atomics

cl_khr_local_
int32_base_atomics

cl_khr_local_
int32_extended_
atomics

cl_khr_byte_
addressable_store

cl_khr_fp64
CL_DEVICE_
PRINTF_
BUFFER_SIZE
size_t
カーネル内のprintf
コールの出力を持つ内部
バッファーの最大値。
FULLプロファイルの
最小値は1MBです。

CL_DEVICE_
PREFERRED_
INTEROP_
USER_SYNC
cl_bool
OpenCLと他のAPI
(DirectX等)とのメモ
リ共有を行なう際、メモ
リ同期についてユーザー
が責任をもつようにデバ
イスの環境設定がなってい
る場合はCL_TRUE。デバ
イス・実装が、OpenCLと
他のAPIで共有するメモリ
オブジェクトの同期につい
ての実行経路を持つ場合
はCL_FALSE。

CL_DEVICE_
REFERENCE_
COUNT
cl_uint
デバイスの参照カウント
を戻します。デバイスが
ルートレベル(サブデバ
イスではない)の場合は、
参照カウント1が戻され
ます。(本書ではサブデ
バイスの紹介はしないた
め、デバイスは1でカウン
トされるものと考えてく
ださい。)



Copyright 2018-2019, by Masaki Komatsu