本書で使用する用語

Application

アプリケーション
ホストとOpenCLデバイスで動作するプログラムの組み合わせと定義します。

Blocking and Non-Blocking

ブロッキング・ノンブロッキングエンキュー APIコール
ノンブロッキングエンキューAPIコールはコマンドをコマンドキューにのせて即座にホストに戻ります。ブロッキングエンキューAPIコールはコマンドが終了するまでホストに戻りません。

Barrier

バリアー
バリアーには2種類あります。コマンドキューバリアーとワークバリアーです。

Command-Queue Barrier

コマンドキューバリアー
OpenCL APIはコマンドキューにエンキューする関数を提供しますが、バリアーコマンドは全ての事前にエンキューしたコマンドが、以降にエンキューされたコマンドが実行を開始する前に、終了することを保障します。

Workgroup Barrier

ワークグループバリアー
OpenCL Cプログラミング言語は組み込みワークグループバリアー関数を提供します。デバイスで実行中のカーネルはこの関数を使い、ワークグループのワークアイテム間の同期を実現します。各ワークグループにある全てのワークアイテムはバリアーを実行しないと次の処理に進むことはできません。

Buffer Object

バッファーオブジェクト
線形コレクションを記憶するメモリーオブジェクトです。バッファーオブジェクトはデバイスで実行中のカーネルのポインタを使いアクセスすることができます。またOpenCL APIコールを使いホストで加工処理ができます。バイトサイズや、使用に関する情報や割当領域等のプロパティを保存します。

Built-in Kernel

組み込みカーネル
組み込みカーネルはOpenCLデバイスやカスタムデバイスで動作するカーネルです。アプリケーションはサポートされたデバイスについてクエリーを行うことができます。プログラムオブジェクトはOpenCL Cや組み込みカーネルのいずれかで書かれたカーネルを持つことができますが、両方同時に持つことはできません。

Command

コマンド
実行のためにコマンドキューに投入したOpenCLの操作です。

Command Queue

コマンドキュー
特定のデバイスで実行されるコマンドを保持するオブジェクトです。コマンドキューはコンテキスト内の特定デバイス上で生成されます。コマンドはコマンドキューに順に投入されますが、順(in-order)または順不同(out-of-order)で実行されます。

Compute Device Memory

演算デバイスメモリ
演算デバイスに付加された一つ以上のメモリーです。

Compute Unit(CE)

演算器
一つ以上の演算ユニットを持つOpenCLデバイスです。ワークグループは単一演算ユニットで実行されます。Compute Unitは一つ以上の処理要素(processing elements: PE)とローカルメモリーで構成されます。

Concurrency

並行処理
同一システムでタスクを同時に処理することです。

Constant Memory

コンスタントメモリー
カーネル実行中にグローバルメモリー内でデータが一定となる領域です。ホストはメモリーオブジェクトを割当・初期化して、コンスタントメモリーに投入することができます。

Context

コンテキスト
カーネルが実行する環境や、同期・メモリー管理が定義されるドメインを指します。コンテキストは複数のデバイスや、デバイスとアクセスできるメモリー、一つ以上のコマンドキュー、メモリーオブジェクト操作で構成されます。

Custom Device

カスタムデバイス
OpenCLランタイムAPIを実装するOpenCLデバイス だがOpenCL Cプログラミング言語で記述したプログラムをサポートしないデバイスです。(例:一部のDSP等)カスタムデバイスはOpenCLに準拠しないデバイスです。

Data Parallel Programming Model

データ並列プログラミングモデル
一つのプログラムが、データ構造の集合の中で複数の要素に、並列で適応させるプログラミングモデルです。アレイの添字に同時にアクセスして処理するプログラムを一般に指します。

Device

デバイス
演算ユニットのコレクションです。OpenCLデバイスはGPU、マルチコアCPU、DSPやFPGA等を含みます。OpenCLを実装しているかはベンダーの規格書、仕様書に記述されています。

Event Object

イベントオブジェクト
コマンド等の操作のカプセル化をするオブジェクトです。コンテキスト内の操作を同期するために使うことができます。

Event Wait-List

イベント待機リスト(event wait-list)
特定のコマンドが実行を開始した際に制御できるイベントオブジェクトのリストです。

