整数与浮点乘法性能,现代 CPU

计算科学 参考请求 迭代法 表现 基准测试
2021-12-11 16:02:18

与浮点类型相比,在现代 CPU 上每秒可以实现多少次各种整数类型的乘法基准?

如果值得进行整数算术算法的交流实现,我正在尝试获得一些提示。也就是说,与迭代浮点算术方法相比,现代 CPU 会不会有速度提升。


对于那些对算法感到好奇的人:这个答案启发了我写一个问题,这个问题导致了在整数向量上做矩阵单项式来逼近更复杂领域上多项式的根的想法。例如找到代表 3 维旋转的四元数的整数根。“如果我应用它N次,哪个操作会变成这个轮换?” 最简单的解决方案可能是轮换。

1个回答

一般来说,答案是否定的。

现代 CPU 擅长处理具有高算术强度并使用浮点算术实现的问题。

一些数字将有助于解释这种差异。

在 Haswell 芯片上,MULPS 指令执行 8 次单精度浮点乘法。延迟为 5 个 CPU 周期,倒数吞吐量为 0.5。这意味着您必须等待 5 个周期才能完成第一条指令,但是如果您有一个独立的操作数流,那么您最终可以退出 2 条指令 pr。循环。这产生了 16 个单精度乘法 pr 的峰值速率。循环。相比之下,IMUL 指令将一对 32 位整数相乘。延迟是 3 个周期,倒数吞吐量是 1。如果你有一个独立的操作数流,那么峰值速率是 1 乘法 pr。循环。

只有少数非常专业的计算类型才能实现峰值翻转率,例如对适合单核 L1 缓存的向量进行内积。矩阵-矩阵乘法,用于高斯消元的所有阻塞实现的内核在 Top500 计算机上经常达到理论峰值的 70-80%。

稀疏算术通常具有非常低的算术强度并且与现代计算机体系结构不兼容。Top500 列表中的计算机以大约 2% 的峰值失败率执行稀疏基准(共轭梯度)。列表中最好的计算机的性能不到 20%。

您可以使一些稀疏算法以峰值失败率的高比例运行,但它需要针对手头的特定任务量身定制的极其激进的优化。尝试通过整数计算来提高计算速度只会进一步降低算术强度。

可以通过返回结果的巧妙算法来提高双精度浮点计算的准确性,就好像它是使用较小的单位舍入误差计算出来的,然后舍入到双精度一样。如果需要极高的准确性,那么这种方法更有可能成功。