3.23 条件付きステートメントと効率的なベクトル化

ベクトル化を効率的に行うには、ループを主に代入式で構成し、 if ステートメントおよび switch ステートメントの使用を制限する必要があります。

ループ不変条件は、ループの繰り返しの間に変化しない単純な条件です。ループ不変条件がループを繰り返す度ではなく 1 回実行されるように、コンパイラはこれらの条件をループの前に移動できます。
コンパイラは、ベクタモードですべてのパスを計算し、結果をマージすることで、より複雑な条件演算をベクトル化できます。条件計算が大量にある場合、パフォーマンスが低下する可能性があります。
以下のサンプルでは、ベクトル化として許容される方法で条件付きステートメントを使用しています。
float a[99], b[99], c[99];
int i, n;
...
for (i = 0; i < n; i++)
{
    if (c[i] > 0) a[i] = b[i] - 5.0f;
    else a[i] = b[i] * 2.0;
};
関連する概念
3.17 条件付き終了の非ベクトル化
関連する参考文書
8.192 --vectorize、--no_vectorize
3.11 ベクトル化のために推奨されるループ構造
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.