B.25. プログラムのリンク

B.25.1. clLinkProgram

Table B.69. 表:clLinkProgram

関数
cl_program
clLinkProgram (
    cl_context context,
    cl_uint num_devices,
    const cl_device_id *device_list,
    const char *options,
    cl_uint num_input_programs,
    const cl_program *input_programs,
    void (CL_CALLBACK *pfn_notify)(
        cl_program program, void *user_data),
    void *user_data,
    cl_int *errcode_ret)
全ての(または特定の)デバイスに対してコンパ
イルされたプログラムオブジェクトとライブラリの集
まりをリンクし、実行可能プログラムを生成する。

clLinkProgramはこの
実行可能プログラムを含む
新たなプログラムオブジェ
クトを生成する。実行可能
バイナリは
`clGetProgramInfo(`
`program, `
`CL_PROGRAM_BINARIES, ...)`
関数を使い検索でき、新たな
プログラムオブジェクトを生
成するためにclCreate
ProgramWithBinaryに
指定できる。

戻ってきたプログラム
オブジェクトに関連付け
られたデバイスは、
device_listで指定され
たデバイスのリストとなる。
device_listがNULLの
場合は、contextに関連付
けられたデバイスのリスト
になる。
 引数
context
有効なOpenCLコンテ
キストを指定。
device_list
コンテキスト内のデバ
イスのリストを指すポ
インタ。device_list
がNULL値の場合、全ての
contextに関連付けられ
たデバイスに対してリンク
が行なわれる。
device_listが非NULL
値の場合は、リストに
指定したデバイスに対し
てリンクを行なう。
num_devices
device_listにあ
るデバイスの個数。
options
実行可能プログラム
をビルドする際に適用
するリンクオプション
を指定するNULL終端文
字列へのポインタを指定。
num_input_
programs
input_programsに
参照される配列内にあ
るプログラムの数を指定。
input_
programs
実行可能プログラム
を作るためにリンク
されるコンパイルされ
たバイナリまたはライ
ブラリからなるプログ
ラムオブジェクトの配列
を指定。device_list
の各デバイスに対して、
またはdevice_listが
NULLの場合、以下の
ケースが起きる可能性
があります。

input_programsで
指定された全ての
プログラムがコンパイル
されたバイナリまたは
ライブラリとなる。
この場合、デバイスに
対して実行可能プログラム
を生成するためにリンク
を行ないます。

プログラムがコンパイル
されたバイナリまたは
ライブラリを含まない。
この場合、デバイスに
対して実行可能プログ
ラムは生成されません。
またリンクもしません。

それ以外の場合は、
CL_INVALID_
OPERATIONエラー
を戻す。
pfn_notify
通知ルーチンへの
関数ポインタ。通知ル
ーチンはアプリケーシ
ョンが登録できるコー
ルバック関数であり、
実行可能プログラムが
リンクされた際に成功
失敗に関わらず呼び出
される。

pfn_notifyがNULLで
ない場合、
clLinkProgram は
リンクの完了を待つ
必要が無くなりすぐに
戻ることができる。
コンテキスト、ソース
やバイナリが
コンパイル・ビルドさ
れたプログラム、デバ
イスのリストおよび指定
されたビルドオプション
が全て有効な場合、ビル
ド処理は開始可能となる。

pfn_notifyがNULLの
場合、clLinkProgram
はリンクが完了するま
で戻らない。このコール
バック関数は非同期的
に呼び出される。コール
バック関数がスレッドセ
ーフであることを保証す
るのはアプリケーション
側の責任です。
user_data
pfn_notifyを呼び
出す際、user_data引
数として渡します。
NULL値を指定可能。
 成功した場合の戻り値
 CL_SUCCESS
 失敗した場合の戻り値
CL_INVALID_
CONTEXT
contextが有効なコン
テキストでない場合。
CL_INVALID_
VALUE
device_listがNULLで、
num_devicesが0より
大きい場合。

device_listがNULL
でなく、num_devices
が0の場合
CL_INVALID_
VALUE
num_input_programs
が0で、input_programs
がNULLの場合。

num_input_programs
が0で、input_programs
がNULLでない場合。

num_input_programs
が0でなく、
input_programsが
NULLの場合。
CL_INVALID_
PROGRAM
input_programsで
指定されたプログラムが
有効なプログラムオブ
ジェクトでない場合。
CL_INVALID_
VALUE
pfn_notifyがNULL
なのに、user_dataが
NULLでない場合。
CL_INVALID_
DEVICE
device_listのリス
ト内にあるOpenCLデバ
イスがcontextに関連付
けられたデバイスのリス
トの中にない場合。
CL_INVALID_
LINKER_OPTIONS
リンカーオプション
が無効な場合。
CL_INVALID_
OPERATION
clCompileProgram
またはclBuildProgram
を事前に呼び出した
device_list内の全て
のデバイスに対しての、
実行可能プログラムの
コンパイルまたはビルド
が終了していない場合。
CL_INVALID_
OPERATION
コンパイルされた
バイナリまたは
ライブラリを含む
デバイスの規則が守
られない場合。
CL_LINKER_
NOT_AVAILABLE
リンカーが利用
可能でない場合。
CL_LINK_
PROGRAM_FAILURE
コンパイルされた
バイナリ及び(又は)
ライブラリをリンク
するのに失敗した場合。
CL_OUT_
OF_RESOURCES
デバイス上のOpenCL
実装が必要とする
リソース確保に失敗
した場合。
CL_OUT_OF_
HOST_MEMORY
ホスト上のOpenCL
実装が必要とする
リソース確保に失敗
した場合。

Copyright 2018-2019, by Masaki Komatsu