现代芯片上的浮点数与整数算术性能
Posted
技术标签:
【中文标题】现代芯片上的浮点数与整数算术性能【英文标题】:Float versus Integer arithmetic performance on modern chips 【发布时间】:2010-01-06 00:46:30 【问题描述】:考虑加法模型上的 Viterbi 解码器。它花时间做加法和比较。现在,考虑两个:一个使用 C/C++ float
作为数据类型,另一个使用 int
。在现代芯片上,您是否期望int
的运行速度明显快于float
?或者流水线的奇迹(以及没有乘法和除法)会让这一切变得平淡吗?
【问题讨论】:
通常情况下,我会说你应该测量这两种方法,看看哪一种更快。但是,如果您可以访问要定位的 CPU,或者您有针对它们的模拟器,这将更加有用/更现实。 我有 CPU。我希望其他人在我麻烦测量之前已经在这里进行了类似的计算。 【参考方案1】:取决于你所说的显着是什么意思。我通常希望看到 int 的执行速度快 2 倍,但这完全取决于其他情况。可以处理 AMD64 (AMD/Core2) 指令集的现代处理器通常每个周期可以有效地执行 1 个浮点操作如果它们可以保持流水线馈送
它们通常还可以在相同的时间内执行 2 或 3 个整数运算。甚至可以同时做到这两点。
但是编写停止流水线的代码并不难,您必须避免在计算完成后立即使用计算结果,否则流水线将停止,并且每次乘法得到更多的周期而不是 1 个周期。
在大多数情况下,PowerPC 的每周期指令与 AMD/Intel 相同或更好。
附录:
顺便说一句,您可能会发现比较(或者更确切地说比较所暗示的分支)最终比添加的成本要高得多。错误预测的分支代价高昂,尤其是在 Pentium 4 处理器上。
【讨论】:
一些编译器使用SETcc
指令而不是Jcc
指令实现比较,在这种情况下不涉及分支并且您不会得到分支预测错误的惩罚。以上是关于现代芯片上的浮点数与整数算术性能的主要内容,如果未能解决你的问题,请参考以下文章