0

出于学术原因,我在 AArch64 上使用 sqrt 函数的性能。单浮点sqrtf函数的代码:

fsqrt s0, s0 
ret

双浮点sqrt函数的代码:

fsqrt d0, d0 
ret

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

FSQRT 的延迟

单 sqrt 似乎比双好 2 倍。

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

326 ms  sqrt
 82 ms  sqrtf

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

我找不到合适的理由?无法在互联网上找到有关此指令实际情况的正确解释。

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

4

1 回答 1

3

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

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

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

于 2017-11-16T10:11:05.150 回答