インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

_Simd キーワードによるループのベクトル化

ベクトル化は、インテル® Cilk™ Plus テクノロジーの主要な機能です。SIMD ベクトル化については、「主な機能」 > 「自動ベクトル化」 > 「ユーザー指示または SIMD ベクトル化」で、simd プラグマについては、「コンパイラー・リファレンス」 > 「プラグマ」で説明されています。

インテル® Cilk™ Plus は古い機能 (非推奨) です。

ここでは、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;
}

ループが確実にベクトル化されるように、次の点を考慮してください。

関連情報