簡體   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