对于具有单独管道的 ARM,为“-mfpu=neon-vfpv3”指定“-mfpu=neon-vfpv3”是否有优势?

Joh*_*itb 7 assembly gcc arm neon armv7

我的 Zynq-7000 ARM Cortex-A9 处理器同时具有 NEON 和 VFPv3 扩展,Zynq-7000-TRM 表示处理器配置为具有“VFPv3 和高级 SIMD 指令的独立管道”

到目前为止,我使用 Linaro GCC 6.3-2017.05 和-mfpu=neon选项编译了我的程序,以使用 SIMD 指令。但是在编译器也有非SIMD操作要发出的情况下,使用会有所不同-mfpu=neon-vfpv3吗?GCC 的指令选择和调度程序是否会为两个版本发出指令,以便它可以利用两个管道来提高 CPU 的利用率?

Jak*_*LEE 4

从技术上来说,是的。

现实,没有。

NEON 在 ARMv7 上是可选的。

被许可人可以从以下选择一种配置:

  • 没有任何
  • 仅限 VFP
  • NEON 加上 VFP

与 NEON 不同,ARMv7 上有不同的 VFP 版本,Cortex-A8 上的 VFP-lite 是最臭名昭著的版本,因为它没有流水线,因此速度非常慢。

因此,通过编译器选项指定 CPU 配置和架构版本在技术上是有意义的,以便编译器可以为该特定架构/配置生成最优化的机器代码。

然而实际上,现在的编译器忽略了大多数这些构建选项,甚至还忽略了指令。

而且,将 VFP 和 NEON 指令分配给不同的管道也没有多大帮助(如果有的话),因为它们都共享寄存器组。

通过利用尽可能多的寄存器来提高 NEON 的性能所带来的效果远比让 VFP 并行运行要好得多。

我很困惑为什么现在有这么多人如此信任免费编译器。

最好的 ARM 编译器无疑是 6000 美元以上的 DS-5 Ultimate Edition 附带的 ARM 编译器。他们的支持非常好,但我不确定这是否证明价格合理。