Я использую процессор Exynos 3110 (1 ГГц одноядерный ARM Cortex-A8, например, используемый в Nexus S) и пытаюсь измерить время выполнения определенных функций. У меня есть Android 4.0.3 работает на Nexus S. Я попробовал метод изИзмерение времени выполнения на ARM Cortex-A8 с использованием счетчика аппаратных средств
[1] How to measure program execution time in ARM Cortex-A8 processor?
Я загрузил модуль ядра, чтобы позволить чтение значений регистров в пользовательском режиме. Я использую следующую программу для проверки счетчика:
static inline unsigned int get_cyclecount (void)
{
unsigned int value;
// Read CCNT Register
asm volatile ("MRC p15, 0, %0, c9, c13, 0\t\n": "=r"(value));
return value;
}
static inline void init_perfcounters (int do_reset, int enable_divider)
{
// in general enable all counters (including cycle counter)
int value = 1;
// peform reset:
if (do_reset)
{
value |= 2; // reset all counters to zero.
value |= 4; // reset cycle counter to zero.
}
if (enable_divider)
value |= 8; // enable "by 64" divider for CCNT.
value |= 16;
// program the performance-counter control-register:
asm volatile ("MCR p15, 0, %0, c9, c12, 0\t\n" :: "r"(value));
// enable all counters:
asm volatile ("MCR p15, 0, %0, c9, c12, 1\t\n" :: "r"(0x8000000f));
// clear overflows:
asm volatile ("MCR p15, 0, %0, c9, c12, 3\t\n" :: "r"(0x8000000f));
}
int main(int argc, char **argv)
{
int i = 0;
unsigned int start = 0;
unsigned int end = 0;
printf("Hello Counter\n");
init_perfcounters(1,0);
for(i=0;i<10;i++)
{
start = get_cyclecount();
sleep(1); // sleep one second
end = get_cyclecount();
printf("%u %u %u\n", start, end, end - start);
}
return 0;
}
В соответствии с [1] счетчик увеличивается с каждым тактовым циклом. Я переключил scaling_governor в пользовательское пространство и установил частоту процессора на 1 ГГц, чтобы убедиться, что тактовая частота не изменяется Android.
Если я запустил программу, выполняются спящие 1 секунду, но значения счетчика находятся в диапазоне ~ 200e6 вместо ожидаемого 1e9. Есть ли что-то конкретное процессорное я здесь отсутствует? Является ли тактовая частота счетчиков отличной от тактовой частоты процессора?
Прохладный .. Код, который вы опубликовали, - это именно то, что я написал два года назад. Просто интересно: Откуда у вас это получилось? –
Привет, Нил, это ваш код, и я процитировал эту тему с того времени ;-) У вас есть идея, почему я получаю коэффициент 5 в значениях таймера? Спасибо – user1207228
Изменяется ли измеренное время, если вы выполняете настоящую работу на секунду вместо сна? –