1

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

谢谢!

4

1 回答 1

2

应该有很多论文注意到这个事实。例如 ,动态分支预测器的方案和性能第 13-14 页

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

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

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

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

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

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

于 2012-12-19T08:08:10.890 回答