Каковы преимущества armv7 перед armv6 при компиляции приложений для iPhone? - PullRequest
67 голосов
/ 22 июля 2010

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

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

Ответы [ 6 ]

78 голосов
/ 22 июля 2010

Старые устройства 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 устройство работает только с операциями одинарной точности, поэтому производительность между операциями одинарной и двойной точности может быть огромной.

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

54 голосов
/ 22 июля 2010

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

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

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

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

4 голосов
/ 23 июля 2010

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

  • thumb-2
  • NEON

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

3 голосов
/ 22 июля 2010

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

3 голосов
/ 22 июля 2010

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

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

1 голос
/ 20 октября 2012

Посмотрите на эту ссылку, она имеет хорошее описание преимуществ, отличий и т. Д.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0001a/CHDEFAGB.html

...