第2章 APIとアーキテクチャ

目次

2.1. プラットフォームAPI
2.2. ランタイムAPI
2.3. カーネルプログラミング言語
2.4. OpenCL SDK
2.4.1. Mac OS X
2.4.2. Installable Client Driver(ICD)
2.4.3. Windows
2.4.4. Linux
2.5. 検証環境
2.5.1. Mac Mini Late 2012の仕様
2.5.2. CPU/GPUデバイス
2.5.3. OpenCLデバイス情報
2.5.4. Intel第3・4世代CPU内蔵グラフィックボード
2.5.5. Intel Gen8/Gen9アーキテクチャ
2.6. Intel HD Graphics
2.7. Intel HD3000とHD4000の比較
2.8. Intel GPUとNVIDIA GPUのベンチマーク比較
2.9. SIMD
2.9.1. SSE/AVX
2.10. Autovectorization
2.10.1. 明示的ベクトル化
2.10.2. 暗黙的ベクトル化
2.11. Compute UnitとProcessing Element
2.11.1. なぜPEの理解は開発者にとって重要でないのか?
2.11.2. Execution Unit(Intel)
2.11.3. Streaming MultiProcessor(NVIDIA)
2.11.4. Compute Unit(AMD GCN)
2.12. サポートするプロセッサー
2.13. ワークグループ
2.13.1. CL_DEVICE_MAX_WORK_ITEM_SIZES
2.14. NDRange
2.14.1. NDRange:1次元
2.14.2. NDRange:2次元
2.14.3. NDRange:3次元
2.15. メモリー領域
2.15.1. privateメモリ
2.15.2. localメモリ
2.15.3. globalメモリ
2.15.4. constantメモリ
2.16. メモリレイテンシ
2.16.1. メモリ・キャッシュ帯域
2.17. 共有ローカルメモリ
2.17.1. Intel(第3~4世代以降のCPUアーキテクチャ)
2.17.2. NVIDIA
2.17.3. AMD
2.18. Stalls(ストール)
2.19. メモリストライド
2.19.1. キャッシュライン
2.19.2. バンク
2.20. 2次元アクセスパターン

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

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

を使って記述します。

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

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

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

図2.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