Как оптимизировать и повысить эффективность в этом конкретном коде, включающем операции с плавающей запятой?

Мы знаем, что операции с плавающей запятой имеют большую задержку и требуют много тактов для выполнения, что может привести к остановке конвейера! Какие существуют методы для оптимизации следующего кода.

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

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

Теперь, если компилятор не может развертываться а также векторизовать одноуровневый простой цикл или два, тогда это ваша проблема. Иди ищи их.

1

Другие решения

Других решений пока нет …