Каковы преимущества armv7 перед armv6 при компиляции приложений для iPhone?
Если есть какие-либо преимущества... не могу найти ничего убедительного в документах.
Видимо armv7 для более новой версии iOS... это быстрее? меньше? Лучше в Х?
6 ответов
Одно из самых больших отличий заключается в том, что архитектура armv6 имеет аппаратную поддержку арифметики с плавающей запятой двойной точности, в то время как armv7 обеспечивает только устаревшую поддержку программного обеспечения для арифметики с плавающей запятой двойной точности.
Чтобы компенсировать это, архитектура armv7 имеет модуль "NEON", который обеспечивает невероятно быструю аппаратную поддержку арифметики с плавающей запятой одинарной точности.
Это то, что вам нужно учитывать, если вы делаете что-то, что связано с арифметикой с плавающей запятой, независимо от того, делаете ли вы это с одинарной или двойной точностью. Если вы делаете это с двойной точностью, но не обязательно нуждаетесь в такой точности, вы, вероятно, сможете значительно повысить производительность на устройствах armv7, используя вместо этого одинарную точность.
Apple рассмотрела множество различий между armv6 и armv7, а также ознакомилась с фреймворком Accelerate на одной из своих сессий WWDC в этом году. Видео по-прежнему должно быть доступно в iTunes (по состоянию на июль 10 года).
Старые устройства iOS (iPhone, iPhone 3G, iPod touch первого и второго поколения) имели процессоры, которые поддерживали только набор инструкций armv6. IPhone 3G S (и iPad, и iPod touch третьего поколения) оснащен более новым процессором, который также поддерживает набор инструкций armv7. В общем, armv7 работает быстрее на этих новых процессорах, и рекомендуется, по крайней мере, включить сборку armv7 в свои приложения в будущем (в приложении только для iPad вы, вероятно, можете просто собрать для armv7).
Как указывает Jasarien, область наибольшего различия между наборами команд находится в операциях с плавающей запятой. На armv6 приложения, как правило, создавались с использованием сокращенного набора команд Thumb для создания меньших двоичных файлов, но производительность Thumb с плавающей точкой была ужасной. Следовательно, вам нужно было отключить Thumb, если вам нужны более быстрые вычисления с плавающей точкой. На armv7 набор инструкций Thumb-2 больше не имеет этого ограничения, поэтому Apple рекомендует компилировать его почти всегда.
Вы можете сделать настройку Thumb build условной, чтобы она была отключена для более старых устройств и включена для более новых. Для этого перейдите в настройки сборки Xcode и выберите опцию "Скомпилировать для большого пальца". Перейдите в меню в левом нижнем углу экрана и выберите опцию "Добавить условие настройки сборки". В новом условии настройки сборки выберите ARMv6 для архитектуры, отключите Thumb для него, добавьте еще одно условие, выберите ARMv7 для его архитектуры и включите Thumb для него.
Согласно ответу Стивена Кэнона, в armv6 аппаратно поддерживаются операции с плавающей запятой одинарной и двойной точности. Я обнаружил, что арифметика одинарной точности работает немного лучше на этой платформе, возможно, из-за большего количества операций, помещающихся в кэш. На armv7 блок с плавающей точкой NEON SIMD работает только для операций с одинарной точностью, поэтому производительность операций с одинарной и двойной точностью может быть огромной.
Другие вопросы, которые могут представлять интерес по этому вопросу, включают в себя:
- "Каковы преимущества / последствия компиляции архитектуры только для armv7?"
- "Как изменение архитектуры armv6/armv7 на armv6 влияет на мое приложение для iPad? Будут ли потери производительности / стабильности?"
- "Модель процессора обнаружения iPhone / поддержка NEON"
- "Быстрый синус / косинус для ARMv7+NEON: ищем тестеров…"
Для меня основными преимуществами ARMv7 являются:
- Большой палец-2
- NEON
NEON должен быть явно закодирован, вы не пользуетесь этим, просто перекомпилируя, но если вы можете потратить время, это может ускорить мультимедийные / игровые операции в 8 раз. Однако thumb-2 в значительной степени бесплатное сокращение размер кода практически без недостатков (в отличие от ARMv6, который делает код с плавающей запятой намного медленнее по сравнению с режимом ARM). Конечно, добавление другой версии вашего исполняемого файла в ARMv7 не уменьшит ваш размер исполняемого файла, но уменьшит ваш код в памяти, кэшах и т. Д.
arm7 более оптимизирован для iPod Touch (3-го поколения) и iPhone 3GS и новее. Вам нужно использовать 'Standard/arm6+arm7' при сборке для старых устройств. На практике я не видел большой разницы в производительности моих приложений.
Вы должны скомпилировать оба приложения, если хотите, чтобы ваше приложение работало на iPad, и все модели iPhone/iPod toch. Старые устройства iOS используют arm6, а новые используют arm7.
Единственная причина не компилировать для одного или другого - это уменьшение размера приложения, так как ему нужна только одна скомпилированная версия кода. Но если у вас не очень большая кодовая база, эта разница в размере файла будет довольно незначительной.
Посмотрите на эту ссылку, она имеет хорошее описание преимуществ, отличий и т. Д.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0001a/CHDEFAGB.html