Han*_*Goc -2 c++ time benchmarking
我想对for循环进行基准测试.我决定将for循环中的变量增加100并相应地测量时间.
#include <cstdio>
#include <ctime>
#include <time.h>
#include <iostream>
#include <random>
#include <iomanip> // std::setprecision
using namespace std;
double difference(timespec start, timespec end);
int main()
{
timespec time1, time2;
for(int limit = 0; x < 100000; limit+= 100)
{
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
int temp = 0;
for (int i = 0; i< limit; i++)
temp+=temp;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
std::cout << std::fixed;
std::cout << std::setprecision(5);
cout<<x <<" " << difference(time1,time2)<<endl;
}
return 0;
}
double difference(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return (temp.tv_sec + temp.tv_nsec) / 1000000000.00;
}
Run Code Online (Sandbox Code Playgroud)
y轴表示以秒为单位的时间,x轴表示迭代的增加限制.
假设:随着限制的增加,时间应该增加.我们应该有一个严格增加的功能
曲线显示其他方面.为什么0.00001
循环5300
时间和循环时间需要几0.00002
秒钟5400
.正如您在图表中看到的那样,我们有很多时候都有这个东西.
假设:
假设是对现象的解释.既然你在实际观察任何现象之前就已经提出这个问题,那么这不是一个假设.另外,如果你声称它直接与观察结果相矛盾,它就不能作为对它们的解释,因此不是假设.
随着限制的增加,时间应该增加.我们应该有一个严格增加的功能
据我所知,观察结果与此并不矛盾.
通过时钟的有限分辨率可以很容易地解释曲线中的伪影:它显然无法测量小于1e-5的时间差; 小于1e-5的变化将显示为平线或离散的1e-5变化.
归档时间: |
|
查看次数: |
99 次 |
最近记录: |