如何计算 ANSI C 代码性能?

Posted

技术标签:

【中文标题】如何计算 ANSI C 代码性能?【英文标题】:How to calculate ANSI C code performance? 【发布时间】:2012-04-10 14:49:01 【问题描述】:

我已经用 ANSI C 编写了一个简单的代码,现在想要执行一些测量。

我测量了执行时间(在 Windows 操作系统下使用clock() 函数,在 Linux 操作系统下使用clock_gettime())。

现在我想计算一下,在运行我的这段代码时,我的 CPU 执行了多少 IPS(每秒指令)。 (是的,我知道MIPS是个可怜的参数,但即使这样,我也想计算一下)

也很高兴看到执行例如多少个 CPI(每条指令周期)。添加 3 个元素和我执行的其他操作。 谷歌说如何使用计算器计算 MIPS 的数量,关于我的 CPU(它的时钟速度)的一些知识,简单的数学和一堆其他参数(如 CPI),但没有说明如何获得这些!

我还没有找到任何可以返回执行所需时钟周期数的 C/C++ 函数,例如访问局部变量。 查找 Intel/AMD 的现代 CPU 参考手册也是一个问题,其中包含有关操作码和其他信息的信息。

我已经手动计算,我的 ANSI C 代码需要 37 次操作,但这些是 ANSI C 操作,而不是 CPU 指令。

【问题讨论】:

你看过右边的“相关”列表吗? @phresnel - 其中很多是针对 MIPS 处理器的,因为 OP 提到了我认为他们没有使用的 Windows。 Gzegorz - 你可能想删除 MIPS 标签 这些东西没有在任何地方列出的原因是因为它们是可变的。 “访问局部变量所需的时钟周期数”介于 0.3 纳秒和 15 秒之间,并且在没有警告的情况下更改。 【参考方案1】:

在 Windows 上获得高精度计时的最简单方法是 PerformanceCounter,请参阅 How to use QueryPerformanceCounter? 然后你只需要一些函数来执行你对计时感兴趣的操作。您必须小心缓存等,因此多次运行计算并查看时间分布

【讨论】:

以上是关于如何计算 ANSI C 代码性能?的主要内容,如果未能解决你的问题,请参考以下文章

显示 90 天前的日期形式 CURRENT (ANSI C)

ANSI是什么?

C语言注意点汇总

如何使用 ANSI Escape 代码在控制台上输出彩色文本

C语言如何创建ANSI编码的txt文件

以C语言为例的程序性能优化 --《深入理解计算机系统》第五章读书笔记