iPhone 4 и iPad 2: преимущества арифметики с фиксированной запятой по сравнению с плавающей запятой - PullRequest
2 голосов
/ 01 апреля 2011

Я слышал, что у iPhone 4 и iPad есть fpu, называемый VFP, который каким-то образом оптимизирует арифметику с плавающей запятой, даже позволяя SIMD (хотя использование GCC в этом сомнительно).Тем не менее, я читал, что для некоторых устройств Android ускорение использования фиксированной точки по сравнению с плавающей запятой может привести к увеличению производительности в 20 раз.

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

Ответы [ 2 ]

7 голосов
/ 01 апреля 2011

Процессор iPhone 3G armv6 имел конвейерный модуль с плавающей запятой VFP, который имел более высокую пропускную способность, чем те же вычисления в целых числах. GCC поддерживает генерацию инструкций VFP, запланированных для конвейерной передачи. Процессор iPhone 3GS и iPhone 4 armv7 не имеет конвейерного модуля VFP и, таким образом, на некоторых последовательностях с плавающей запятой на самом деле немного медленнее, чем iPhone 3G; но процессор armv7 работает быстрее с векторной короткой плавающей запятой, потому что вместо него используется параллельный векторный блок NEON. Некоторые процессоры устройств Android вообще не имеют аппаратного модуля с плавающей запятой, поэтому ОС использует программную эмуляцию для FP, которая может быть более чем на порядок медленнее, чем целое число или число с фиксированной запятой.

Общее эмпирическое правило может заключаться в том, что если ваши алгоритмы могут работать только с 24-битной точностью мантиссы и не выполняют много преобразований между плавающей и целой числами, используйте короткую плавающую точку на iOS. Это почти всегда быстрее.

Но если вы хотите поддерживать старые устройства Android с вашим кодом C (используя NDK), используйте масштабированное целое число.

Если ваше приложение не использует много чисел, для типичного приложения, которое работает менее чем на 0,1%, ничто из перечисленного на самом деле не имеет заметного значения.

1 голос
/ 02 апреля 2011

Как сказал hotpaw2 , у iPhone 4 и iPad 2 есть аппаратная плавающая точка, поэтому вы не увидите ускорения на порядок, который вы получаете на платформах, где такое оборудование отсутствует.

Тем не менее, векторный модуль NEON поддерживает целочисленные операции, а также с плавающей запятой, и можно ускорить определенные операции, приведя их в качестве задач с фиксированной запятой. Однако , если вы действительно не понимаете, что делаете, и не готовы писать реализации своих критических подпрограмм, вы не увидите никаких преимуществ.

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

...