インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
ループ本体内の例外処理コードを削除することで、行 %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;
}
// Loop to be vectorized
dest = src + 1.5 * arg;
return 0;
};
この例では、デフォルトの O2 設定でコンパイラーがこのループをベクトル化できません。 例外処理コードを削除するか、別のライブラリーを使用するようにコードを変更します。
ループ本体内の例外処理コードを削除してもオリジナルのプログラムのセマンティクスが変更されないことを確認してください。