Мы знаем, что операции с плавающей запятой имеют большую задержку и требуют много тактов для выполнения, что может привести к остановке конвейера! Какие существуют методы для оптимизации следующего кода.
int main()
{
float fsum[50],a=10.45;
int isum[100],b=20;
for(int i=0;i<100;i++)
{
if(i<50)
{
fsum[i] = a*a;
}
isum[i] = b*b
}
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<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;
}
Теперь, если компилятор не может развертываться а также векторизовать одноуровневый простой цикл или два, тогда это ваша проблема. Иди ищи их.
Других решений пока нет …