GCC;ARM64;AArch64;未识别的命令行选项“-mfpu = neon”。

16
我遇到了编译错误:
无法识别的命令行选项'-mfpu=neon'*,当尝试使用-mfpu=neon标志进行编译时。 实际上,我尝试了任何'mfpu'选项都失败了。然而在文档中提到了这个标志,所以它应该是有效的。
这个关键字出了什么问题? 如何告诉编译器使用NEON?
使用Linaro GNU aarch64 linux工具4.8。
谢谢。

1
文档中在哪里提到了?我没看到(但我确实看到了相关的SIMD特性选项...) - Notlikethat
@Notlikethat 请参阅 https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html。 - Severin Pappadeux
@SeverinPappadeux 这是针对ARM后端而不是AArch64的。在这里引用“-fpu”选项[https://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html]与那个同样相关;) - Notlikethat
@Notlikethat 很好的发现,AArch64没有这样的选项。 - Severin Pappadeux
@Notlikethat,是的,我也看了ARM选项。如果您将答案添加为答案而不是评论,我会将其标记为正确。这样您就可以获得帮助的凭据。非常感谢 :) - user3124812
2个回答

30

高级SIMD(也称为NEON)在AArch64中是强制性的,因此无需命令行选项来指示编译器使用NEON。

如果您想启用自动向量化优化,以便编译器自动使用NEON指令,则需要使用-O3-O2 -ftree-vectorize进行编译。

gcc中的AArch64和ARM后端完全是分开的。 ARM后端仅针对传统的32位ARM指令集(ARM,Thumb,Thumb-2)。这与x86的情况相反,其中32位和64位代码生成合并为单个GCC后端。


1

前往文件/tensorflow/contrib/lite/kernels/internal/BUILD,删除-mfpu=neon即可。

NEON_FLAGS_IF_APPLICABLE = select({
    ":arm": [
        "-O3",
        "-mfpu=neon",
    ],

至:

NEON_FLAGS_IF_APPLICABLE = select({
    ":arm": [
        "-O3",

    ],

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接