Написание частей приложения Android в сборке

Я использую Marmalde и C / C ++, чтобы написать игру для Android. Теперь я хочу написать некоторые важные части на ассемблере, чтобы улучшить производительность. Но мне интересно, может ли это приложение работать на большинстве устройств Android? (около 90%). Поскольку в целом код ассемблера зависит от процессора, а разные телефоны Android могут иметь разные процессоры, например Intel или ARM, мне пришлось бы писать эти части на разных языках ассемблера для каждого процессора! ?


person Michael    schedule 04.05.2016    source источник
comment
В большинстве случаев люди не могут написать лучший asm, чем компилятор / оптимизатор. В общем, вам следует просто держаться подальше от написания asm самостоятельно. Скорее всего, вы создадите худший код и создадите больше проблем, чем если бы вы просто предоставили это инструментам. (Предупреждение: Эго могут мешать).   -  person Jesper Juhl    schedule 04.05.2016
comment
Неудачная попытка. Лучше компилятора ASM не напишешь.   -  person SergeyA    schedule 04.05.2016
comment
Наверное ошиблись. Вы можете превзойти компилятор для очень специфических фрагментов кода (на ум приходят микширование звука и фильтры), но в целом это того не стоит.   -  person Russ Schultz    schedule 05.05.2016
comment
Спасибо, но на самом деле это был не мой вопрос. Я хочу знать, придется ли мне снова писать код сборки для каждого процессора (Intel, ARM ...)?   -  person Michael    schedule 05.05.2016
comment
Да, это ответ. Ассемблер отображает (очень-очень-очень) очень близко к набору инструкций, а наборы инструкций ARM и x86 сильно различаются. Хотя это может быть интересной идеей иметь упрощенную сборку, которая отображается на разные ISA, это не похоже на то, что это действительно будет полезно, потому что в этот момент все, что вы делаете, - это дрянной язык, а не приближается к металл, чтобы вы могли делать вещи, которые нельзя хорошо выразить на языке высокого уровня с доступными инструкциями.   -  person Russ Schultz    schedule 05.05.2016


Ответы (1)


Да, конечно, вам придется написать ассемблерный код для каждого процессора ABI.

Android NDK имеет специальную поддержку для различных ABI.

Имейте в виду, что, хотя в настоящее время поддерживаются только три семейства процессоров (Intel x86 / 64, ARM и MIPS), вы должны ориентироваться на все различные ABI, а не на сами семейства процессоров.

Вы можете безопасно отказаться от устройств MIPS, они очень редки.
Устройства Intel в основном представляют собой планшеты, но есть и телефоны.
Подавляющее большинство существующих устройств - это ARM.

Если вы посмотрите официальное руководство по оптимизации от ARM v8 или в очень полезном руководстве по оптимизации для Intel вы можете увидеть, что на самом деле потребуется какое-то время, чтобы написать хороший ассемблерный код.

Подсказка
Сначала напишите критические части на C ++, затем посмотрите на разборку и посмотрите, сможете ли вы добиться большего успеха или сможете ли вы распознать некоторые неоптимальные шаблоны.
Только после этого перепишите код в сборке.

Также, прежде чем делать такие микрооптимизации, попробуйте использовать более совершенные структуры данных, лучшие алгоритмы и лучшую обработку ресурсов.

person Margaret Bloom    schedule 05.05.2016
comment
Последнее утверждение абсолютно верно и подводит итог! - person t0mm13b; 05.05.2016