代码之家  ›  专栏  ›  技术社区  ›  sh code

(x64)在哪里可以找到当代程序中的CPU指令使用统计信息?

  •  0
  • sh code  · 技术社区  · 4 年前

    我正在寻找一些统计数据,这些数据可以告诉我/显示x64指令集的每条指令在现代程序中的总体使用频率。我在谷歌上做了一些搜索,但除了“指令性能统计”,我找不到任何其他短语,所以我想问,这里是否有人知道我想找的东西。

    我正试图找到这样的信息,因为我正在使用我自己的64位CPU(作为一项有趣的练习,没有其他野心,所以不要担心),除了我知道是必要的明显的基本指令之外,我知道x64处理器有大量来自。。。说对我来说,这是一种彻头彻尾的怪异操作。因此,我想知道哪些程序在实际程序中使用的频率,这样我就可以根据现有编译代码中使用次数最多/出现次数最多的程序,即使它们在我看来很奇怪,但实际上是有用的假设,优先考虑要了解更多的程序,并可能添加到我自己的CPU中。

    如果不存在这种类型的东西,你能不能至少给我指一种我自己可以使用的反汇编程序/分析器,把它指向一个程序.dll,它就能向我显示它的指令使用统计数据?

    0 回复  |  直到 4 年前
        1
  •  0
  •   jb_dk    3 年前

    收集此类信息的一种方法是选择相关的示例程序,然后使用选项对其进行编译,以获得带有字节和助记符的程序集列表。与反汇编尝试不同,这不会因为从错误的起始地址反汇编字节序列而产生无效结果。

    根据这样的代码(除非进行完整的程序优化,否则不需要链接),可以解析和研究实际使用的指令集(但不是这些指令的执行频率)。

    例如,如果一个在十亿次运行中只执行一次的if()分支使用了一条指令,那么它的实现将同样重要,就像该指令在一个内部循环中每秒执行十亿次,每天执行23个小时一样,因为这两个代码部分都是使检查的程序工作所必需的。

    在x86程序中需要观察的另一件事是,一些指令是(最好更小或更快)更长指令序列的组合。像inc-reg而不是add-reg,1;inc[memvar],而不是加载、inc、存储序列;整个字符串指令系列;进入/离开;pusha/popa;等等。对于您自己的CISC设计,您可能希望在当前编译器架构可以使用的限制范围内选择其他序列进行优化。

    请注意,一些看似奇特的指令,如LAHF/SAHF,最初是为了简化8080代码的机械翻译而创建的,而不是后来用于浮点之类的东西。