Chapter 5. APIとアーキテクチャ

Table of Contents

5.1. プラットフォームAPI
5.2. ランタイムAPI
5.3. カーネルプログラミング言語

OpenCLフレームワークモデルを開発者が実装するには、以下2つのAPIを使用する必要があります。

そしてデバイスで実行させたいプログラム(カーネル)のソースコードは、

を使って記述します。

プラットフォームAPIは、前の項目で解説したPlatform Modelを実装したライブラリです。OpenCL実装ライブラリ、OpenCLをサポートするデバイスを識別や、コンテキストを作成してデバイスを選択したり初期化をします。

OpenCL-C言語は、「.cl」の拡張子を持つファイル名に記述します。Runtime APIを使い「.cl」ファイルに記述したロジックを実行するには、カーネルと呼ばれる関数を呼び出す必要があります。OpenCL-Cでコードしたプログラムをカーネルプログラムと呼びます。

下記がPlatformとRuntime APIの詳細をモデルしたクラス図です。

Figure 5.1. 図:OpenCL API UMLクラス図

images/opencl-class-diagram.png

このUMLクラス図はOpenCL規格から取り出したものですが、通常のUMLクラスとは若干意味するところが異なるので注意してください。黒いダイアモンドが集約(aggregation)、何もない線が関連、矢上の線が継承に該当。MemObjectは抽象クラスを表します。

C言語でプログラミング経験のある読者はお分かりかと思いますが、C言語はオブジェクト指向言語でないため、この図は概念図として捉えるべきです。ただし以後、本書では、各クラスのインスタンスをオブジェクトと呼びます。

ではクラス図に戻ってみましょう。注目すべき点は、

です。分かりにくいかもしれませんが、クラス図を良く見て頂くと、Platform-Contextには1対多の関連(association)があります。つまり1つのPlatformに対して複数のContextオブジェクトがあるということです。

また間接的な依存関係は以下の2つからも分かります。

Platformオブジェクトから、DeviceIDオブジェクト、Contextオブジェクトというように依存しているので、OpenCLの全てのソースコードは以下の流れを前提とします。

  1. Platform
  2. DeviceID
  3. Context

Copyright 2018-2019, by Masaki Komatsu