В этом примере кода:
#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».
Во время запуска программы бинарный код отображается в памяти, но загружается лениво (по мере необходимости). Следовательно, во время первого вызова программы некоторые циклы ЦП тратятся ядром на (прозрачную) загрузку бинарного кода при попадании на страницы выполнения, которые еще не находятся в ОЗУ. Последующие вызовы занимают меньше времени с тех пор, как они повторно используют кэшированный код, если только основной файл не был изменен или программа не выполнялась в течение длительного времени и ее страницы не были переработаны.
Других решений пока нет …