インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® Xeon Phi™ コプロセッサー x100 製品ファミリー (開発コード名 Knights Corner) をターゲットとするインテル® 64 アーキテクチャーにのみ適用されます。
KNC クラス・ライブラリーには次のものがあります。
整数ベクトルクラス
浮動小数点ベクトルクラス
これらのクラスの定義は、ヘッダーファイル micvec.h に記述されています。
SIMD 演算用のクラス・ライブラリーは、「クラス・ライブラリーを使用するプロセッサーの必要条件」に示す各種プロセッサー用の基本命令を利用するための便利なインターフェイスです。 プロセッサー命令のこのような拡張機能によって、SIMD (single instruction-multiple data) 手法を用いた並列処理が可能になります。次の図は、SIMD のデータフローを示しています。
この命令では、命令 1 つで演算が 16 回実行できるため、効率が 16 倍改善されます。
このような新しいプロセッサー命令には、インテル® Xeon Phi™ コプロセッサー x100 製品ファミリー (開発コード名 Knights Corner) をターゲットとするインテル® 64 アーキテクチャー向けインライン・アセンブリー、組込み関数、または SIMD クラスを使用してアクセスできます。 この 3 種類のインターフェイスについて、32 ビット浮動小数点値を 16 個加算するのに必要なコーディングを比較してみてください。
次の表は、単精度浮動小数点値を 2 つ加算するコードについて、インライン・アセンブリー、組込み関数、および SIMD クラス・ライブラリーを用いた場合をそれぞれ示したものです。
インライン・アセンブリー | 組込み関数 | SIMD クラス・ライブラリー |
---|---|---|
__m512 a,b,c; __asm { vmovaps zmm0,b vmovaps zmm1,c vaddps zmm0,zmm0,zmm1 vmovaps a,zmm0 } |
#include <immintrin.h> ... __m512 a,b,c; a = _mm512_add_ps(b,c); ... |
#include <micvec.h> ... F32vec16 a,b,c; a = b + c; ... |