#optimization #assembly #arm #cpu
#оптимизация #сборка #arm #процессор
Вопрос:
Я пишу приложение для Android, которое использует библиотеку SoX. Эта библиотека очень сильно нагружает процессор ARM. Подскажите пожалуйста: где я могу прочитать о том, как оптимизировать библиотеку для ARM. Кто-нибудь может помочь?
Ответ №1:
Я оптимизировал коды в ассемблере довольно долгое время, начиная с MC68000 на Amiga, затем в основном ARM9E (ARMv5E). ARM11 был в порядке с новыми инструкциями и насыщениями, подобными SIMD. Затем появился Coretex.
Знаете что? NEON, который шел в комплекте с серией Coretex-A, лишил меня всей мотивации оптимизировать для ARM.
Неоптимизированные коды NEON из коробки выполняются примерно в 5 раз быстрее, чем коды ARM, оптимизированные для сборки, и это намного проще, чем сам ARM : там, где мне приходилось изо всех сил пытаться заставить все работать, NEON почти всегда имеет инструкции по подгонке, выполняющие точно такие же или даже более точные действия для нескольких элементов одновременно.
Я читал, что время выполнения команд ARM сильно изменилось по сравнению с Coretex в дополнение к возможности двойного выпуска, что означает, что я должен делать многие вещи иначе, чем на ARM9 для максимальной производительности, но, честно говоря, мне больше все равно. NEON — это правильный путь.
прощай, ARM
Не тратьте свое время на ARM — и особенно на встроенные функции NEON. Вместо этого начните изучать NEON.
Отличное введение в NEON : http://bit.ly/8XzPXM
Комментарии:
1. Привет! Спасибо за ваш ответ, но я не совсем понимаю НЕОНОВУЮ оптимизацию. Могу ли я связаться с вами по электронной почте? Если у вас есть свободное время, пожалуйста: ответьте.
2. Проблема в том….. Я не знаю ваш адрес электронной почты. Разве вы не видите мою в моем профиле?
3. О, да. мой адрес электронной почты: wkyborgw@gmail.com
Ответ №2:
Вы не указали свое целевое оборудование. Устройства Android варьируются от недорогих процессоров ARMv5E до новейшей версии Tegra3. Если вы хотите, чтобы ваш код хорошо выполнялся на самых разных устройствах, вам потребуется поддержка ARMv5 (в котором нет NEON). Даже в Tegra2 (в настоящее время самый популярный процессор для планшетов Android) отсутствует поддержка NEON. Вы можете решить эту проблему в Android с помощью «двоичного файла Fat», который содержит как ARMv5, так и ARMv7-код в одном APK. Некоторые общие правила оптимизации кода ARM:
1) Процессоры ARMv5 / ARMv6 имеют крошечные кэши — оптимизируйте свой набор данных, чтобы он помещался в наименьшее пространство, и повторно используйте буферы вместо постоянного выделения / освобождения их, чтобы избежать их удаления из кэша
2) Процессоры ARMv5 / ARMv6 имеют только 4 буфера записи. Это означает, что в жестких циклах запись байтов или коротких строк будет выполняться примерно с половиной скорости записи длинных строк из-за привязки буферов записи.
3) Для циклов обработки данных, привязанных к памяти, выполните предварительную выборку кэша (инструкция PLD). Обычно это может ускорить работу еще на 20-25%. 4) Для кода, который манипулирует битами / байтами, запись в ASM обычно является хорошей идеей, поскольку языки более высокого уровня не очень хорошо справляются с этим типом данных.Л.Б.