告诉分支预测器每n次迭代采用哪种方式

时间:2019-02-23 01:42:16

标签: c branch-prediction

在性能关键循环中,我有一些if语句,看起来像这样

for(i = 0;;i = (i + 1) % n) {
    if (i == 3) {
        //...
    }
}

这打开了分支预测失败的可能性,这会使我的程序变慢。幸运的是,我确切地知道每n次迭代就会满足该条件的频率。 (我将其保留为抽象的n,因为我有多个类似的条件,其中n不同)

我想知道的是,是否有任何方法可以告诉分支预测变量我所拥有的有用信息,或者只是希望它可以找到模式。

我考虑过的一种解决方案是展开循环,因此没有分支。这是一个很好的解决方案,也是我计划使用的解决方案,但是它有一些不太吸引人的副作用。特别是,它将破坏DRY,并会创建更大的程序大小(内存受到限制,但不受 that 限制)。

我可以在不展开循环的情况下告诉分支预测器我知道的模式吗?

0 个答案:

没有答案