Я пытаюсь оптимизировать критические части кода C для обработки изображений на устройствах ARM и недавно обнаружил NEON.
Читая советы здесь и там, я получаю довольно хорошие результаты, но есть кое-что, что ускользает от меня. Я вижу, что общая производительность очень сильно зависит от доступов к памяти и от того, как они выполняются.
Какой самый простой способ (под простым я подразумеваю, если это возможно, не запускать весь скомпилированный код в эмуляторе или симуляторе, а что-то, что можно скармливать небольшим фрагментам сборки и анализировать их), чтобы получить представление того, как доступ к памяти является «узким местом» подпрограммы?
Я знаю, что это невозможно сделать точно, не запуская его на определенном оборудовании и в определенных условиях, но цель состоит в том, чтобы иметь инструмент проб и ошибок для «сравнения», с которым можно экспериментировать, даже если результаты являются только приблизительными.
(что-то похожее на этот отличный инструмент для подсчета циклов)
PLD
это обычный способ сделать это. См. раздел преобразование цвета Cortex-A8 Neon и т. д. Большинство В документах ARM говорится, чтоPLD
похож на фальшивый доступ к памяти, который не ожидает завершения. Он просто заполнит строки L1 и L2 для этого адреса в фоновом режиме, пока ЦП делает другие вещи. Эти размеры линий могут быть разными в зависимости от конкретного чипа. Есть способы узнать это динамически, но большинство людей жестко кодируют это для конкретной системы, чтобы упростить ассемблер. - person artless noise   schedule 12.02.2014PLD
вместоNOP
, например ARM926. Так что для негоPLD
- это просто загрязнение инструкций. Ссылка ARM наmemcpy()
для cortex-A8, который ограничиваетPLD
размером L2. Я думаю, что промах L1 не так уж и дорог. Обратите внимание, что они выполняют предварительную выборку заблаговременно. Ваш алгоритм будет привязан либо к процессору, либо к памяти. Зная пропускную способность памяти, вы можете сказать, какой из них. Знание тайминга кода нулевого цикла может привести к ограничению ЦП. Зная оба, вы должны знать, с какой стороны работать. - person artless noise   schedule 12.02.2014