一个简单的问题:
哪个是 QueryPerformanceFrequency 单位?Hz(每秒滴答声)?
非常感谢,布鲁诺
问:QueryPerformanceFrequency 的单位?
A:千赫兹(不是赫兹)
=========== 详情 ======================================= ========
我的研究表明 Counters 和 Freq 都以 KILO、KILO-clock-ticks 和 KILO-HERTZ 为单位!
计数器记录 KILO-Clicks (KLICKS),频率要么以 kHz 为单位,要么我被严重的 UnderClocked。当您将 Clock_Ticks 除以 Clock_Frequency 时,k clicks/(k clicks*sec^-1),除秒外,一切都消失了。
这是一个仅包含基本要素的示例 C 程序:
#include "stdio.h"
#include <windows.h> // Needed for LARGE_INTEGER
// gcc cpu.freq.test.c -o cft.exe
// cft.exe -> Sleep d_KLICKS=3417790, d_time=0.999182880 sec, CPU_Freq=3420585 KILO-Hz
void main(int argc, char *argv[]) {
// Clock KILO-ticks start, end, CPU_Freq in kHz. KILOs cancel
LARGE_INTEGER sklick, eklick, cpu_khz;
double delta_time; // Expected time in SECONDS. All units above are k.
QueryPerformanceFrequency(&cpu_khz); // Gets clock KILO-tics, Klicks/sec
QueryPerformanceCounter(&sklick); // Capture cpu Start Klicks
Sleep(1000); // Sleep 1000 MILLI-seconds
QueryPerformanceCounter(&eklick); // Capture cpu End Klicks
delta_time = (eklick.QuadPart-sklick.QuadPart) / (double)cpu_khz.QuadPart;
printf("Sleep d_KLICKS=%lld, d_time=%4.9lf sec, CPU_Freq=%lld KILO-Hz\n",
eklick.QuadPart-sklick.QuadPart, delta_time, cpu_khz.QuadPart);
}
它实际上编译!跑步...
Sleep d_KLICKS=3418803, d_time=0.999479036 sec, CPU_Freq=3420585 KILO-Hz
CPU 频率读取 3420585 或 3.420585E6 或 3.4 M-Hertz?<- 超级伤害!哎哟!
实际 CPU 频率为 3.4 Mega-Kilo-Hz 或 3.4 GHz
微软似乎很困惑(有些事情永远不会改变): https ://msdn.microsoft.com/en-us/library/windows/desktop/dn553408%28v=vs.85%29.aspx
QueryPerformanceFrequency(&Frequency);
QueryPerformanceCounter(&StartingTime);
// Activity to be timed
QueryPerformanceCounter(&EndingTime);
ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart;
// We now have the elapsed number of ticks, along with the
// number of ticks-per-second.
1 秒内“经过的滴答声”的数量是百万,而不是十亿,所以它们不是 UNIT-CPU-CLOCK-TICKS 而是 KILO-CPU-CLOCK-TICKS
FREQ 的同样偏离 3 个数量级的误差:340 万不是“每秒滴答声”,而是每秒千个滴答声。
只要您将一个除以另一个,吗?点击会在几秒钟内取消并产生结果。如果有人愚蠢到在他们的文档中使用 ms 并尝试在其他计算中使用他们的“每秒滴答数”,那么您最终会以 1000 或 ~1 标准_ms_error 的因子结束!
也许我们应该叫海因里希来检查他的单位?哎呀!153 年太晚了。:(