我正在测量要执行的一段C代码的循环计数。代码在每隔10ms从Windows API使用_beginthreadex()生成的额外线程中执行。使用QueryThreadCycleTimes()进行循环测量,以避免计算中断或其他内容的滴答。
当我在我的机器上单独执行此代码时,循环计数在550 000到1 800 000之间变化,每次调用几次(5-10)后。
经过一些研究后我发现,在关闭Intel SpeedStep的情况下,循环计数中位数为580 000,偏差约为10 000个刻度。可以接受的! 所以现在我的问题是,SpeedStep如何影响执行所需的周期数。正如我所想,它只是通过降低功率消耗来降低处理器的频率,这不应该影响循环计数,但是达到这个循环计数所需的时间是多少?也许有人知道是否对其他重要的硬件部件或CPU Cache有影响?
提前谢谢你。问候 的Sascha
系统属性:
Intel Xeon E5 - 1620处理器
Visual Studio 2013
答案 0 :(得分:2)
QueryThreadCycleTime函数manual page声明:
此功能使用CPU提供的定时服务,实现方式可能不同。例如,某些CPU会在更改CPU运行的频率时改变定时器的频率,而其他CPU则会以固定的速率离开。 CPU供应商提供的文档中描述了每个CPU的行为。
我试图找到有关英特尔至强处理器如何工作的信息,但我的搜索业力并不适合我。