B.24. プログラムのリンク、コンパイル

B.24.1. clCompileProgram

表B.68 表:clCompileProgram

関数
cl_int
clCompileProgram (
    cl_program program,
    cl_uint num_devices,
    const cl_device_id *device_list,
    const char *options,
    cl_uint num_input_headers,
    const cl_program *input_headers,
    const char **header_include_names,
    void (CL_CALLBACK *pfn_notify)
    (
        cl_program program,
        void *user_data
    ),
    void *user_data
)
 プログラムと関連付けられたOpenCLコンテキス
ト内の全てのデバイスまたは特定のデバイスに対して
プログラムのソースコードをコンパイル。

プログラムのソースがコンパイルされる前にプリプロ
セッサーは処理を開始。コンパイルされたバイナリは、
プログラムと関連付けられた全てのデバイスまたは、
指定されたデバイスのリストに対してビルドされます。

コンパイルされたバイナリ
の情報は
`clGetProgramInfo`
`(program, `
`CL_PROGRAM_BINARIES, `
`...)`を使用して取得でき、
clCreateProgramWith
Binaryを使って新しい
プログラムオブジェクト
を生成することに指定
が可能。
 引数
 program
コンパイルのターゲット
となるプログラム
オブジェクト。
device_list
プログラムに関連付
けられたデバイスの
リストを指すポインタ。
device_listがNULL
値の場合、全ての関連
付けられたデバイスに
対してコンパイルが
行なわれる。
device_listが非
NULL値の場合は、
リストに指定した
デバイスに対して
コンパイルを行なう。
num_devices
device_listにある
デバイスの個数。
options
実行可能プログラムを
ビルドする際に適用する
コンパイルオプション
指定するNULL終端文字
列へのポインタを指定。
<<compiler_option>>
を参照のこと。
num_input_
headers
input_headersが参照
する配列内のヘッダーを
記述するプログラムの
個数を指定。
input_headers
clCreateProgram
WithSourceで生成した、
プログラムの組込みヘッ
ダーの配列を指定。
header_
include_names
input_headersと1対1
の関係を持つ配列。
header_include_names
の各エントリは、プログ
ラムの組込みヘッダー内の
ソースに使用されたインク
ルードの名称を指定。組込
みヘッダーは、-Iコンパイ
ルオプションで指定された
ヘッダーの前に、最初に検索
される。
header_include_names
の複数のエントリが同じヘッ
ダー名を参照する場合、最
初に見つけたものが使われる。
pfn_notify
通知ルーチンへの関数
ポインタ。通知ルーチン
はアプリケーションが登
録できるコールバック関
数であり、実行可能プロ
グラムがコンパイルされ
た際に成功失敗に関わら
ず呼び出される。

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

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

device_listがNULL
でなく、num_devices
が0の場合
CL_INVALID_
VALUE
num_input_headers
が0で、
header_include_names
または input_headers
がNULLでない場合。

num_input_headers
が0でなく、
header_include_names
または input_headers
がNULLの場合。
CL_INVALID_
VALUE
pfn_notifyがNULL
だが、user_dataが
NULLでない場合。
CL_INVALID_
DEVICE
device_listの
リスト内にあるOpenCL
デバイスがprogramに
関連付けられたデバイス
のリストの中にない場合。
CL_INVALID_
COMPILER_
OPTIONS
オプションで指定した
コンパイラオプション
が有効でない場合。
CL_INVALID_
OPERATION
clCompileProgram
または
clBuildProgramを
事前に呼び出した
device_list内の全て
のデバイスに対しての、
実行可能プログラムの
コンパイルまたはビルド
が終了していない場合。
CL_COMPILER_
NOT_AVAILABLE
コンパイラが利用
可能でない場合。
CL_COMPILE_
PROGRAM_FAILURE
プログラムソースの
コンパイルに失敗
した場合。
CL_INVALID_
OPERATION
プログラムに付属
したカーネルオブジ
ェクトがある場合。
CL_INVALID_
OPERATION
プログラムにソース
がない場合。
(clCreateProgram
WithSourceで生成
していない場合)
CL_OUT_
OF_RESOURCES
デバイス上のOpenCL
実装が必要とする
リソース確保に失敗
した場合。
CL_OUT_OF_
HOST_MEMORY
ホスト上のOpenCL実装
が必要とするリソース
確保に失敗した場合。

Copyright 2018-2019, by Masaki Komatsu