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

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

ループの繰り返しの間に変化しない単純な条件は、ループ不変といわれます。これらは、コンパイラによってループの前に移動され、ループの繰り返し時に実行する必要がなくなります。より複雑な条件オペレーションは、ベクタモードですべてのパスを計算し、結果をマージしてベクトル化されます。条件付きの実行で大量の計算が行われる場合は、かなりの時間が浪費されます。

Example 15 に、許容される条件付きステートメントの使用方法を示します。

Example 15.  ベクトル化可能な条件

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;
};

Show/hide関連項目

Copyright © 2010 ARM. All rights reserved.ARM DUI 0472BJ
Non-ConfidentialID011811