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