本書での検証はMac Miniで行うものとします。仕様については下記の表とおりです。
AVXの拡張命令をサポートしており、Intel HD Graphics 4000が検証に使うGPUプロセッサです。
Intel HD Graphics 4000には1GBのメモリがあると記載されていますが、ホストのメインメモリと共有しているため、ホストからデバイスのメモリーにコピーする必要はありません。ただし、AMDやNVIDIAが提供するボードの専用メモリと比べると性能は大幅に下がります。
表2.2 表:Mac Mini Late 2012のハード仕様
| |
プロセッサ |
|
グラフィックス |
|
メモリ |
|
OS |
|
スマートキャッシュ |
|
DMI |
|
命令セット |
|
拡張命令 |
|
コア |
|
スレッド |
|
Turbo |
|
最大メモリーチャンネル数 |
|
最大メモリー帯域 |
|
Mac Miniの仕様では、ホストのメインメモリーが4GBとされていますが、下表はOpenCL実装ライブラリに検知させた詳細なハードウェアのスペックとなります。
各プロセッサに附属するローカルメモリーは、CPUでは32KB、GPUには64KBの領域が使用可能です。(ローカルメモリーは以降の項目で説明します。)
読者のお持ちの環境が最近の端末でIntelかAMDのCPUを搭載していれば、CPUはGPU内蔵型の可能性が濃厚です。
本書の検証環境は「表:プラットフォーム内のOpenCLデバイス情報」(表2.4「表:プラットフォーム内のOpenCLデバイス情報」)で確認できます。検証環境として使用しているMac MiniにはCPUとGPUが同じボードに併存します。これはGPUがCPUチップセットの内蔵型グラフィックボードだからです。
CPUとGPUデバイスが混在するアーキテクチャは、ヘテロジニアス・マルチコアを理解する上で大きな利点と考えます。
本書ではNVIDIAやAMDの専用GPUボードは扱わないものの、OpenCLで考慮すべき点はIntelのGPUと変わりません。
OpenCLはサポートしているデバイスの情報を取得できる機能があります。この機能を使い情報を取得した結果を、下記の表にまとめました。
表2.4 表:プラットフォーム内のOpenCLデバイス情報
Device 0 | |
デバイス種類 | CPU |
グローバルメモリサイズ | 4294967296 |
ローカルメモリサイズ | 32768 |
最大CU数 | 4 |
最大ワークグループサイズ | 1024 |
最大次元数 | 3 |
Device 1 | |
デバイス種類 | GPU |
グローバルメモリサイズ | 1073741824 |
ローカルメモリサイズ | 65536 |
最大CU数 | 16 |
最大ワークグループサイズ | 512 |
最大次元数 | 3 |
グローバルメモリサイズは、グローバルメモリ領域にあるメモリの最大値です。この場合は普段アプリケーションが使うメインメモリを指します。Core i5 CPUでは4GB、HD Graphic 4000では、1GBのメモリ領域が割り当てられます。
ローカルメモリサイズはチップセット内に配置されたメモリを指します。32KB〜64KBのメモリ領域が割り当てられるのが一般的です。Core i5が32KB、HD Graphic 4000が64KBとなっています。
後述しますが、Compute UnitというCPU/GPU内に「物理的」に存在する処理単位の最大数を示します。
CPUの場合はこの値はCPUのコア数を示します。つまりCU数は並列処理可能な最大個数を原則(SIMD/SPMDは除く)として表します。Core i5では4個となります。
HD Graphic 4000では16個が最大値となります。つまり16個の並列処理ユニットが物理的に存在することになります。Compute Unitについてはデバイスの仕様を解説する際に再度説明します。
前項と同じく後述しますが、ワークグループは複数の処理を集合した「論理的」な処理グループです。アプリケーションを設計する際に開発者が指定する必要があります。論理的に定義したワークグループは、OpenCLによってCompute Unitにマップされます。
検証のために使うGPUでバイスはHD Graphic 4000であり第3世代のIntelグラフィックボードです。これと第4世代の内蔵ボードを比較したのが下図です。
表2.5 表:Intel第3世代・第4世代CPU内蔵グラフィックボード
Intel HD Graphic 4000 | Intel HD Graphics | 4200/4400/4600 | 5000/5100/5200 | |
API | ||||
Execution Units | 16 EU | 10 EU | 20 EU | 40EU |
浮動小数演算命令数/clock | 256 | 160 | 320 | 640 |
スレッド/EU(総数) | 8/EU(128) | 7/EU(70) | 7/EU(140) | 7/EU(280) |
Texture Sampler | 2 | 1 | 2 | 4 |
筆者はIntel HD Graphicsの広報をする動機も目的もありませんが、Intelの内蔵ボードでの処理が本書の主題の一つである以上、最新のアーキテクチャを読者に紹介することは必要と考えます。
Intel Gen8/Gen9アーキテクチャは最新の内蔵グラフィックボードの一つです。このうち最上位機種では、336ハードウェアスレッドをサポートします。
またSLM(共有ローカルメモリ)がサブスライスにつき64KBのため、Intel Iris Pro Graphics 6200では、384KBを上限としたメモリ領域を使うことが可能です。
表2.6 表:Gen8アーキテクチャー
Intel HD Graphics 5300 | Intel Iris Pro graphics 6200 | |
EU | 24 EUs | 48 EUs (8 EU x 3 subslices x 2 slices) |
ハードウェアスレッド(HW) | 168 HW Threads | 336 HW Threads |
並列カーネルインスタンス | 5,376 | 10,752 |
L3 cache | 384-576KB | 768-1024 KB |
最大SLM | 192 KB | 384 KB |
LLC | 4-8 MB | 4-8 MB |
eDRAM | n/a | 128 MB |
Intel Gen9アーキテクチャでもGen8と同様に、サブスライスに対して64KBの共有ローカルメモリ領域が確保されています。
表2.7 表:Gen9アーキテクチャー
Intel HD Graphics 530 | |
EU | 24 EU(8 EU x 3 subslices x 1 slice) |
ハードウェアスレッド(HW) | 168 HWスレッド |
並列カーネルインスタンス | 5376 |
L3 cache | 512 KB |
最大SLM | 192 KB |
LLC | 2-8 MB |
Gen9はSoC(System on Chip)という半導体チップに必要なコンポーネント、サブコンポーネントを配置する集積回路ですが、コマンドストリーマー、ディスパッチャー、サブスライス/EUという処理の流れでアプリケーションから入力されたデータを制御します。
このデータフローはGen9に固有のものではなく他のボードもこれに準拠します。
各サブスライスにはL3データキャッシュが配置される複合体とのバスが存在し、その上に共有ローカルメモリ(SLM)もあります。バスの帯域は64バイトです。
Copyright 2018-2019, by Masaki Komatsu