如何以微秒精度计算操作时间

San*_*aga 6 c c++ windows precision performance

我想在Windows平台上以微秒精度计算函数的性能.

现在Windows本身具有毫秒级的粒度,所以我怎样才能做到这一点.

我尝试了以下示例,但没有得到正确的结果.

LARGE_INTEGER ticksPerSecond = {0};
LARGE_INTEGER tick_1 = {0};
LARGE_INTEGER tick_2 = {0};
double uSec = 1000000;

// Get the frequency
QueryPerformanceFrequency(&ticksPerSecond);

//Calculate per uSec freq
double uFreq = ticksPerSecond.QuadPart/uSec;

// Get counter b4 start of op
QueryPerformanceCounter(&tick_1);

// The ope itself
Sleep(10);

// Get counter after opfinished
QueryPerformanceCounter(&tick_2);

// And now the op time in uSec
double diff = (tick_2.QuadPart/uFreq) - (tick_1.QuadPart/uFreq);
Run Code Online (Sandbox Code Playgroud)

Mat*_*nen 20

循环运行操作一百万次左右,并将结果除以该数字.这样你就可以获得平均执行时间.由于多任务和诸如此类的原因,非常快速操作的一个(或甚至一百个)执行的定时是非常不可靠的.


vic*_*tcu 7

  • 编译它
  • 看一下汇编程序输出
  • 计算函数中每条指令的数量
  • 在目标处理器上应用每条指令的周期
  • 以循环计数结束
  • 乘以你正在运行的时钟速度
  • 应用任意缩放因子来解决缓存未命中和分支误预测问题

(男人,我会这样回答这个答案)