Если у вас есть какие-то преимущества ... в документах не найдено ничего убедительного.Каковы преимущества armv7 над armv6 при компиляции приложений iPhone?
Видимо, armv7 предназначен для новой версии iOS ... это быстрее? меньше? Лучше на X?
Если у вас есть какие-то преимущества ... в документах не найдено ничего убедительного.Каковы преимущества armv7 над armv6 при компиляции приложений iPhone?
Видимо, armv7 предназначен для новой версии iOS ... это быстрее? меньше? Лучше на X?
Одно из больших отличий заключается в том, что архитектура armv6 имеет аппаратную поддержку для арифметики с плавающей запятой с двойной точностью, в то время как armv7 предоставляет только устаревшую поддержку программного обеспечения для арифметики с плавающей запятой с двойной точностью.
Для компенсации архитектуры armv7 имеется блок «NEON», который обеспечивает ослепительно быструю аппаратную поддержку для арифметики с плавающей точкой с одинарной точностью.
Это то, что вам нужно учесть, если вы делаете что-либо, что связано с арифметикой с плавающей запятой, независимо от того, выполняете ли вы ее в одиночной или двойной точности. Если вы делаете это с двойной точностью, но не обязательно нуждаетесь в такой точности, вы, вероятно, можете добиться значительного повышения производительности на устройствах armv7, используя вместо этого единую точность.
Apple покрыла множество различий между armv6 и armv7 и введение в рамки Accelerate на одной из своих сессий WWDC в этом году. Видео должно быть доступно в iTunes (по состоянию на июль 10).
Фактически, согласно Стивену Канону, операции с плавающей точкой с одинарной и двойной точностью выполняются в аппаратном обеспечении в armv6: http://stackoverflow.com/questions/1622729/double-vs-float-on-the-iphone/ 1622786 # 1622786 –
Это правда. Я пропустил это. – Jasarien
Вы должны скомпилировать оба варианта, если вы хотите, чтобы ваше приложение запускалось на iPad и на всех моделях iPhone/iPod toch. Старые устройства iOS используют arm6, а новые используют arm7.
Единственная причина не компиляции для того или другого не будет уменьшать размер приложения, так как ему нужна только одна скомпилированная версия кода. Но если у вас серьезно серьезная кодовая база, разница в размере этого файла будет довольно незначительной.
Итак, каково значение активной архитектуры в выпадающем меню для построения? –
Я считаю, что они взяли это в последнем SDK. Как бы то ни было, в настройках сборки это было слишком сложно. –
arm7 более оптимизирован для iPod Touch (3rd Gen) и iPhone 3GS и новее. При создании старых устройств вам необходимо использовать «Стандарт/arm6 + arm7». На практике я не видел большой разницы в производительности в своих приложениях.
У более старых устройств 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 с плавающей запятой работает только на операции с одной точностью, поэтому может быть огромная разница в производительности между операциями с однократной и двойной точностью.
Другие вопросы, которые могут представлять интерес по этому вопросу включают:
Начиная с Xcode 4.3, в рамках миграции проекта Apple устанавливает GCC_THUMB_SUPPORT = NO безоговорочно. Есть комментарии? Кажется, что противник интуитивно понятен мне и (конечно, к сожалению), от Apple ничего не говорится об этом. В их документах по-прежнему говорят, что большой палец для armv7. – smparkes
@smparkes - Это может быть сбой в миграции проекта, поскольку набор команд не должен меняться. По-прежнему должно быть выгодно создавать команды Thumb-2 для ARMv7. В худшем случае профилируйте ваше приложение (память и производительность) в обоих условиях, чтобы увидеть, как изменяется настройка. Каждый раз, когда я это пробовал, создание для Thumb помогло на ARMv7. –
Спасибо, Брэд. Я думаю, что оставлю свои текущие переопределения и отклоню Xcode. Теперь, чтобы исправить другой материал, 4,3 сломался ... – smparkes
Для меня главные преимущества ARMv7 являются :
NEON должен быть явно кодируются, вы не воспользоваться этим просто перекомпиляции, но если вы можете инвестировать время, это может ускорить мультимедиа/игры операций в 8 раз. Однако thumb-2 в значительной степени является свободным сокращением размера кода без почти никакого недостатка (в отличие от большого пальца руки на ARMv6, что делает код с плавающей запятой намного медленнее по сравнению с режимом ARM). Конечно, добавление другой версии вашего исполняемого файла в ARMv7 не уменьшит ваш исполняемый размер, но это уменьшит ваш код в памяти, кешах и т. Д.
Посмотрите на эту ссылку, у нее есть хорошее Описание преимуществ, различий и т.д.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0001a/CHDEFAGB.html
Небольшая коррекция: это ARMv6 и ARMv7, не ARM6 и ARM7. Обратите внимание на 'v'. – lucius