Каковы преимущества armv7 по armv6 при компиляции приложений для iPhone?

Если существуют какие-либо преимущества вообще... ничто не мог бы найти окончательным в документах.

По-видимому, armv7 для более новой версии iOS... это быстрее?меньше? Лучше в X?

67
задан Brad Larson 22 October 2011 в 16:46
поделиться

5 ответов

Одно из больших различий заключается в том, что архитектура armv6 имеет аппаратную поддержку арифметики с плавающей точкой двойной точности, в то время как armv7 обеспечивает только унаследованную программную поддержку арифметики с плавающей точкой двойной точности.

Чтобы компенсировать это, архитектура armv7 имеет блок "NEON", который обеспечивает ослепительно быструю аппаратную поддержку арифметики с плавающей запятой одинарной точности.

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

Apple рассказала о различиях между armv6 и armv7 и о введении в фреймворк Accelerate на одной из своих сессий WWDC в этом году. Видео должно быть доступно на iTunes (по состоянию на июль '10).

54
ответ дан 24 November 2019 в 14:34
поделиться

В старых устройствах iOS (iPhone, iPhone 3G, iPod touch первого и второго поколения) были процессоры, которые поддерживали только набор инструкций armv6. IPhone 3G S (а также iPad и iPod touch третьего поколения) оснащен более новым процессором, который также поддерживает набор инструкций armv7. В общем, armv7 работает быстрее на этих новых процессорах, и рекомендуется, по крайней мере, включить сборку armv7 в свои приложения в будущем (в приложении только для iPad вы, вероятно, можете просто собрать сборку для armv7).

Как указывает Ясариен, наибольшая разница между наборами инструкций связана с операциями с плавающей запятой.На armv6 приложения, как правило, создавались с использованием сокращенного набора инструкций Thumb для создания бинарных файлов меньшего размера, но производительность с плавающей запятой Thumb была ужасной. Следовательно, вам нужно было отключить Thumb, если вы хотите более быстрые вычисления с плавающей запятой. В armv7 набор инструкций Thumb-2 больше не имеет этого ограничения, поэтому Apple рекомендует вам компилировать, используя его почти все время.

Вы можете сделать настройку сборки Thumb условной, чтобы она была отключена для старых устройств и включена для новых. Для этого перейдите в настройки сборки Xcode и выберите параметр «Скомпилировать для большого пальца». Перейдите в меню в нижнем левом углу экрана и выберите параметр «Добавить условие настройки сборки». В новом условии настройки сборки выберите ARMv6 для архитектуры, отключите для него Thumb, добавьте еще одно условие, выберите ARMv7 для его архитектуры и включите для него Thumb.

Согласно ответу Стивена Кэнона здесь , в armv6 аппаратно поддерживаются операции с плавающей запятой как одинарной, так и двойной точности. Я обнаружил, что арифметика с одинарной точностью работает немного лучше на этой платформе, возможно, из-за большего количества операций, помещаемых в кеш. В armv7 функция с плавающей запятой NEON SIMD unit работает только с операциями с одинарной точностью, поэтому может быть огромная разница в производительности между операциями с одинарной и двойной точностью.

Другие вопросы, которые могут быть интересны по этой теме, включают:

78
ответ дан 24 November 2019 в 14:34
поделиться

Для меня основными преимуществами ARMv7 являются:

  • thumb-2
  • NEON

NEON должен быть явно запрограммирован, вы не воспользуетесь этим путем простой перекомпиляции, но если вы можете инвестировать время, которое он может ускорить мультимедийные / игровые операции в 8 раз. Однако thumb-2 - это в значительной степени бесплатное уменьшение размера кода без почти никаких недостатков (в отличие от thumb на ARMv6, который делает код с плавающей запятой намного медленнее по сравнению с ARM Режим). Конечно, добавление другой версии вашего исполняемого файла в ARMv7 не уменьшит размер вашего исполняемого файла, но уменьшит ваш код в памяти, кешах и т. Д.

4
ответ дан 24 November 2019 в 14:34
поделиться

Если вы хотите, чтобы приложение работало на iPad и на всех моделях iPhone / iPod, необходимо выполнить компиляцию для обоих. Старые устройства iOS используют arm6, а новые - arm7.

Единственная причина не компилировать то или иное приложение - это уменьшение размера приложения, так как ему нужна только одна скомпилированная версия кода. Но если у вас не очень большая кодовая база, эта разница в размере файла будет довольно незначительной.

3
ответ дан 24 November 2019 в 14:34
поделиться

arm7 более оптимизирован для iPod Touch (3-го поколения) и iPhone 3GS и новее. Вам нужно использовать 'Standard/arm6+arm7' при сборке для более старых устройств. На практике я не заметил большой разницы в производительности в своих приложениях.

3
ответ дан 24 November 2019 в 14:34
поделиться