Android ARMv6/v7 и VFP/NEON
Я хотел бы больше понять процессор, используемый на телефонах Android. Причина в том, что мы создаем библиотеку C, у которой есть определенные флаги архитектуры процессора/математического процессора, которые мы можем установить.
-
До сих пор мы обнаружили, что все процессоры Android-устройств являются ARM-дизайном и являются либо ARMv6 (более старые устройства, нижние концы, Huawei, ZTE, маленький SE) или ARMv7 (сотовые планшеты и все более дорогие устройства, почти все с разрешением WVGA и выше) Я проверил ~ 20 устройств и все имеют процессор такого типа. Это верно? Есть ли другие?
-
Теперь, когда дело доходит до мультимедийных и математических операций, я думаю, что важны два блока - VFP для арифметики с плавающей запятой и SIMD - NEON. После тестирования вышеупомянутой группы устройств я обнаружил, что поддержка VFP находится практически во всех устройствах, в то время как NEON нет. Любые комментарии к этому?
-
Я не знаю, что такое различие ARMv6 и ARMv7 (помимо скорости вообще). Теперь мы создаем мультимедийную библиотеку C, в которой есть пара флагов для строительства. Мой вопрос заключается в том, как настроить максимальное количество устройств на одной стороне и как разрешить пользователям лучших устройств использовать свое оборудование. Мое предложение состоит в том, чтобы подготовить 3 отдельных сборки: ARMv6/VFP, ARMv7/VFP и ARMv7/VFP/NEON. Другие предложения?
- ARMv6/VFP Я думаю, что он должен работать на всех конфигурациях, кроме устройств, которым не хватает VFP (например, старый HTC Wildfire), но они останутся неподдерживаемыми.
Это хороший подход? Любые комментарии приветствуются.
С уважением,
STeN
Ответы
Ответ 1
-
Это правильно. В настоящее время существует два типа: ARMv6 и ARMv7. Скорее всего, в ближайшем будущем будет дополнительно цель x86. Новый NDK уже поддерживает сборки для него.
-
VFP является обязательным на ARMv7, но не на ARMv6. NEON не является обязательным, и не все устройства поддерживают его. Наиболее ярким примером является Nvidia Tegra 2. Он развертывается на большинстве высокопроизводительных планшетов и телефонов, но не поддерживает NEON. Nvidia Tegra 3 поддерживает NEON.
-
Я думаю, что вы должны придерживаться ARMv6 с эмуляцией с плавающей запятой, ARMv7 + VFP, ARMv7 + NEON.
-
Точно - VFP не поддерживается на всех устройствах ARMv6. Так что просто не используйте его там. По умолчанию NDK создает цель armeabi, предназначенную для устройств ARMv6, и не использует VFP. armeabi-v7a строит для ARMv7 и использует VFP.
Ответ 2
Я бы сосредоточился на v7.
Есть практически никаких новых продуктов, поставляемых с v6, и к тому времени, когда ваша библиотека будет готова к производству, v6 не будет выпускаться.
вот некоторая информация:
- Neon ВСЕГДА включает VFP
- Coretex A8 может содержать либо Neon, либо none
- VFP на A8 Neon - фактически VFP-lite, который довольно много медленнее. Гораздо медленнее VFP VFP.
- Coretex A9 и выше могут содержать Neon, VFP или none.
- У V7 есть много улучшенных инструкций, хорошо подходящих для математических операций, помимо возможности двойного выпуска.
- Поставщики чипов могут опускать Neon и даже VFP, но они платят за лицензию ARM независимо от нее. Они только сэкономили бы очень мало на производственных издержках.
- Неон чрезвычайно силен в умелых руках, но не может делать двойной точности.
- За исключением тех, у кого есть неоновая Tegra, мне не известен Android-телефон на основе v7, который не оснащен Neon. (Причина выше)
- Tegra3 имеет Neon
Ответ 3
Правда, большинство Android-устройств относятся к трем категориям:
1) ARMv6
2) ARMv7
3) ARMv7 + NEON
NDK не поддерживает это полностью. Нет цели ARMv6 ABI build. Есть только две цели сборки ARM, поддерживаемые NDK:
1) ARMv5 (который будет работать на всех устройствах Android ARM)
2) ARMv7 (с опциональным использованием VFP и NEON)
Ограничения, налагаемые этим, заключаются в том, что если вы хотите использовать инструкции ARMv6 (из кода C или ASM), вам необходимо настроить ARMv7 ABI в NDK.