Framework

フレームワーク
ソフトウェア開発や実行環境をサポートするコンポーネントの集合です。ライブラリ、API、ランタイムシステム、コンパイラ等を含みます。

Global ID

グローバルID
カーネルを実行する際に指定したグローバルワークアイテムの数から派生し、ワークアイテムを一意的に識別するために使います。グローバルIDは、n次元の値で、(0, 0, …, 0)の値から開始します。

Global Memory

グローバルメモリ
コンテキスト内の全ての実行中のワークアイテムにアクセス可能なメモリ領域です。ホストからも、read/write/map等のコマンドを介してアクセスすることができます。

GL Sharing Group

GL共有グループ
GL共有グループオブジェクトは、共有されたOpenGLまたはOpenGL ESリソース(テキスチャ、バッファー、フレームバッファー、レンダーバッファー)を管理し、一つ以上のGLコンテキストオブジェクトと関連します。

Handle

ハンドル
OpenCLに割り当てられたオブジェクトを参照する不透明な型です。オブジェクトに対するいかなる操作もオブジェクトのハンドルを参照します。

Host

ホスト
ホストはOpenCLを使いコンテキストとやりとりします。

Host Pointer

ホストポインタ
ホストの仮想アドレス空間に存在するメモリーへのポインタです。

Event Object

イメージオブジェクト
2次元または3次元のアレイデータを保存するメモリーオブジェクトです。イメージデータは読み込み・書き込み関数を通じてのみアクセスができます。読み込み関数はサンプラーを使うことができます。次元数や、イメージの各要素の説明や使用に関するプロパティをカプセル化します。

In-order Execution

In-order実行
コマンドをコマンドキューに投入した順で実行・終了することを指します。

Kernel

カーネル
プログラムで宣言された関数かつOpenCLデバイスで実行できるものをさします。カーネルは__kernelまたはkernel修飾子で識別され、プログラムで定義された関数に適用されます。

Kernel Object

カーネルオブジェクト
プログラム内で宣言された__kernel関数および引数値をカプセル化します。

Local ID

ローカルID
所定のカーネルを実行するワークグループ内にあるユニークなワークアイテムIDを特定するIDです。ローカルIDはN次元の値をとり、(0, 0, …, 0)の0値から開始します。

Local Memory

ローカルメモリー
ワークグループに関連づけられたメモリ領域です。ワークグループ内にワークアイテムからのみアクセスができます。

Marker

マーカー
コマンドキューに投入されたコマンドで、全ての先行するコマンドをタグするために使います。マーカーコマンドは処理を終了する前に、その他全てのキューに投入されたコマンドを待機させます。

Memory Object

メモリーオブジェクト
グローバルメモリー領域を参照するオブジェクトです。例としてバッファーオブジェクトや、イメージオブジェクトがあります。

Memory space

メモリ領域 (またはPools)
OpenCL内での明確なアドレス領域です。メモリ領域は物理メモリーとオーバーラップすることがあります(ただし論理的には別なものとして扱います)。メモリ領域には、private、local、constantとグローバルがあります。

Object

オブジェクト
オブジェクトはOpenCL APIが操作可能なリソースの抽象的な表現です。プログラムオブジェクト、カーネルオブジェクト、メモリーオブジェクトが存在します。

Out-of-order Execution

Out-of-Order実行
キューに投入されたコマンドが処理を開始、終了する順序に対して課せられる(イベント待機リストやコマンドキューバリアー等の)制約と一致した実行モデルです。

Platform

プラットフォーム
(リソースを共有したりカーネルをデバイスで実行する)OpenCLフレームワークが管理するホストとデバイスのコレクションをさします。

Private Memory

プライベートメモリー
ワークアイテムに対してプライベートなメモリ領域です。あるワークアイテムのプライベートメモリで定義した変数は、他のワークアイテムからはアクセスできません。

Processing Element

プロセッシングエレメント(Processing Element、略称はPE)
仮想スカラプロセッサです。ワークアイテムは1つ以上のプロセッシングエレメント(PE)で実行することができます。

Program

プログラム
カーネルの集合で構成されるOpenCLプログラムを指します。

Program Object

