jww*_*jww 5 macros gcc arm neon c-preprocessor
根据ARM ARM,__ARM_NEON__
定义了可用的Neon SIMD指令.我无法让GCC提供它.
在运行Debian 8.2的BananaPi Pro开发板上可以使用霓虹灯:
$ cat /proc/cpuinfo | grep neon
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
Run Code Online (Sandbox Code Playgroud)
我正在使用GCC 4.9:
$ gcc --version
gcc (Debian 4.9.2-10) 4.9.2
Run Code Online (Sandbox Code Playgroud)
试试GCC并-march=native
:
$ g++ -march=native -dM -E - </dev/null | grep -i neon
#define __ARM_NEON_FP 4
Run Code Online (Sandbox Code Playgroud)
好的,在为Neon构建时尝试Google用于Android的内容:
$ g++ -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -dM -E - </dev/null | grep -i neon
#define __ARM_NEON_FP 4
Run Code Online (Sandbox Code Playgroud)
也许ARMv7-a有一个硬浮点数:
$ g++ -march=armv7-a -mfloat-abi=hard -dM -E - </dev/null | grep -i neon
#define __ARM_NEON_FP 4
Run Code Online (Sandbox Code Playgroud)
我的问题是:
__ARM_NEON__
?有可能:
相关的,在LeMaker HiKey上运行带有GCC 4.9.2的Linaro的AARCH64/ARM64,这是预处理器的输出:
$ cpp -dM </dev/null | grep -i neon
#define __ARM_NEON 1
Run Code Online (Sandbox Code Playgroud)
据ARM称,该主板确实具有高级SIMD指令,即使:
$ cat /proc/cpuinfo
Processor : AArch64 Processor rev 3 (aarch64)
...
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
Run Code Online (Sandbox Code Playgroud)
Jam*_*lgh 12
这里隐藏着许多问题,我会尝试依次提取它们......
根据ARM ARM,
__ARM_NEON__
定义了可用的Neon SIMD指令.我无法让GCC提供它.
这是ARM编译器[旧版本]的编译器文档,而不是ARM Architceture参考手册.将检查是否存在高级SIMD指令的更好的宏__ARM_NEON
,这是在ARM C语言扩展中定义的.
试试GCC并
-march=native
:
你可能已经找到了.ARM目标的GCC分离-march
(对于GCC应该生成代码的体系结构修订版),-mfpu
(对于可用的浮点/高级SIMD单元)和-mfloat-abi
(如何传递浮点参数,以及是否存在浮点单位).最后是-mtune
(这要求GCC来尝试优化为特定的处理器)和-mcpu
(充当的组合-mtune
和-march
).
通过要求-march=native
您要求GCC生成适合您所运行的处理器的检测到的体系结构的代码.这对-mfpu
设置没有影响,因此不一定能够生成高级SIMD指令.
请注意,上述内容仅适用于以AArch32为目标的编译器.AArch64 GCC不支持-mfpu
并将检测是否存在高级SIMD支持-march=native
.
好的,在为Neon构建时尝试Google用于Android的内容:
$ g++ -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -dM -E
这些构建标志不足以支持高级SIMD指令,您的注释可能不完整.在GCC 4.9.2 -mfpu
支持的旗帜中,我期待以下任何一种:
neon
,neon-fp16
,neon-vfpv4
,neon-fp-armv8
,crypto-neon-fp-armv8
给你你想要的.
据ARM称,该主板确实具有高级SIMD指令,即使:
看起来您正在运行AArch64内核,该内核通过该asimd
功能公开了对Advanced SIMD的支持- 如示例输出中所示.