使用可能/不太可能的提示是否有任何性能测试结果?

gcc提供可能/不太可能的提示 ,帮助编译器生成具有更好分支预测的机器代码。

有没有关于如何正确使用或不使用这些提示影响某些真实系统上实际代码性能的数据?

问题有所不同,但Peter Cordes对这个问题 的回答给出了明确的暗示;)。 现代CPU忽略静态提示并使用动态分支预测。

我不知道对这些特殊提示有任何透彻的分析。 在任何情况下,它都将特定于CPU。 一般而言,如果您确定可能性(例如,> 90%),那么添加此类注释可能是值得的,尽管具体用例的改进会有很大差异。

现代桌面CPU倾向于具有非常好的分支预测。 如果您的代码无论如何都在热路径上,动态分支预测器将很快发现分支本身存在偏差。 如果没有可用的动态分支信息,这些提示主要用于帮助启动静态预测器。

在x86上,静态预测器预测采用前向分支并采用后向分支(因为它们通常表示循环)。 因此,编译器将调整静态代码布局以匹配预测。 (这也可能有助于将热路径放在相邻的缓存线上,这可能会有所帮助。)

在PPC上,一些跳转指令有一点可以预测它们的可能性。 我不知道编译器是否也会重新排列代码。

我不知道ARM CPU如何预测分支。 作为低功率设备,它可能具有不太复杂的分支预测,并且静态预测可能具有更大的影响。