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

GAP メッセージ (診断 ID 30533)

メッセージ

%s オプションでコンパイルして、行 %d のループをベクトル化/並列化します。

アドバイス

指定されたファイルのコンパイル時に [Q]opt-subscript-in-range オプションを使用します。

このオプションは、コンパイラーが指定された行のループをベクトル化/並列化するのを助けます。 ファイル中のループで大きな整数が使用されていないこと、および中間演算で大きな整数が生成されないことを確認する必要があります。 大きな整数は n ビットのマシンでは通常 2n-2 以上の整数のことです。 例えば、32 ビットのマシンでは 230 以上が大きな整数となります。

次の例について考えてみます。

int f(int* A, int upper1, int upper2){
  long extra = 100.0;
  int return_val = 0;
  int val;
  for(int j=0; j < upper1; j++){
    for(int i = 0; i < upper2; i++){
      val = A[i*extra];
      return_val += val;
    }
  }
  return return_val; 
}

このループを安全にベクトル化/並列化できることが分かっている場合は、[Q]opt-subscript-in-range オプションを使用してこの例をコンパイルすると、最内ループがベクトル化されます。

確認

プログラム中のすべてのループで大きな整数 (通常は 230 以上の整数) が使用されたり生成されていないことを確認してください。