インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーにのみ適用されます。
ほとんどの組込み関数は、インテル® イニシャル・メニー・コア命令 (インテル® IMCI) に直接マップします。インテル® IMCI は、既存のインテル® ストリーミング SIMD 拡張命令 (インテル® SSE) のインテル® 64 アーキテクチャー用ベクトル命令の拡張です。
組込み関数固有の機能 (および対応する命令) を次に示します。
組込み関数/命令は、標準のインテル® 64 命令と同じメモリーアドレス空間を使用します。
組込み関数/命令は、インテル® SSE のベクトル命令を最適に処理するため、最大 512 ビット長のパックドデータに対応可能な特殊なレジスターを使用します。
ネイティブデータ型は、1 つのレジスターに最大で 32 ビット (float/整数) のデータの 16 個の要素をパックすることができます。
それぞれの計算命令とデータ操作命令について、その命令を直接実装する 2 つ の C 組込み関数が用意されています。
ベクトルマスクをサポートしており、8 つのベクトル・マスク・レジスターは、ベクトル命令の 16 個の要素に対して条件付き実行が可能で、結果はオリジナルのデスティネーションにマージされます。
ほとんどの関数は、3 つのオペランドからなります。2 つのソースとデスティネーション、または 3 つのソース (そのうち 1 つはデスティネーションでもある) があります。
関数/命令は、ベクトル (v) と呼ばれる特殊なレジスターを使用して処理します。ベクトルは、一連のパックドデータ要素として定義されます。組込み関数/命令は、少なくとも 1 つのベクトルを使用します。
512 ビットの 32 個のベクトル (v0 ~ v31) があり、32 ビットの 16 個の要素または 64 ビットの 8 個の要素をパックします。
SIMD 処理機能に加えて、vgather/vscatter などの特殊な命令により不規則なパターンのメモリーデータの操作をサポートし、複雑なデータ構造を使用するアルゴリズムをベクトル化できるようにします。