sqrt 函数在 AArch64 上的性能
Performance of sqrt function on AArch64
出于学术原因,我在 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
单 sqrt 似乎比双 sqrt 好 2 倍。
但是,在分析时我得到了这些数字:
326 ms sqrt
82 ms sqrtf
我正在花费相同数量的周期。
从这些数字来看,sqrtf 似乎好 4 倍。
我找不到合适的理由?
无法在互联网上找到关于此说明的正确解释。
有关此的一些信息或指导将非常有用。
如果您查看 Cortex-A57 优化指南中 FSQRT 指令的 table 条目所附的注释,它表示 "FP divide and square root operations are performed using an iterative algorithm".
这意味着根据指令的输入,延迟会有所不同。这就是 table 中“7-17”和“7-32”延迟数字的含义。根据输入的不同,单精度 FSQRT 可能需要 7 到 17 个周期才能完成,而双精度变体可能需要 7 到 32 个周期。
因此,如果一个特定的单精度计算恰好需要 7 个周期,而双精度计算需要 28 个周期,那么你就有 4 倍的差异。
出于学术原因,我在 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
单 sqrt 似乎比双 sqrt 好 2 倍。
但是,在分析时我得到了这些数字:
326 ms sqrt
82 ms sqrtf
我正在花费相同数量的周期。 从这些数字来看,sqrtf 似乎好 4 倍。
我找不到合适的理由? 无法在互联网上找到关于此说明的正确解释。
有关此的一些信息或指导将非常有用。
如果您查看 Cortex-A57 优化指南中 FSQRT 指令的 table 条目所附的注释,它表示 "FP divide and square root operations are performed using an iterative algorithm".
这意味着根据指令的输入,延迟会有所不同。这就是 table 中“7-17”和“7-32”延迟数字的含义。根据输入的不同,单精度 FSQRT 可能需要 7 到 17 个周期才能完成,而双精度变体可能需要 7 到 32 个周期。
因此,如果一个特定的单精度计算恰好需要 7 个周期,而双精度计算需要 28 个周期,那么你就有 4 倍的差异。