这两种方法似乎在Linux内核代码中广泛使用。我知道分支预测的基础,但我想知道这两个功能如何影响()语句的操作。他们还可以在CPU指导管道的水平上工作吗?还是在内核代码级别的抽象级别更高?
作为Linux内核的入门者,我对了解这两种方法的内部工作非常感兴趣。谢谢!
在某些(微型)体系结构上有分支提示编译器可以编码到指令中,以告诉CPU分支预测单元是否可能会采用分支。
在其他体系结构上,分支预测单元的静态部分被很好地记录下来,可以使用它来生成更快的代码。例如,在大多数现代X86上,前向分支在静态上被预测为未采用,而向后分支被预测为采用(以实现更快的循环)。
最后,无论如何,预测性缓存的获取可能对速度更为重要。这主要取决于程序员,但是对于指令缓存,如果编译器知道程序的哪一部分可能会被执行,并将其保持足够小以适合缓存。