2010-07-22 1 views
67

Если у вас есть какие-то преимущества ... в документах не найдено ничего убедительного.Каковы преимущества armv7 над armv6 при компиляции приложений iPhone?

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

+2

Небольшая коррекция: это ARMv6 и ARMv7, не ARM6 и ARM7. Обратите внимание на 'v'. – lucius

ответ

54

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

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

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

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

+5

Фактически, согласно Стивену Канону, операции с плавающей точкой с одинарной и двойной точностью выполняются в аппаратном обеспечении в armv6: http://stackoverflow.com/questions/1622729/double-vs-float-on-the-iphone/ 1622786 # 1622786 –

+0

Это правда. Я пропустил это. – Jasarien

3

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

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

+0

Итак, каково значение активной архитектуры в выпадающем меню для построения? –

+0

Я считаю, что они взяли это в последнем SDK. Как бы то ни было, в настройках сборки это было слишком сложно. –

3

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

79

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

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

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

+0

Начиная с Xcode 4.3, в рамках миграции проекта Apple устанавливает GCC_THUMB_SUPPORT = NO безоговорочно. Есть комментарии? Кажется, что противник интуитивно понятен мне и (конечно, к сожалению), от Apple ничего не говорится об этом. В их документах по-прежнему говорят, что большой палец для armv7. – smparkes

+0

@smparkes - Это может быть сбой в миграции проекта, поскольку набор команд не должен меняться. По-прежнему должно быть выгодно создавать команды Thumb-2 для ARMv7. В худшем случае профилируйте ваше приложение (память и производительность) в обоих условиях, чтобы увидеть, как изменяется настройка. Каждый раз, когда я это пробовал, создание для Thumb помогло на ARMv7. –

+0

Спасибо, Брэд. Я думаю, что оставлю свои текущие переопределения и отклоню Xcode. Теперь, чтобы исправить другой материал, 4,3 сломался ... – smparkes

4

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

  • пальца 2
  • NEON

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

Смежные вопросы