我正在为ARMv8和ARMv7设备编译一些二进制文件,我想禁用 branch predication 。我知道这个问题曾被问过一次( here ),但目标是x86机器。我正在使用linaro gcc for arm。
我是为了实验而这样做的,我不建议这样做。
我使用perf来测量分支指令/分支未命中数。
所以我有两个问题:
我尝试了以下选项:
我可以确定使用 -fno-if-conversion 和 -fno-guess-branch-probability 完全禁用分支预测
答案 0 :(得分:1)
经过更多的研究和测试后,我得到了答案。
在 ARMv7 ISA中有预测指令。编译器在认为有益时会使用它们。可以使用-fno-if-conversion -fno-if-conversion2
编译标志禁用此功能。如果分支预测器做得很好,这可能会提高性能。
ARMv8 AArch64 ISA对分支预测的支持非常有限,因此基本上没有太多禁用功能。预测指令的数量至少减少。即使使用-fno-if-conversion
标志,我也没有看到对执行指令数量的任何影响(为此使用 perf )。这意味着分支预测器更为重要。