用时钟测量程序的运行时间
Posted
技术标签:
【中文标题】用时钟测量程序的运行时间【英文标题】:Measuring running time of program with clock 【发布时间】:2020-02-17 15:19:21 【问题描述】:我们正在研究各种排序算法的性能,并实现了我们的归并排序版本。我们试图用不同的输入来测量运行时间,但是当我们运行如下所示的 main() 程序时,我们得到了不同的时间结果。
例如,下面的clock()函数输出在大输入时可以显示30秒,但是当我们使用手机使用实际计时器时,主程序大约需要2分钟。
我们在这里缺少什么?我们没有以正确的方式使用clock()函数吗?为什么会有这么大的差异(1.5 分钟)?
谢谢
int n;
cout << "Enter n - lenght of array" << endl;
cin >> n;
vector<int> v(n);
for(int i = 0; i < n; ++i)
v[i] = i;
auto rng = default_random_engine ;
std::shuffle(std::begin(v), std::end(v), rng);
clock_t begin = clock();
sort(v);
cout << "done";
clock_t end = clock();
cout <<"total time : " << (double)(end-begin) / CLOCKS_PER_SEC<<endl;
return 0;
【问题讨论】:
我看不出它会造成 90 秒的差异,但shuffle
需要多长时间?
您是在用手机测量整个程序的执行情况,还是只是排序?由于您只测量排序,因此使用clock
。
除了已经提到的 - 我认为 - 使用 clock()
你测量 CPU 时间,而不是挂钟时间。这意味着您的程序可以运行 2 分钟,但实际上它只使用 cpu 1 分钟左右。还要确保您正在运行优化的构建。
相关:***.com/questions/2808398/easily-measure-elapsed-time
n
在你的测试中有多大?您不会按值将该向量传递给您的排序函数,是吗?
【参考方案1】:
我通过将sort
函数替换为std::sort
来运行您的代码,对于n=5000000
它显示11.744s
然后我在vector v
的声明之前移动了clock_t begin = clock();
行,时间是@987654327 @
看来内存分配,O(N) 初始化和洗牌可能会花费大量时间,如果您为n
选择更大的数字,具体取决于您的@ 效率987654329@ 用于随机输入集的函数,初始化可能比排序花费更多时间。
【讨论】:
以上是关于用时钟测量程序的运行时间的主要内容,如果未能解决你的问题,请参考以下文章