c - 编写低级代码时是否有正确的方法来衡量性能?

标签 c x86-64 performance-testing

我正在为低级 C/x64 代码编写速度优化,我想知道是否有任何标准方法可以可靠地衡量哪种选择更快。

在比较技术 A 和 B 时,我目前的技术涉及重复 A 几百次,而不是重复 B 大约相同的时间,并比较每种方法所花费的平均时间。然后,我在几十个示例中重复这一点,然后比较每种技术的均值均值。 (我对平均分钟做同样的事情)

不幸的是,这种方法似乎存在一些问题。例如,如果我考虑测试第三种技术,但实际上使用 B,则 B 的第二次运行几乎系统地更快(缓存效应?),速度足以击败 A。

还有更适合分析 JIT 代码的技术吗?

最佳答案

这个函数应该可以解决问题。

static unsigned long long rdtsctime() {
    unsigned int eax, edx;
    unsigned long long val;
    __asm__ __volatile__("rdtsc":"=a"(eax), "=d"(edx));
    val = edx;
    val = val << 32;
    val += eax;
    return val;
}

调用一次以获取当前时间,然后再次调用并减去第一个值以获取耗时(以周期为单位)。

关于c - 编写低级代码时是否有正确的方法来衡量性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698809/

相关文章:

assembly - 如何链接我的 nasm 程序来访问 argc?

c - 通过loadrunner处理批处理文件

c - 如何以编程方式禁用不可屏蔽中断?

c++ - 我如何将多维数组作为指针传递给c

c - C 中的 unsigned char 到 char* 和 int?

c - 滚动条没有被隐藏

memory - 刷新写组合缓冲区

scala - 在三引号字符串中使用 gatling session 变量

testing - 想知道如何在 jmeter 或任何其他工具中加载测试以同时测试多个登录的登录页面

calloc/malloc 并读取奇怪的行为?