-
3 votesanswersviews
分支预测如何与指令指针交互
我的理解是,在处理器流水线的开头,指令指针(指向要执行的下一条指令的地址)在读取后由分支预测器更新,以便可以在下一个周期获取该新地址 . 但是,如果在管道的早期修改指令指针,这是否会影响当前处于执行阶段的指令,这些指令可能依赖于旧的指令指针值?例如,在执行 call 时,需要将当前EIP推入堆栈,但在分支预测期间更新指令指针时不会受到影响吗? -
12 votesanswersviews
Intel CPUs指令队列提供静态分支预测?
在“英特尔手册”第3卷中,它包含硬件事件计数器的说明: BACLEAR_FORCE_IQ计算指令队列强制BACLEAR的次数 . IQ还负责基于由L2分支预测单元提供的静态方案和动态数据来提供条件分支预测方向 . 如果在目标阵列中找不到条件分支目标并且IQ预测分支被采用,则IQ将强制分支地址计算器发出BACLEAR . BAC声明的每个BACLEAR在指令获取管道中产生大约8个周期的气泡 .... -
2 votesanswersviews
英特尔:序列化指令和分支预测
The Intel Architecture's Developer's Manual(Vol3A,第8-26节),说: 奔腾处理器和更新的处理器系列使用分支预测技术,通过在执行分支指令之前预取分支指令的目标来提高性能 . 因此,当执行分支指令时,指令执行不是确定性地序列化的 . 这是什么意思? 听起来真的非常糟糕 . 这听起来像CPUID打破分支预测(或反之亦然)的序列化指令,但这似乎不太可... -
22299 votesanswersviews
为什么处理排序数组比处理未排序数组更快?
这是一段看似非常特殊的C代码 . 出于某种奇怪的原因,奇迹般地对数据进行排序使代码快了近六倍 . #include <algorithm> #include <ctime> #include <iostream> int main() { // Generate data const unsigned arraySize = 32768; ... -
0 votesanswersviews
Haswell双路径执行CPU?
Haswell现在有 2 Branch Units - 如下所示:http://arstechnica.com/gadgets/2013/05/a-look-at-haswell/2/ 这是否意味着Haswell是双路径执行CPU? 关于:http://ditec.um.es/~jlaragon/papers/aragon_ICS02.pdf 这是否意味着Haswell只能在整数ALU和Sh... -
363 votesanswersviews
为什么(a * b!= 0)比Java中的(a!= 0 && b!= 0)更快?
我正在用Java编写一些代码,在某些时候,程序的流程是由两个int变量“a”和“b”是否为非零来确定的(注意:a和b从不是负数,并且从不在整数溢出范围内) . 我可以评估它 if (a != 0 && b != 0) { /* Some code */ } 或者 if (a*b != 0) { /* Some code */ } 因为我希望这段代码每次运行运行数百万次,所以我想...