2.9. SIMD

Single Instruction Multiple Data(SIMD)はOpenCLに特有のものではなくベクトル型の要素での並列演算処理を可能とします。SIMD命令は複数のデータ要素を1サイクルで処理させます。

2.9.1. SSE/AVX

IntelやAMDのCPUが実装したSIMDはSSEと呼びます。Intelの最新のチップはAVXというSIMDのアーキテクチャをサポートしています。

Intelのマイクロプロセッサーではベクトルを並列で処理する機構である以下3つの規格(いずれか一つ)が採用されています。

  • Intel Streaming SIMD Extensions (Intel SSE)
  • Intel Advanced Vector Extensions (Intel AVX)
  • Intel Advanced Vector Extensions 2 (Intel AVX2)

各規格の詳細についてはIntelがネットで公開しているドキュメントやマニュアルを参照ください。SSEにはSSE2、SSE3といったようにバージョンがついており、各ハードウェアでサポートしているSIMD拡張が異なります。

検証環境で使うIntel Core I5のマイクロアーキテクチャーIvyBridgeはAVXをサポートしているので、OpenCLの実装もAVXに適したパラメーターを設定するようにします。

IntelはAVXの推奨設定として下記のものをあげています。

  • 16個のバリアーレジスタがあるため、最大16個までのワークグループが同時に実行できる。最低でも16個以上のワークグループを同時に動作させるようにコードすることを推奨。
  • 共有ローカルメモリーの最大値は64KB、そのため一つのワークグループに16KBのメモリ領域を要するのであれば、4つのワークグループが並列で処理される。
  • より高い使用率を実現するにはワークグループのサイズ(Local Work Size)を64〜256にする。

CPU/GPUでの推奨ワークグループサイズは64または128です。

Copyright 2018-2019, by Masaki Komatsu