Ответ 1
Из моего опыта в реальном (немодулированном) ARM, если я беру количество циклов для раздела кода, количество циклов будет меняться, это происходит потому, что:
- В середине исполняемого кода могут быть контекстные переключатели.
- Исходное состояние CPU может отличаться при вводе кода. (например, содержание конвейера, предсказание ветвей и т.д.).
- Состояние кэша будет отличаться при входе в раздел кода.
- Внешние факторы, такие как другое аппаратное обеспечение, доступ к внешней памяти.
Из-за всего этого, получение среднего (плюс некоторые другие статистические меры) действительно является единственным практическим подходом для реального оборудования и реальной ОС. В хорошем симуляторе некоторые из этих факторов или потенциально устранены.
На некоторых реальных чипах (или если поддерживается имитатором) может быть полезно ARM Блок мониторинга производительности.
Если вы кодируете Cortex A8 это, это классный онлайн-счетчик циклов, который действительно поможет вам выжать больше производительности из вашего кода.