错误预测的分支退出和错误预测的分支执行之间的差异

时间:2013-01-23 04:56:28

标签: java optimization assembly likwid

我有一个不同寻常的案例,我正在研究一个相对简单的Java,它应该很好地预测分支行为,但是,wtwid-perfctr报告了一个巨大的(50%)分支误预测率。但是,运行时与误预测率不一致(CPI非常低,约为0.3,前端和后端的档位都很低)。类似的C ++程序没有错误的预测,但实际上运行时间稍长。

似乎差异在于BR_MISP_RETIRED_ALL_BRANCHES与BR_MISP_EXEC_ANY事件。前者用于计算误预测比率,在每个循环的一个事件中很大。后者非常小,与预期的误预测率一致,也与运行时一致。

对于我尝试过的其他样本程序,它们确实表现出严重的错误预测(例如,对数组中的随机值进行分支),这些值非常相似。

是否有人熟悉这两个计数器的确切含义?对于错误预测的分支,“退役”计数器如何比“exec”计数器大25倍 - 当任何分支在退役之前必须执行时?

0 个答案:

没有答案