首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ARM皮质-A9霓虹灯和VFP

ARM皮质-A9霓虹灯和VFP
EN

Stack Overflow用户
提问于 2021-06-21 04:16:56
回答 2查看 394关注 0票数 0

我使用ARM Cortex-A9 (zynq7000),我想让霓虹灯SIMD,但,而不是,使用浮点,除非指定。

当arm-none-eabi-gcc编译时,有以下fpu选项(分别):

  1. mfpu=vfpv3 3-m浮-abi=softfp,
  2. mfpu=neon-vfpv3 3-m浮-abi=softfp,
  3. mfpu=neon-m浮-abi=softfp,

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

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

根据ARM体系结构参考手册,the和VFP支持类似的指令,这使得仅仅通过检查拆卸就很难区分这种差异。

此外,我计划使用#实用主义GCC ivdep的循环和函数,我需要矢量化,将适当的编译器标志来实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-21 11:55:18

编译器将永远不会使用任何neon指令,除非通过本质启用或强制自动向量化。

尽管neonvfp指令看起来很相似,但它们甚至在不同的模式下操作。

vfpneonarmv7上共享了一些指令(主要是与内存相关的),但它们不应该引起任何关注。

你为什么不贴出拆解呢?

票数 0
EN

Stack Overflow用户

发布于 2022-04-07 10:48:12

-mfpu=

-mfloat-abi=

  • :VFP不使用,并使用ARM调用约定
  • 使用softfp:VFP,但使用ARM调用约定(使用ARM R寄存器将参数传递给函数)
  • :VFP是特定于H/W的调用约定(与ARM R寄存器一起使用VFP/NEON S和D寄存器将参数传递给函数)。S/D寄存器用于浮点参数(由值调用)​。

霓虹灯(SIMD)上的浮点运算

  • 除非funsafe-math-optimizations选项​设置为GCC,否则霓虹灯不用于浮点操作。(霓虹灯不遵循IEEE 754 )

拆卸中的vfp和neon指令:

如果是vmov,

  • vfp只使用vmov.f32vmov.f64
  • 霓虹灯使用vmov.i64、vmov.i32等。

环矢量化

  • 对于循环矢量化,可以使用-ftree-vectorize-O2-O3优化选项。 当使用-Og优化时,循环可能不会自动被矢量化
  • 带氖环的矢量化
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68062253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档