インテル® C++ コンパイラー 16.0 ユーザー・リファレンス・ガイド

インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーのライブラリーについて

このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーにのみ適用されます。

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

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

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

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

SIMD のデータフロー
SIMD のデータフロー

この命令では、命令 1 つで演算が 16 回実行できるため、効率が 16 倍改善されます。

このような新しいプロセッサー命令には、インライン・アセンブリー、組込み関数、またはインテル® MIC アーキテクチャー向け SIMD クラスを使用してアクセスできます。この 3 種類のインターフェイスについて、32 ビット浮動小数点値を 16 個加算するのに必要なコーディングを比較してみてください。

次の表は、単精度浮動小数点値を 2 つ加算するコードについて、インライン・アセンブリー、組込み関数、および SIMD クラス・ライブラリーを用いた場合をそれぞれ示したものです。

インライン・アセンブリー、組込み関数、クラス・ライブラリーの比較
インライン・アセンブリー 組込み関数 SIMD クラス・ライブラリー
__m512 a,b,c;
__asm{ vloadd v0,b
       vloadd v1,c
       vaddps v0,v1
       vstored a, v0 }
#include <immintrin.h>
 ... 
__M512 a,b,c;
a = _mm512_add_ps(b,c);
 ... 
				  
#include <micvec.h>
 ... 
F32vec16 a,b,c;
a = b + c;
 ...