在AArch64上执行sqrt功能

时间:2017-01-23 05:47:53

标签: performance arm arm64 fpu math.sqrt

出于学术原因,我正在考虑使用AArch64的sqrt功能。 Single float sqrtf 函数的代码:

fsqrt s0, s0 
ret

Double float sqrt 函数的代码:

fsqrt d0, d0 
ret

我指的是 FSQRT 的理论延迟: http://infocenter.arm.com/help/topic/com.arm.doc.uan0015b/Cortex_A57_Software_Optimization_Guide_external.pdf

latencies of FSQRT

单个sqrt似乎比double高2倍。

但是,在分析我得到这些数字时:

326 ms  sqrt
 82 ms  sqrtf

我需要花费相同数量的周期。 从这些数字来看,sqrtf似乎要好4倍。

我找不到正确的理由? 无法找到关于互联网上这条指令的实际解释的正确解释。

这方面的一些信息或方向非常有用。

1 个答案:

答案 0 :(得分:3)

如果您查看Cortex-A57优化指南中FSQRT指令的表条目附带的注释,它表示使用迭代算法"执行" FP除法和平方根操作"。

这意味着根据指令的输入,延迟会有所不同。这就是" 7-17"和" 7-32"表中的延迟数字。根据输入,单精度FSQRT可能需要7到17个周期才能完成,而双精度变量可能需要7到32个周期。

因此,如果特定的单精度计算恰好需要7个周期,但是双精度计算需要28个周期,那么就会有4倍的差异。