インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

インテル® Xeon Phi™ コプロセッサー x100 製品ファミリー (開発コード名 Knights Corner) をターゲットとするインテル® 64 アーキテクチャーのライブラリーについて

このトピックは、インテル® Xeon Phi™ コプロセッサー x100 製品ファミリー (開発コード名 Knights Corner) をターゲットとするインテル® 64 アーキテクチャーにのみ適用されます。

KNC クラス・ライブラリーには次のものがあります。

これらのクラスの定義は、ヘッダーファイル micvec.h に記述されています。

クラス・ライブラリーの詳細

SIMD 演算用のクラス・ライブラリーは、「クラス・ライブラリーを使用するプロセッサーの必要条件」に示す各種プロセッサー用の基本命令を利用するための便利なインターフェイスです。 プロセッサー命令のこのような拡張機能によって、SIMD (single instruction-multiple data) 手法を用いた並列処理が可能になります。次の図は、SIMD のデータフローを示しています。

SIMD のデータフロー
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;
 ...