Я работаю над анализатором Навье-Стокса по гидродинамике, который должен работать в режиме реального времени. Следовательно, производительность важна.
Прямо сейчас я смотрю на несколько узких циклов, каждый из которых приходится на значительную долю времени выполнения: единого узкого места нет. Большинство этих циклов выполняют некоторую арифметику с плавающей точкой, но между ними много ветвлений.
Операции с плавающей точкой в основном ограничены сложениями, вычитаниями, умножениями, делениями и сравнениями. Все это делается с помощью 32-битных чисел. Моя целевая платформа - x86, по крайней мере, с инструкциями SSE1. (В выводе ассемблера я убедился, что компилятор действительно генерирует инструкции SSE.)
Большинство значений с плавающей точкой, с которыми я работаю, имеют разумно небольшую верхнюю границу, и точность близких к нулю значений не очень важна. Поэтому мне пришла в голову мысль: может быть, переключение на арифметику с фиксированной точкой может ускорить процесс? Я знаю, что единственный способ быть уверенным - это измерить это, что может занять несколько дней, поэтому я хотел бы заранее знать шансы на успех.
Фиксированная точка была в моде во времена Doom, но я не уверен, где она стоит год назад. Учитывая, сколько кремния в настоящее время используется для работы с плавающей точкой, есть ли шанс, что фиксированная точка арифметика все равно даст мне значительный прирост скорости? У кого-нибудь есть реальный опыт, который может относиться к моей ситуации?