如果,无论出于何种原因,您的编译器不能被信任表现出基本的优化能力,并且它生成的代码运行的性能低于您基于机器限制的预期(您正在测量性能,并且您知道这些限制,对吗?) ,然后您可以开始手动优化:
提升循环外的循环不变计算:
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;
}
现在,如果编译器无法展开和矢量化一个或两个单级简单循环,那么这些就是你的问题。去看看他们。