【发布时间】:2013-10-19 17:40:49
【问题描述】:
我必须为 clock_gettime() 函数计时以估计和分析其他操作,而且它是家庭作业,所以我不能使用分析器并且必须编写自己的代码。
我的做法如下:
clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&begin);
for(int i=0;i<=n;i++)
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
cout<<(end.tv_nsec-begin.tv_nsec)/n; //time per clock_gettime()
问题是当n=100时,输出为:370.63 ns,当n=100000时,输出:330 ns,当n=1000000时,输出:260 ns,n=10000000,输出:55 ns,... .不断减少。
我知道这是由于指令缓存而发生的,但我不知道如何在分析中处理这个问题。因为例如当我使用 gettime 估计函数调用的时间时,我怎么知道该 gettime 自己使用了多少时间?
对所有这些值取加权平均值是个好主意吗? (我可以运行我想要的相同次数的操作,取其加权平均值,减去 gettime 的加权平均值并获得对操作的良好估计,而不考虑缓存?)
欢迎提出任何建议。
提前谢谢你。
【问题讨论】:
-
好吧,每当您调用 clock_gettime() 来分析其他内容时,它都不会被缓存(通常?),因此上下文之外的调用可以用于分析其他内容......如果我让自己清除。
-
好点。知道如何在没有任何缓存的情况下禁用指令缓存到时间 get_time 吗?我认为仅使用低 n 的值并不是一个好主意。
标签: c++ linux caching profiling timing