【问题标题】:QueryPerformanceCounter() Test for Windows Embedded Compact 7Windows Embedded Compact 7 的 QueryPerformanceCounter() 测试
【发布时间】:2013-11-10 23:52:24
【问题描述】:

循环通过 QueryPerformanceCounter() 并保存值:

// Main loop for timer test
for ( int i = 0; i < ITERATIONS; i++ ) // ITERATIONS = 1000
{
    QueryPerformanceCounter(&li);
    time[i] = double(li.QuadPart) / PCFreq; //1,193,182 per second
}
//calculate the difference between each call 
// and save in difference[]
for ( int j = 0; j < (ITERATIONS - 1)  ; j++ )
{
    difference[j] = time[j+1] - time[j];
}

(除以 PCFreq 得出每次通话之间的时间。)

高分辨率计时器/计数器应该正在工作,因为它没有返回默认频率 1000。

每个时间戳之间的平均时间为 11.990884 微秒(一千次时间戳调用)。

这似乎非常缓慢。

这个测试有缺陷吗?

或关于为什么它在 1.1Ghz Celeron 上报告如此缓慢的值的想法?

【问题讨论】:

  • 您为什么不使用 QueryPerformanceFrequency 来验证报告的频率?你到底想在这里验证什么?看起来您只是在计算查询计数器所需的时间,然后进行一些数学运算。
  • @ctacke:我正在使用它(未显示)来获取 PCFreq; //1,193,182 每秒。是的,我对调用 QueryPerformanceCounter 的时间很感兴趣——这样我就可以准确地测量其他事情。 (+1)。
  • @ctacke:12微秒不是很长吗?
  • 我不知道,那是每毫秒超过 80 次迭代。我必须查看该调用的去向,以及它是否必须转入内核,但目的是什么?您是否正在尝试解决实际问题?
  • @ctacke:嗯,我想知道 BSP 是否有问题......高精度时间戳调用速度很慢。我需要一个正确的设置,希望没有我要解决的实际问题,但这看起来很可疑。

标签: c++ c windows performance windows-ce


【解决方案1】:

为了避免 Win 7 Desktop 和 Embedded Compact 7 之间的(潜在)差异,消除第一个循环中的浮点数学可能是值得的。所以,类似:

LARGE_INTEGER counter[ITERATIONS];
// Main loop for timer test
for ( int i = 0; i < ITERATIONS; i++ ) // ITERATIONS = 1000
{
    QueryPerformanceCounter(&counter[i]);
}
time[0] = double(counter[0].QuadPart) / PCFreq; //1,193,182 per second
//calculate the difference between each call 
// and save in difference[]
for ( int j = 0; j < (ITERATIONS - 1)  ; j++ )
{
    time[j+1] = double(counter[j+1].QuadPart) / PCFreq; //1,193,182 per second
    difference[j] = time[j+1] - time[j];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多