インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
このトピックは、インテル® MIC アーキテクチャーにのみ適用されます。
インテル® メニー・インテグレーテッド・コア (インテル® MIC) SIMD 演算用の C++ クラスは、配列 (ベクトルデータ) を並列処理するときに使用するのが基本です。
例として、2 つのベクトル A と B の加算を考えてみます。各ベクトルは 4 つの要素で構成されているとします。 整数ベクトル (Ivec) クラスを使用して、各配列から取り出した要素 A[i] と B[i] を下の例のように加算します。
short a[16], b[16], c[16]; for (i=0; i<16; i++) /* 16 回反復が必要 */ c[i] = a[i] + b[i]; /* c[0], c[1], c[2], c[3], …, c[15] を返す */
次の例を見ると、Ivec クラスを使用すれば 1 回の演算で同じ結果が得られることが分かります。
sIs32vec16 ivecA, ivecB, ivec C; /* 1 回反復が必要 */ ivecC = ivecA + ivecB; /* ivecC0, ivecC1, ivecC2, ivecC3 を返す */
並列処理は、通常、C++ にそれほど簡単には実装できませんが、これらの C++ クラスを使用すればそれが可能です。以下の表は、これらのクラス・ライブラリーの詳細を示しています。
命令セット | クラス | 符号の有無 | データ型 | サイズ | 要素の数 | ヘッダーファイル |
---|---|---|---|---|---|---|
インテル® MIC | F64vec8 | 符号付き | double | 64 | 8 | micvec.h |
F32vec16 | 符号付き | double | 32 | 16 | micvec.h | |
M512 | 不定 | __m512 | 512 | 1 | micvec.h | |
I64vec8 | 不定 | long int | 64 | 8 | micvec.h | |
I32vec16 | 不定 | int | 32 | 16 | micvec.h | |
Is32vec16 | 符号付き | int | 32 | 16 | micvec.h | |
Iu32vec16 | 符号なし | int | 32 | 16 | micvec.h |
ほとんどのクラスは、どのデータ型についても同じような機能を持っていて、利用できるすべての組込み関数で表現されています。ただし一部の機能については、データ型が変わるときにその機能を維持しようとするとパフォーマンスが下がる場合があるため、個々のクラスからは除外しています。
即値をとるためにクラスの中に簡単に表現できない組込み関数は実装していません。