如何通过时钟精度提高代码性能测试?

发表于:2008-10-07 16:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

分享:

  下面的代码从操作系统获得时钟计数器的高位和低位,分别填写__int64数据的两个32 bit部分:

BigInt start_ticks, end_ticks

;

 _asm {

RDTSC mov start_ticks.int32val.i32[0], eax

 mov start_ticks.int32val.i32[4], edx

}

 

  这段代码能够在Visual Studio .NET 2003中顺利运行,在以前的C/C++编译器中也应该没有问题。RDTSC(ReaD Time Stamp Counter)是一个汇编指令,它的功能是把时间戳计数器的内容装入EAX和EDX寄存器。执行上述代码后,start_ticks就包含了完整的时钟计数。再次调用上面的代码,把start_ticks替换成end_ticks,再从end_ticks减去start_ticks,就得到了两次调用期间流逝的时钟周期。

  要输出这个_int64值,可以使用下面的printf()掩码:

printf ( "Function used %I64Ld ticks\n",

end_ticks.int64val.i64 - start_ticks.int64val.i64 );

  Win32函数QueryPerformanceCounter()的功能也大致相似,它唯一的参数是一个指向计数器变量的长指针。如果函数调用失败,它返回0(实际上是FALSE)。然而,上面提供的代码突破了Windows调用的黑箱,即使在非Windows的Intel系统上,也能发挥同样的功能。

    二、使用计时数据

  如果要把时钟计数转换成时间,只要把时钟计数除以CPU的时钟频率就可以了。不过,芯片上标准的GHz数据往往与实际运行的速度不同。如果要测试芯片的实际速度,除了Win32调用QueryPerformanceFrequency(),还有几种非常好的工具软件。这里要推荐两种工具,首先是Intel自己的Processor Frequency ID Utility,可以从http://support.intel.com/support/ processors/tools/FrequencyID/FreqID.htm免费下载,它还能提供有关处理器的许多其他信息。另一个工具提供的信息更多,它就是wCPUID,可以从http://www.h-oda.com/免费下载。

 

32/3<123>
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号