读书人

测试判断语句花费的时间有关问题小弟

发布时间: 2013-01-11 11:57:35 作者: rapoo

测试判断语句花费的时间问题,我用的是clock()
测试代码如下:
问题已在注释中


此为解除注释if块
[解决办法]
晕,你在release下肯定进行优化了..运行速度上都是最优的,具体怎么优化,应该有相关资料..

//这是我测试的代码。
time_t start,end;
int tmp=0;
start=time(NULL);
for(size_t i=0xffffffff;i!=0;--i)
{
++tmp;
}
end=time(NULL);
cout<<"所消耗时间:"<<difftime(end,start)<<endl;

[解决办法]
release下编译器优化可能会循环展开,少了很多是否退出循环的判断,直接++tmp
[解决办法]
可以trace一下汇编,看一下关键部分的指令执行的时钟周期。
[解决办法]
引用:
引用:可以trace一下汇编,看一下关键部分的指令执行的时钟周期。嗯,看来要弄懂这些只能看汇编了(以后学了再看咯),最后问一下大家,是不是执行每一种(如:cmp,mov等等)汇编命令其耗时都可以认为是一样的?

每个指令执行需要的lantecy是不一样的,
具体的我也记不大清楚,只记得除法 > 乘法 > 加法.
[解决办法]
引用:
引用:可以trace一下汇编,看一下关键部分的指令执行的时钟周期。嗯,看来要弄懂这些只能看汇编了(以后学了再看咯),最后问一下大家,是不是执行每一种(如:cmp,mov等等)汇编命令其耗时都可以认为是一样的?

古老的cpu可以这么看。有了cache以后一切可能有内存存取的指令都不会有固定的耗时了。万一cache miss要从内存里取你就要等上上百个cycle。
即使是纯寄存器计算,cpu流水线、OoO execution和superscalar都会导致1条汇编用x个cycle,10条同样的汇编不一定是10x个cycle。
[解决办法]
引用:
引用:使用电脑计时有时误差会很大,因为待测程序段的运行会影响电脑时钟。
将待测程序段循环足够多次,手动掐秒表计时可能更准确。呃,我已经是最大的次数了,但也才10多秒,而且两次相差不到200毫秒,用表的话我怕掐不准

你不会用两重循环或多重循环吗?

读书人网 >C++

热点推荐