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

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

4b9b3361

Ответ 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.