Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Более старые устройства 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 build условной, чтобы она была выключена для более старых устройств и включена для более новых. Для этого перейдите к настройкам сборки Xcode и выберите опцию Compile for Thumb. Перейдите в меню в левом нижнем углу экрана и выберите параметр "Добавить настройку настройки". В новом состоянии настройки сборки выберите ARMv6 для архитектуры, отключите Thumb, добавьте другое условие, выберите ARMv7 для своей архитектуры и включите Thumb для него.

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

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

Ответ 3

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

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

Ответ 4

arm7 более оптимизирован для iPod Touch (3rd Gen) и iPhone 3GS и новее. При создании старых устройств вам необходимо использовать "Стандарт/arm6 + arm7". На практике я не видел большой разницы в производительности в моих приложениях.

Ответ 5

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

  • палец-2
  • NEON

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