如何获得一致的执行时间?
how do I get consistent execution times?
我正在准备编码挑战,以最快的速度计算 pi 到第 10000 位数字获胜。在比赛期间,所有计算都将在覆盆子 Pi4 运行ning linux 上进行 运行。
我想知道哪个代码 运行 最快,这样我就可以知道提交哪个函数。
所以我写了一个名为“lol”的小程序来尝试建立一个已知时间的基线。
//lol....lol is an exe which calls usleep()
#include <unistd.h>
using namespace std;
int main(){
usleep(100);
return 0;
}
然后为了测量执行时间,我这样写:
#include <chrono>
#include <stdlib.h>
#include <iostream>
using namespace std::chrono;
using namespace std;
int main(int argc, char **argv){
//returns runtime in nanoseconds
//useage: runtime <program>
//caveates: I put the exe in /home/$USER/bin
//start timing
auto start = high_resolution_clock::now();
//executable being timed:
system(argv[1]);
// After function call
auto stop = high_resolution_clock::now();
auto duration = duration_cast<nanoseconds>(stop - start);
cout << argv[1] << " " << duration.count() << endl;
return 0;
}
我的问题是 运行 时间似乎变化很大。这是因为我在用户空间 运行ning 而我的系统也在做其他事情吗?为什么我没有变得更稳定 运行 次?
$ ./run_time lol
lol 13497886
$ ./run_time lol
lol 11175649
$ ./run_time lol
lol 3340143
./run_time lol
lol 3364727
$ ./run_time lol
lol 3372376
$ ./run_time lol
lol 1981566
$ ./run_time lol
lol 3385961
- 不是执行程序,而是测量单个程序中的功能完成情况:
auto start = high_resolution_clock::now();
//function being timed:
my_func();
// After function call
auto stop = high_resolution_clock::now();
您正在使用 chrono
header。那么为什么 usleep
当你可以使用 sleep_for
时:
https://en.cppreference.com/w/cpp/thread/sleep_for
这场比赛的功劳不在于你micro-optimize如何拯救1ns
。这是关于选择正确的算法来计算圆周率。
我正在准备编码挑战,以最快的速度计算 pi 到第 10000 位数字获胜。在比赛期间,所有计算都将在覆盆子 Pi4 运行ning linux 上进行 运行。 我想知道哪个代码 运行 最快,这样我就可以知道提交哪个函数。
所以我写了一个名为“lol”的小程序来尝试建立一个已知时间的基线。
//lol....lol is an exe which calls usleep()
#include <unistd.h>
using namespace std;
int main(){
usleep(100);
return 0;
}
然后为了测量执行时间,我这样写:
#include <chrono>
#include <stdlib.h>
#include <iostream>
using namespace std::chrono;
using namespace std;
int main(int argc, char **argv){
//returns runtime in nanoseconds
//useage: runtime <program>
//caveates: I put the exe in /home/$USER/bin
//start timing
auto start = high_resolution_clock::now();
//executable being timed:
system(argv[1]);
// After function call
auto stop = high_resolution_clock::now();
auto duration = duration_cast<nanoseconds>(stop - start);
cout << argv[1] << " " << duration.count() << endl;
return 0;
}
我的问题是 运行 时间似乎变化很大。这是因为我在用户空间 运行ning 而我的系统也在做其他事情吗?为什么我没有变得更稳定 运行 次?
$ ./run_time lol
lol 13497886
$ ./run_time lol
lol 11175649
$ ./run_time lol
lol 3340143
./run_time lol
lol 3364727
$ ./run_time lol
lol 3372376
$ ./run_time lol
lol 1981566
$ ./run_time lol
lol 3385961
- 不是执行程序,而是测量单个程序中的功能完成情况:
auto start = high_resolution_clock::now();
//function being timed:
my_func();
// After function call
auto stop = high_resolution_clock::now();
您正在使用 chrono
header。那么为什么 usleep
当你可以使用 sleep_for
时:
https://en.cppreference.com/w/cpp/thread/sleep_for
这场比赛的功劳不在于你micro-optimize如何拯救1ns
。这是关于选择正确的算法来计算圆周率。