为什么分支预测在FP中比INT更好

时间:2012-12-06 23:28:56

标签: performance optimization pipeline processor

我已经阅读了很多地方,并且在许多图表中看到分支预测对于浮点计划比对整数程序更有效。为什么是这样?关于在哪里阅读它的任何建议?

谢谢!

1 个答案:

答案 0 :(得分:2)

应该有很多论文注意到这个事实。例如。 The Schemes and Performances of Dynamic Branch predictors第13-14页

  

浮点程序具有比整数程序更低的条件分支百分比,但具有更高的条件分支百分比,如图14和图15所示。这是因为这些浮点程序具有许多长循环结构。

本文还有一些关于SpecInt vs SpecFp的统计数据 - 两组计算机基准程序 - 整数集和浮点集。位过时,但仍包含几个实际代码。

其他文件,例如this one说,OOP(通常被认为是整数任务)是间接分支:

  

间接分支在面向对象语言中更为频繁。这些语言促进了更多的多态编程风格,其中子程序调用的后期绑定是清洁,模块化代码设计的主要工具。虚函数表是大多数C ++和Java编译器的首选实现,它为每个多态调用执行间接分支。这里研究的C ++程序执行间接分支的次数与每50条指令一样频繁;其他研究[CGZ94]也显示出类似的结果。 Java程序(所有非静态调用都是虚拟的)可能使用间接   更频繁地打电话。

我认为,浮点程序通常是面向数组的:在每个数组的元素上做几个公共代码循环。计算代数通常在访问近元素时使用静态模式(例如,它只需要[x-1] [y]和[x-1] [y-1]来计算[x] [y])。

整数程序是关于具有大量指针的复杂数据结构。每个指针遍历都有一些条件代码(检查NULL;条件jmp到下一次迭代);数据之间的依赖关系是复杂的或动态的。即使整数代码使用巨大的int数组,例如图片,可能有条件代码用于饱和欠溢和溢出。数组的排序也很多分支。