Double vs float на iPhone
Я только что слышал, что iphone не может делать двойным путем, тем самым делая их намного медленнее, чем обычные float.
Это правда? Доказательства?
Меня очень интересует проблема, потому что моя программа требует высокоточных вычислений, и мне придется идти на компромисс по скорости.
Ответы
Ответ 1
iPhone может выполнять как одно-, так и двойную точность арифметики в оборудовании. На 1176 (оригинальный iPhone и iPhone3G) они работают примерно с одинаковой скоростью, хотя вы можете вставлять больше данных с одной точностью в кэш. На Cortex-A8 (iPhone3GS, iPhone4 и iPad) арифметика с одной точностью выполняется на блоке NEON вместо VFP и значительно быстрее.
Обязательно отключите режим большого пальца в настройках компиляции для armv6, если вы выполняете интенсивные вычисления с плавающей запятой.
Ответ 2
Это слайд-шоу дает представление о том, почему нет хорошей плавающей запятой и почему существует (векторная единица с плавающей запятой). По-видимому, важно проверить "режим большого пальца", который влияет на поддержку поддержки с плавающей запятой. Это не всегда является улучшением. Он показывает, как найти правильные инструкции в коде сборки.
Это также зависит от какой версии телефона вы хотите запустить свой код. Самый последний из них кажется "более способным" при выполнении математики с плавающей запятой.
EDIT: здесь интересно прочитать оптимизацию с плавающей запятой на ARM с VFP и NEON SSE.
Ответ 3
В руководстве ARM1176JZF-S говорится, что он поддерживает числа с плавающей запятой с двойной точностью. Вы должны быть в хорошей форме. Здесь ссылка в документацию PDF. Позже iPhones являются чипами Cortex и, конечно же, не должны быть менее способными.