なんらかの理由で、コンパイラが基本的な最適化能力を発揮することを信頼できず、コンパイラが生成するコードが、マシンの制限に基づいて予想していたよりも低いパフォーマンスで実行される場合 (パフォーマンスを測定していて、それらの制限を知っていますよね?) 、手動で最適化を開始できます。
ループ不変式の計算をループの外に持ち上げます。
int main()
{
float fsum[50],a=10.45;
float aa = a * a;
int isum[100],b=20;
int bb = b * b;
for(int i=0;i<100;i++)
{
if(i<50) {
fsum[i] = aa;
}
isum[i] = bb;
}
return 0;
}
ループを分割し、囲まれた条件に一致するように境界を設定します
int main()
{
float fsum[50],a=10.45;
float aa = a * a;
int isum[100],b=20;
int bb = b * b;
for(int i=0; i < 50; i++)
{
fsum[i] = aa;
}
for(int i=0;i<100;i++)
{
isum[i] = bb;
}
return 0;
}
ここで、コンパイラーが単一レベルの単純なループを 1 つまたは 2 つ展開してベクトル化できない場合は、それが問題です。それらを調べに行きます。