[英]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.