use*_*005 30 language-agnostic architecture compiler-construction cpu optimization
自从我开始编程以来,我已经在每个地方阅读,以避免不惜一切代价浪费分支机构.
这很好,虽然没有一篇文章解释了为什么我应该这样做.CPU解码分支指令并决定跳转时到底发生了什么?什么是"东西"使它比其他指令(如添加)慢?
Oli*_*rth 44
分支指令本身并不比任何其他指令慢.
但是,您之所以听到分支应该避免的原因是因为现代CPU遵循管道架构.这意味着同时执行多个顺序指令.但是如果管道能够在每个周期从内存中读取下一条指令,那么它只能被充分利用,这反过来意味着它需要知道要读取哪条指令.
在条件分支上,它通常不会提前知道将采用哪条路径.因此,当发生这种情况时,CPU必须停止,直到决策得到解决,并抛弃分支指令后面的管道中的所有内容.这降低了利用率,从而降低了性能.