8.3. Context

Contextオブジェクトは、クラスツリー内の中心にあり各コンポーネント間が連携を行う中間点となります。

8.3.1. clCreateContext

clCreateContext関数はOpenCLコンテキストを生成します。

注記

詳細は「表:clCreateContext」(表B.16「表:clCreateContext」)を参照ください。

cl_context org.jocl.CL.clCreateContext(
    cl_context_properties properties, //(1)
    int num_devices, //(2)
    cl_device_id[] devices, //(3)
    CreateContextFunction pfn_notify, //(4)
    Object user_data, //(5)
    int[] errcode_ret) //(6)

(1)

コンテキストの属性を指定(詳細はcl_context_propertiesの項目を参照のこと)

(2)

デバイスの数

(3)

デバイスのコレクション

(4)

エラーレポートの処理を記述する関数コールバックで以下のように宣言する。

(5)

エラーレポートのユーザーデータ

(6)

エラーコード戻り値を指す整数配列

CreateContextFunctionはコールバック用のインターフェースです。以下のコールバック関数をメンバー関数とします。

void function(
    java.lang.String errinfo,
    Pointer private_info,
    long cb,
    java.lang.Object user_data)

CreateContextFunctionはログやライフサイクル関係の処理に連動させることができます。

8.3.2. cl_context_properties

注記

詳しくは「表:cl_context_properties」(表B.17「表:cl_context_properties」)を参照ください。

コンテキストのプロパティ名とそれに対応する値のリストを指定し、終端要素を0とします。コンテキストに対応するプラットフォームを指定できます。NULL値指定も可能です。

8.3.3. clCreateContextFromType

デバイスの種類(CPU/GPU等)を指定してコンテキストを生成します。基本的にはclCreateContextFromと同じですが、cl_device_id型へのポインタを指定する必要がなくなる等、デバイスIDの取得をコンテキスト内のデバイスコマンドに分離することができます。

注記

詳しくは「表:clCreateContextFromType」(表B.18「表:clCreateContextFromType」)を参照ください。

cl_context org.jocl.CL.clCreateContextFromType(
    cl_context_properties properties, //(1)
    long device_type, //(2)
    CreateContextFunction pfn_notify, //(3)
    Object user_data, //(4)
    int[] errcode_ret)

(1)

コンテキストプロパティの名称と対応する値のリスト。各プロパティ名は対応する値がすぐに続く。

(2)

デバイス型を識別するビットフィールド。

(3)

clCreateContextで詳細は記述済み。

(4)

適切なエラーコードを戻す。errcode_retがNULLの場合、エラーコードは戻さない。

clCreateContextとclCreateContextFromTypeは暗黙的リテインをします。リテインはアプリケーションからコンテキストを渡される第三者のライブラリにとって有用です。

しかし、アプリケーションがライブラリに知らせずにコンテキストを削除する事態もありえます。コンテキストを意識して明示的にリテイン、リリースすれば、有効でなくなったライブラリに使用されるコンテキストの問題を解決できます。

8.3.4. clRetainContext

clRetainContext関数はコンテキストの参照カウントをインクリメント。

注記

詳細については「表:clRetainContext」(表B.19「表:clRetainContext」)と「ソースコード例:context_helloworld_plus.cxx」(???)を参照ください。

レファレンス参照をインクリメントします。以下の行はcontextの参照カウントを一つ増やします。

int org.jocl.CL.clRetainContext(
    cl_context context)

retainしたコンテキストは解放する必要があります。

8.3.5. clReleaseContext

注記

詳細については「表:clReleaseContext」(表B.20「表:clReleaseContext」)と「ソースコード例:context_helloworld_plus.cxx」(???)を参照ください。

コンテキストのメモリ領域を解放するには、参照カウントを以下のようにデクリメントします。

int org.jocl.CL.clReleaseContext(
    cl_context context)

尚、JavaバインディングではOpenCLオブジェクトの解放は自動で行なわれます。

8.3.6. clGetContextInfo

clGetContextInfo関数はコンテキストについての情報の取得をします。

注記

詳しくは「表:clGetContextInfo」(表B.21「表:clGetContextInfo」)と「表:cl_context_info」(表B.22「表:cl_context_info」)を参照ください。

int org.jocl.CL.clGetContextInfo(
    cl_context context, //(1)
    int param_name, //(2)
    long param_value_size, //(3)
    Pointer param_value, //(4)
    long[] param_value_size_ret)

(1)

情報を取得したいOpenCLコンテキストを指定します。

(2)

CL_CONTEXT_NUM_DEVICESやCL_CONTEXT_DEVICESのcl_context_infoを指定します。

(3)

戻ってくる情報より大きいメモリサイズを指定します。

(4)

戻り値のアドレスを指すポインタ

8.3.7. cl_context_info

注記

詳細は「表:cl_context_info」(表B.22「表:cl_context_info」)を参照ください。

Copyright 2018-2019, by Masaki Komatsu