Почему perf -e cpu-cyclops сообщает о разных ответах при нескольких запусках?

В этом примере кода:

#include <iostream>
using namespace std;

int main()
{
cout<<"Hello World!"<<endl;

return 0;
}

Я выполнил следующую команду 3 раза:

perf stat -e cpu-cycles ./sample

Ниже приведены 3 выхода при последовательном выполнении:

1)

Hello World!

Performance counter stats for './try':

22,71,970      cpu-cycles

0.003634105 seconds time elapsed

2)

Hello World!

Performance counter stats for './try':

18,51,044      cpu-cycles

0.001045616 seconds time elapsed

3)

Hello World!

Performance counter stats for './try':

18,21,834      cpu-cycles

0.001153489 seconds time elapsed

Почему одна и та же программа использует разное количество циклов ЦП при нескольких запусках?

Я использую «Intel (R) Core (TM) i5-5250U CPU @ 1.60GHz», «Ubuntu 14.04.3 LTS» и «g ++ 4.8.4».

0

Решение

Во время запуска программы бинарный код отображается в памяти, но загружается лениво (по мере необходимости). Следовательно, во время первого вызова программы некоторые циклы ЦП тратятся ядром на (прозрачную) загрузку бинарного кода при попадании на страницы выполнения, которые еще не находятся в ОЗУ. Последующие вызовы занимают меньше времени с тех пор, как они повторно используют кэшированный код, если только основной файл не был изменен или программа не выполнялась в течение длительного времени и ее страницы не были переработаны.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]