要素関数は、データ並列アルゴリズムを表現するための一般的な言語構造です。 通常の C/C++ 関数として記述され、そのアルゴリズムはスカラー構文を使用して 1 つの要素に対する操作を指示します。 1 つの要素に対する操作を行う場合は通常の C/C++ 関数として呼び出され、複数の要素に対する操作の場合はデータ並列コンテキストで呼び出されます。 インテル® Cilk™ Plus では、データ並列コンテキストは配列として提供されます。
要素関数がある場合、インテル® コンパイラーは一度の呼び出しで複数の引数に対して操作が行えるようにそのショートベクトル形式を生成します。 このショート・ベクトル・バージョンは、CPU にあるベクトル用のインテル固有アーキテクチャー (ISA) を活用することで、通常の実装で個別に操作を行った場合と同じぐらい高速に複数の操作を行うことができます。 さらに、データセットが大きい場合、コンパイラーは関数の呼び出し時に要素関数の異なるコピーを異なるワーカーに割り当てて同時に実行します。 その結果、データ並列操作は、マルチコアで利用可能な並列性とベクトル用の ISA で利用可能な並列性の両方を活用して CPU で実行されます。
コンパイラーがショートベクトル関数を生成するようにコード中で指示する必要があります。 次のように、cDEC$ ATTRIBUTES VECTOR[: clauses] 宣言子を使用します。
cDEC$ ATTRIBUTES VECTOR[: clause[, clause]…] :: routine-name
ATTRIBUTES VECTOR 宣言子の節の説明は、「Language Reference」(英語) を参照してください。
既存の C/C++ 構文を使用して関数の中にこのコードを記述します。
通常、要素関数で仮パラメーターとしてスカラー引数が指定されている場合、その呼び出しは配列を提供します。 この配列は、インテル® Cilk™ Plus の配列表記を使用して簡潔に提供することができます。また、_Cilk_for ループから要素関数を呼び出すこともできます。
ATTRIBUTE VECTOR 宣言子の使用例は、「Language Reference」(英語) を参照してください。
制限事項
次の言語構造は要素関数内で許可されていません。
GOTO 文
16 以上の case 文を含む switch 文
class や struct 対する操作 (メンバーの選択を除く)
_Cilk_spawn キーワード
配列表記による並列化
© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。