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

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

メッセージ

ループ本体内の例外処理コードを削除することで、行 %d のループをさらに最適化します。

アドバイス

ループ本体内に例外処理コードがあるため、ループの最適化が行われません。例外処理コードを削除するか、別のライブラリーを使用します。

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

#include <boost/numeric/ublas/vector.hpp> 
#include <boost/numeric/ublas/io.hpp>
 
namespace ublas = boost::numeric::ublas;
 
int main () {
  unsigned size = 1000;   
  ublas::vector<double> dest(size), src(size), arg(src);
 
  for (int i = 0; i < size; ++ i) {
    src(i) = i * 1.2;
    arg(i) = i * 2.3;
  }
   
  // ベクトル化するループ
  dest = src + 1.5 * arg;
 
  return 0; 
};

この例では、デフォルトの O2 設定でコンパイラーがこのループをベクトル化できません。例外処理コードを削除するか、別のライブラリーを使用するようにコードを変更します。

確認

ループ本体内の例外処理コードを削除してもオリジナルのプログラムのセマンティクスが変更されないことを確認してください。