Двойной против поплавка на iPhone
Я только что слышал, что iphone не может выполнять двойную передачу, тем самым делая их намного медленнее, чем обычное плавание.
Это правда? Доказательства?
Я очень заинтересован в этом вопросе, потому что моя программа нуждается в высокоточных вычислениях, и мне придется идти на компромисс по скорости.
3 ответа
IPhone может выполнять аппаратную арифметику одинарной и двойной точности. На 1176 (оригинальные iPhone и iPhone3G) они работают примерно с одинаковой скоростью, хотя вы можете разместить больше данных с одинарной точностью в кешах. На Cortex-A8 (iPhone3GS, iPhone4 и iPad) арифметика одинарной точности выполняется на устройстве NEON вместо VFP и работает значительно быстрее.
Обязательно отключите режим большого пальца в настройках компиляции для armv6, если вы интенсивно выполняете вычисления с плавающей точкой.
Это слайд-шоу дает представление о том, почему нет хорошей плавающей запятой и почему она есть (векторная единица с плавающей запятой). Очевидно, важно проверить "режим большого пальца", который влияет на то, включена ли поддержка с плавающей запятой. Это не всегда улучшение. Он показывает, как найти правильные инструкции в коде сборки.
Это также зависит от того, на какой версии телефона вы хотите запустить свой код. Самый последний из них кажется "более способным" к математике с плавающей запятой.
РЕДАКТИРОВАТЬ: вот интересное чтение по оптимизации с плавающей запятой на ARM с VFP и NEON SSE.
В руководстве ARM1176JZF-S говорится, что оно поддерживает числа с плавающей запятой двойной точности. Вы должны быть в хорошей форме. Вот ссылка на документацию в формате PDF. Более поздние айфоны - это чипы Cortex, и, конечно, они не должны быть менее способными.