Оптимизировать библиотеку для ARM - PullRequest
1 голос
/ 06 ноября 2011

Я пишу приложение для Android, в котором используется библиотека SoX.Эта библиотека ARM очень сильно загружает процессор.Подскажите пожалуйста: где я могу прочитать о том, как оптимизировать библиотеку для ARM.Может кто-нибудь помочь?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Я довольно долго оптимизировал коды в сборке, начиная с MC68000 на Amiga, затем в основном ARM9E (ARMv5E).ARM11 был в порядке с новыми SIMD, как инструкции и насыщенности.Затем появился Coretex.

Знаете что?NEON, поставляемый в комплекте с серией Coretex-A, забрал у меня всю мотивацию оптимизации для ARM.

Неоптимизированные коды NEON из коробки работают примерно в 5 раз быстрее, чем оптимизированные для сборки коды ARM, и это намного проще, чем ARMсам по себе: там, где мне приходилось изо всех сил пытаться заставить вещи работать, в NEON почти всегда есть подходящие инструкции, выполняющие одинаково или даже более точно для нескольких элементов одновременно.

Я читал, что время выполнения инструкций ARM сильно изменилось по сравнению с Coretexв дополнение к возможности двойного выпуска, что означает, что для достижения максимальной производительности мне приходится делать много разных вещей, чем на ARM9, но, честно говоря, мне уже все равно.NEON - это путь.

пока ARM

Не тратьте свое время на ARM и особенно на NEON.Вместо этого начните изучать НЕОН.

Отличное введение в НЕОН: http://bit.ly/8XzPXM

1 голос
/ 13 ноября 2011

Вы не указали свое целевое оборудование.Устройства Android варьируются от младших процессоров ARMv5E до новейших Tegra3.Если вы хотите, чтобы ваш код хорошо работал на самых разных устройствах, вам нужно будет поддерживать ARMv5 (в котором нет NEON).Даже в Tegra2 (в настоящее время самый популярный процессор для планшетов на Android) отсутствует поддержка NEON.Вы можете решить эту проблему в Android с помощью «толстого бинарного файла», который содержит код ARMv5 и ARMv7 в одном APK.Некоторые общие правила оптимизации кода ARM:

1) Процессоры ARMv5 / ARMv6 имеют крошечные кэши - оптимизируйте ваш набор данных, чтобы он помещался в наименьшем пространстве, и повторно используйте буферы вместо того, чтобы постоянно выделять / освобождать их, чтобы избежать их выселенияиз кэша

2) Процессоры ARMv5 / ARMv6 имеют только 4 буфера записи.Это означает, что в тесных циклах запись байтов или шорт будет выполняться примерно на половине скорости записи длинных из-за связывания буферов записи. 3) Для связанных с памятью циклов обработки данных предварительно извлекайте кэш (инструкция PLD).Как правило, это может ускорить процесс еще на 20-25%. 4) Для кода, который манипулирует битами / байтами, написание в ASM обычно является хорошей идеей, поскольку языки более высокого уровня не справляются с работой такого типа.данные.

LB

...