目次
OpenCLフレームワークモデルを開発者が実装するには、以下2つのAPIを使用する必要があります。
そしてデバイスで実行させたいプログラム(カーネル)のソースコードは、
を使って記述します。
プラットフォームAPIは、前の項目で解説したPlatform Modelを実装したライブラリです。OpenCL実装ライブラリ、OpenCLをサポートするデバイスを識別や、コンテキストを作成してデバイスを選択したり初期化をします。
OpenCL-C言語は、「.cl」の拡張子を持つファイル名に記述します。Runtime APIを使い「.cl」ファイルに記述したロジックを実行するには、カーネルと呼ばれる関数を呼び出す必要があります。OpenCL-Cでコードしたプログラムをカーネルプログラムと呼びます。
下記がPlatformとRuntime APIの詳細をモデルしたクラス図です。
このUMLクラス図はOpenCL規格から取り出したものですが、通常のUMLクラスとは若干意味するところが異なるので注意してください。黒いダイアモンドが集約(aggregation)、何もない線が関連、矢上の線が継承に該当。MemObjectは抽象クラスを表します。
C言語でプログラミング経験のある読者はお分かりかと思いますが、C言語はオブジェクト指向言語でないため、この図は概念図として捉えるべきです。ただし以後、本書では、各クラスのインスタンスをオブジェクトと呼びます。
ではクラス図に戻ってみましょう。注目すべき点は、
です。分かりにくいかもしれませんが、クラス図を良く見て頂くと、Platform-Contextには1対多の関連(association)があります。つまり1つのPlatformに対して複数のContextオブジェクトがあるということです。
また間接的な依存関係は以下の2つからも分かります。
Platformオブジェクトから、DeviceIDオブジェクト、Contextオブジェクトというように依存しているので、OpenCLの全てのソースコードは以下の流れを前提とします。
Copyright 2018-2019, by Masaki Komatsu