インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
ベクトル化は、インテル® Cilk™ Plus テクノロジーの主要な機能です。SIMD ベクトル化については、「主な機能」 > 「自動ベクトル化」 > 「ユーザー指示または SIMD ベクトル化」で、simd プラグマについては、「コンパイラー・リファレンス」 > 「プラグマ」で説明されています。
ここでは、simd プラグマの代わりに使用できる _Simd キーワードについて説明します。simd プラグマと同様に、_Simd キーワードはシリアル for ループをベクトル化します。構文は、次のとおりです。
_Simd [_Safelen(constant-expression)][_Reduction (reduction-identifier : list)]
_Simd キーワードと節は、次の例に示すように、for キーワードの後に指定します。
for _Simd (int i=0; i<10; i++){ // ループ本体 }
_Simd キーワードは、cilk_for と併用できます。最適な併用方法については、cilk_for の説明を参照してください。
simd プラグマと _Simd キーワードの相違点は次のとおりです。
float add_floats(float *a, float *b, int n){ int i=0; int j=0; float sum=0; for _Simd _Reduction(+:sum) (i=0; i<n; i++, j+=2){ a[i] = a[i] + b[j]; sum += a[i]; } return sum; }
ループが確実にベクトル化されるように、次の点を考慮してください。