gpt4 book ai didi

c - 如何计算程序(或函数调用)中两点之间执行的 x86-64 指令数?

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:24 25 4
gpt4 key购买 nike

我已经通过各种微优化实现了一些算法。我需要计算一个调用或两个位置之间(调用前和调用后)执行的指令数。

算法使用很少的循环和条件跳转,并且它是数据敏感的。所以我不能只使用计算出的每个循环迭代的指令数,然后将它乘以迭代次数。

免责声明:我知道执行指令的数量并没有多大关系,因为相同指令的性能会因不同的 CPU 而异,但这仅用于演示目的。

最佳答案

在 x86(32 位和 64 位)上,您可能正在寻找 RDTSC 指令。鉴于现代 CPU 的复杂程度,任何形式的模拟或静态分析肯定都不是。

你的编译器可能有也可能没有它的内在函数,如果没有,做这样的事情:(内联 asm 的 GCC 语法,)

uint64_t GetTSC(void)
{
uint64_t h, l;

h = l = 0;
__asm__("rdtsc" : "=a"(l), "=d"(h));
h <<= 32;
h |= l;

return h;

}

根据 https://en.wikipedia.org/wiki/Time_Stamp_Counter 中描述的注意事项

关于c - 如何计算程序(或函数调用)中两点之间执行的 x86-64 指令数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33802288/

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