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

C++ クラスとインテル® メニー・インテグレーテッド・コア (インテル® MIC) SIMD 演算

このトピックは、インテル® MIC アーキテクチャーにのみ適用されます。

インテル® メニー・インテグレーテッド・コア (インテル® MIC) SIMD 演算用の C++ クラスは、配列 (ベクトルデータ) を並列処理するときに使用するのが基本です。

例として、2 つのベクトル AB の加算を考えてみます。各ベクトルは 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 クラスを使用して複数の要素を加算する SIMD 手法

次の例を見ると、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

ほとんどのクラスは、どのデータ型についても同じような機能を持っていて、利用できるすべての組込み関数で表現されています。ただし一部の機能については、データ型が変わるときにその機能を維持しようとするとパフォーマンスが下がる場合があるため、個々のクラスからは除外しています。

即値をとるためにクラスの中に簡単に表現できない組込み関数は実装していません。

ヘッダーファイルを使用したクラスへのアクセス

必要なクラス・ヘッダー・ファイルは、コンパイラーと一緒にインクルード・ディレクトリーにインストールされます。各クラスを有効にするときは、以下に示すように、プログラムファイルの中で #include 宣言子を使用してください。

 #include <micvec.h>

これらのクラスは、ネイティブコードでも、特定のターゲット専用のオフロードコードでも使用できます。

関連情報


このヘルプトピックについてのフィードバックを送信