プログラムオブジェクト
関連するコンテキストへの参照とプログラムのソースとバイナリ、ビルドした最新の実行プログラム、ビルドオプション、ビルドログ、関連するカーネルオブジェクトの数等をカプセル化します。

Reference Count

参照カウント(reference count)
オブジェクトへの参照の数の内部カウントです。OpenCLオブジェクトのライフスパン(寿命)は参照カウントで決定されます。OpenCLでオブジェクトを生成するとき、参照カウントは1となります。後に続いて、retain(clRetainContextやclRetainCommandQueue)をコールすると、参照カウントはインクリメントされます。逆にreleaseをコールすると、参照カウントはデクリメントされます。参照カウントが0に達するとオブジェクトリソースの割当は解除されます。

Relaxed Consistency

緩やかな整合性
バリアーまたはその他の明示的同期ポイントを例外として、異なるワークアイテム・コマンドで可視化されたメモリーの中身が異なることがあるメモリー整合性モデル。

Resource

リソース
OpenCLが定義するオブジェクトの種類です。リソースのインスタンスはオブジェクトとなります。例としてコンテキスト、コマンドキュー、プログラムオブジェクト、カーネルオブジェクト、メモリーオブジェクトがあります。ホスト、デバイス、演算ユニット(CE)、プロセッシングエレメント(PE)等のハードウェアもリソースに含めることがあります。

Retain, Release

保持(retain)、解放(release)
OpenCLオブジェクトを使って参照カウントをインクリメント、デクリメントする動作を指します。

Sampler

サンプラー(sampler)
イメージをどのようにサンプリング(標本抽出)するかをカプセル化したオブジェクトです。イメージ読み込み関数はこのサンプラーを引数として使います。サンプラーは、アドレスモード、範囲外座標の処理方法、フィルターモード、入力イメージ座標の正規化・非正規化された値かを指定することができます。

SIMD

SIMD
SIMD(Single Instruction Multiple Data)は、カーネルがデータと共有プログラムカウンターに対して複数の処理要素(プロセッシングエレメント、PE)を使い並行で実行されるプログラミングをさします。このモデルでは全てのPEは厳密に同一な命令を実行するものとします。

SPMD

SPMD
SPMD(Single Program Multiple Data)はカーネルがデータと所有するプログラムカウンターに対して複数の処理要素(プロセッシングエレメント、PE)を使い並行で実行されるプログラミングをさします。つまり全ての演算リソースは同一カーネルを実行しますが、自らの命令カウンタを保ちます。さらにカーネル内の分岐により、実際の命令シーケンスは各PEによって大きく異なることがあります。

Task Parallel Programming Model

タスク並列プログラミングモデル
計算が複数の並行した(要素が1の単一ワークグループで動作する)タスクとして表現されるプログラミングモデルです。並行タスクは異なるカーネルを実行することができます。(マルチスレッドプログラミングの最も一般的な様態です。)

Thread safe

スレッドセーフ
複数のホストスレッドに同時に呼び出されたときに(OpenCLで管理された)内部状態に整合性がとれているときに、OpenCL APIコールはスレッドセーフとして定義されます。スレッドセーフなOpenCL APIコールは複数のホストスレッドで関数を(相互排他を実装せずに)アプリケーションが呼び出せることを可能とします。(つまりリエントラント・セーフでもある)。

Undefined

未定義
カーネルの実行時に使う組込み関数でOpenCLが定義していない場合のOpenCL APIコールのふるまいを未定義(undefined)と呼びます。

Work-group

ワークグループ
一つの演算ユニット(CU)を実行する関連したワークアイテムのコレクションです。グループ内のワークアイテムは同じカーネルを実行し、かつローカルメモリーとワークグループバリアーを共有します。

Work-item

ワークアイテム
デバイスで呼び出されるカーネルの並列実行を構成するコレクションの1要素(スレッド)です。ワークアイテムは(一つの演算ユニットで実行中のワークグループの一部分として)一つ以上のプロセッシングエレメント(PE)で実行されます。ワークアイテムはコレクション内の他のカーネルインスタンス(ワークアイテム)と、グローバルIDとローカルIDにより、区別するこができます。

Copyright 2018-2019, by Masaki Komatsu