繁体   English   中英

不同的ISA二进制分析结果矛盾

[英]Different ISA binary profiling results contradiction

我正在分析我用 CPP 编写的针对 RISC 架构的代码。 我有两个二进制文件,一个是为 x86 生成的,另一个是为 RISC-V 生成的。 我已经使用 perf 和 gprof 进行了分析。 根据 RISC 和 CISC 架构理论,但我从性能结果中得到的结果是矛盾的。 有人可以告诉我这里出了什么问题。

性能结果:

'./unit_tests'CISC 的性能计数器统计信息:

    180,899022      task-clock (msec)         #    0,885 CPUs utilized          
             7      context-switches          #    0,039 K/sec                  
             2      cpu-migrations            #    0,011 K/sec                  
         1.350      page-faults               #    0,007 M/sec                  
   588.853.057      cycles                    #    3,255 GHz                    
   863.377.707      instructions              #    1,47  insn per cycle        
   157.440.034      branches                  #  870,320 M/sec                  
       992.067      branch-misses             #    0,63% of all branches        

   0,204509183 seconds time elapsed

'./unit_tests'RISC 的性能计数器统计信息:

    693,264322      task-clock (msec)         #    0,999 CPUs utilized          
            28      context-switches          #    0,040 K/sec                  
             1      cpu-migrations            #    0,001 K/sec                  
         2.400      page-faults               #    0,003 M/sec                  
 2.320.185.432      cycles                    #    3,347 GHz                    
 5.467.630.410      instructions              #    2,36  insn per cycle        
   960.171.812      branches                  # 1385,001 M/sec                  
     7.038.808      branch-misses             #    0,73% of all branches        

   0,693978844 seconds time elapsed

从上述结果可以看出,RISC 中经过的时间比 CISC 多,而且在 RISC 中每周期的 insn 也更多。 我想知道为什么会这样。 有人可以告诉我我是否遗漏了什么或解释错误的结果吗?

您正在分析 qemu 解释/模拟 RISC-V,而不是 QEMU 中的 RISC-V“来宾”代码。 QEMU 做不到。 它不是任何东西的周期精确模拟器。

这比最初为您的 x86-64 编译的本机代码更慢并且需要更多指令。

使用 binfmt_misc 在 RISC-V 二进制文件上透明地运行qemu-riscv64使得./unit_tests完全等同于qemu-riscv64./unit_tests

您的测试结果证明了这一点: perf stat qemu-riscv64./unit_tests给您的结果与您的问题大致相同。


有点相关:现代微处理器 90 分钟指南! 有一些关于 CPU 管道如何工作的详细信息。 RISC 并不总是比现代 x86 CPU 更好。 他们花费了足够多的晶体管来快速运行 x86-64 代码。

您实际上期望 RISC CPU 为相同的工作提供更多的总指令,而不是更多的指令。 可能是 1.1 倍或 1.25 倍?

性能取决于微架构,而不是(仅)指令集。 IPC 和总时间或周期完全取决于微架构在寻找指令级并行性方面的积极性。 现代英特尔设计在这方面是最好的,即使在相当密集的 CISC x86 代码中,内存源指令也很常见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM