硬件性能、浮点函数

计算科学 表现 浮点
2021-12-10 09:59:20

首先,希望我为这个问题找到了合适的论坛,如果我还没有,请把我传给一个更适合的论坛。

出于好奇,与可能比我更喜欢 CPU 的人发生争执。我们争论的是现代 CPU 上浮点运算的性能。是否有任何来源显示有关现代处理器上典型函数(如 exp、sin、cos)的硬件性能?

特别是:蛮力计算可以与制表竞争这些功能吗?

1个回答

在 1980 年代的 Intel 80x86 架构中,有一个标量浮点单元,具有 FSIN、FCOS 等指令,用于计算 sin 和 cos 等函数。这些功能是在微码中实现的,可能需要数百个 CPU 周期才能执行。

后来,英特尔添加了流 SIMD 扩展 (SSE),它为处理器提供了并行浮点单元,可用于并行对多个操作数执行浮点运算。SSE 指令集包括基本算术运算(+、-、*、/、sqrt),但 SSE 指令集不包括 sin 和 cos 等函数的指令。几十年来,SSE 经历了几个版本,增加了额外的指令和更多的浮点寄存器。

尽管旧指令仍在架构中,但 SSE 浮点单元非常快。在实践中,SSE 指令现在几乎专门用于浮点运算,并带有用于计算 sin 和 cos 等函数的经过高度优化的库例程。这些例程通常将通过评估函数的多项式或有理函数逼近来计算函数值。有时使用一个小表格来选择哪个多项式用于不同范围的输入值。

由于浮点计算与内存访问相比非常快,并且因为需要一个非常大的表来保存这些函数的所有可能值,所以直接的表查找无法与这种方法竞争。

有关更多信息和一些特定实现的链接,请参阅此 stackexchange 问题:

https://stackoverflow.com/questions/2284860/how-does-c-compute-sin-and-other-math-functions