0

我正在使用 ARM Cortex-A9 (zynq7000),我想启用 neon SIMD,但除非指定,否则不要将其用于浮点。

当 arm-none-eabi-gcc 使用以下 fpu 选项(单独)编译时:

  1. mfpu=vfpv3 -mfloat-abi=softfp ,
  2. mfpu=neon-vfpv3 -mfloat-abi=softfp,
  3. mfpu=霓虹灯-mfloat-abi=softfp,

二进制文件 1 和 2 不同。但是 2&3 是相同的(未启用矢量化),我使用 -Og 进行优化。( -Og 不启用 Vectorize 选项)

当我使用选项 mfpu=neon-vfpv3 时,如何确保所有浮点都在 VFP 中完成,而不是在 NEON 中完成?

根据 ARM 架构参考手册,NEON 和 VFP 支持类似的指令,这使得仅通过检查反汇编很难区分差异。

此外,我计划将#pragma GCC ivdep 用于我需要矢量化的循环和函数,以及实现此目的的适当编译器标志是什么?

4

1 回答 1

0

neon除非通过内在函数启用或强制执行自动矢量化,否则编译器将永远不会使用任何指令。

尽管指令看起来很相似neonvfp但它们甚至各自以不同的模式运行。

有一些由vfpneonon共享的指令armv7(主要与内存相关),但它们不应该受到任何关注。

你为什么不发布反汇编?

于 2021-06-21T11:55:18.683 回答