gpt4 book ai didi

c++ - 如何将滴答转换为时钟周期?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:11 24 4
gpt4 key购买 nike

我正在分析 Direct3D9 API 调用。我看了很多文档here描述了这个过程。我有一个关于计算经过的时钟周期的问题。这是我目前的方法:

// measurement vars
LARGE_INTEGER start, stop, freq;

//
// flush command buffer here
//

//
// issue begin query here
//

// start timer
QueryPerformanceCounter(&start);

//
//draw
//

//
// issue end query here and wait on results
//

// stop timer
QueryPerformanceCounter(&stop);

// calc elapsed ticks
stop.QuadPart -= start.QuadPart;

// get frequency
QueryPerformanceFrequency(&freq);

// ticks for easier handling
ULONG ticks = stop.QuadPart;

// calc elapsed clock cycles
cycles = (2.8E9 * ticks) / (double)freq.QuadPart;

我的问题涉及值 2.8E9,它应该代表处理器的速度。这是计算时钟周期的正确方法吗?我正在分析单个 API 调用,我的结果与上述链接中的结果不同。如果我将处理器速度设置为 1E9,那么数字在范围内......我只是想检查我的方法......

最佳答案

引用您给定的来源,您将使用的公式是:

cycles = CPU speed * number of ticks / QPF

事实上,您在示例代码的最后一行正是这样做的,其中“魔数(Magic Number)”2.8E9 是以赫兹为单位的 CPU 速度。因此,如果这是您的问题,答案是是的,您使用的是正确的公式。

如果您想用实际 CPU 速度替换魔数(Magic Number),请做好大量工作的准备。有关这方面的更多信息,请参阅答案 Finding out the CPU clock frequency (per core, per processor)


然而,为了获得可靠的分析结果,最好的方法是使用外部分析工具,因为当您更改代码以测量执行时间时,它实际上可能会对您想要测量的事物产生影响(例如关于优化)。

在 wiki 上查看一些合理的分析工具: http://en.wikipedia.org/wiki/List_of_performance_analysis_tools#C_and_C.2B.2B

除了您对 CPU cicles 的兴趣之外,更好的“侵入式”方法是使用 C++11 标准库中的平台独立机制来测量运行时间: http://en.cppreference.com/w/cpp/chrono/high_resolution_clock/now

关于c++ - 如何将滴答转换为时钟周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29304061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com