FPU与软件仿真的性能比较

时间:2013-03-02 11:50:00

标签: performance floating-point scientific-computing fpu

虽然我知道(所以我被告知)浮点协处理器的工作速度比浮点运算的任何软件实现都快,但我完全没有这种差异的大小,按照数量级的顺序。

答案可能取决于应用程序和您的工作地点,微处理器和超级计算机之间。我对计算机模拟特别感兴趣。

你能指出这个问题的文章或论文吗?

1 个答案:

答案 0 :(得分:4)

一般的答案显然很模糊,因为表现取决于很多因素。

然而,根据我的理解,在没有在硬件中实现浮点(FP)操作的处理器中,软件实现通常会慢<10> 100倍(或者甚至更糟,如果实现是错误的)而不是整数操作,它总是在CPU上的硬件中实现。

确切的性能取决于许多因素,例如整数硬件的功能 - 某些CPU缺少FPU,但其整数算法中的功能有助于实现FP计算的快速软件仿真。

njuffa提到的论文,Cristina Iordache and Ping Tak Peter Tang, An Overview of Floating-Point Support and Math Library on the Intel XScale Architecture支持这一点。对于英特尔XScale处理器,列表为延迟(摘录):

integer addition or subtraction:  1 cycle
integer multiplication:           2-6 cycles
fp addition (emulated):           34 cycles
fp multiplication (emulated):     35 cycles

因此,这将导致整数和FP算术之间的因子大约为10-30。本文还提到GNU实现(GNU编译器默认使用的实现)大约慢10倍,总因数为100-300。

最后,请注意,上述内容适用于编译器将FP仿真编译到程序的情况。某些操作系统(例如Linux和WindowsCE)在OS内核中也有一个FP仿真 。优点是即使没有FP仿真编译的代码(即使用FPU指令)也可以在没有FPU的进程上运行 - 内核将透明地模拟软件中不支持的FPU指令。但是,由于额外的开销,这种仿真甚至比编译到程序中的软件仿真更慢(大约是另一个因素10)。显然,这种情况仅与处理器架构有关,其中某些处理器没有FPU,有些处理器没有(例如x86和ARM)。

注意:此答案将(仿真)FP操作的性能与同一处理器上的整数操作进行比较。您的问题也可能与性能有关 (模拟)FP操作与硬件FP操作相比(不确定您的意思)。但是,结果大致相同,因为如果FP在硬件中实现,它通常(几乎)与整数运算一样快。