ライブラリの詳細

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

SIMDのデータフロー

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

このような新しいプロセッサ命令は、インライン・アセンブリ、組込み関数、または C++ SIMD クラスのいずれを使用しても実装できます。その3種類のインターフェイスについて、32ビット浮動小数点値を4個加算するのに必要なコーディングを比較してみてください。

インライン・アセンブリ、組込み関数、クラス・ライブラリの比較

インライン・アセンブリ 組込み関数 SIMDクラス・ライブラリ
... __m128 a,b,c; __asm{ movaps xmm0,b movaps xmm1,c addps xmm0,xmm1 movaps a, xmm0 } ... #include <mmintrin.h> ...__m128 a,b,c; a = _mm_add_ps(b,c); ... #include <fvec.h> ...F32vec4 a,b,c; a = b +c; ...

上の表は、単精度浮動小数点値を2個加算するコードについて、インライン・アセンブリ、組込み関数、およびSIMD クラス・ライブラリを用いた場合のそれぞれについて示したものです。インテル C++ SIMD クラス・ライブラリでコーディングをするのがいかに簡単かがわかります。キー入力の数が減り、コードの行数が減るだけでなく、表記についてもC++の標準表記と似ているため、他の手法よりも簡単に実装できます。