-mcpu = /-march =标志和-mfpu =标志是在Raspberry Pi上编译C代码时使用的正确/本机标志吗?
#1 楼
这取决于您希望链接代码的库。如果您使用的是Raspbian映像,则体系结构为“ armhf”,并且编译标志为:-march=armv6
-mfpu=vfp
-mfloat-abi=hard
如果要为Debian“ armel” arch进行编译,则编译标志是不同的。
#2 楼
RPI ARM内核是ARM 1176jzf-S,然后将合适的标志设置为-march=armv6zk -mcpu=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp
将-mfloat-abi = hard -mfpu = vfp放到软浮动发行版。
可以通过在gcc> = 4.7`上运行
gcc -mcpu=native -march=native -Q --help=target
来找到这些标志。#3 楼
我发现此设置应该是最佳设置:-march=armv6 -mfloat-abi=hard -mfpu=vfp
(-mfloat-abi = hard,当然,仅当使用armhf发行版时)
#4 楼
我无法回答有关-mfpu
标志的问题,但我建议先尝试以下操作:-march=native
-mcpu=native
-mtune=native
如
GCC manual page related to ARM options
中所述:-march = native使编译器自动运行-检测构建计算机的体系结构。目前,此功能仅在Linux上受支持,并且并非所有体系结构都可以识别。如果自动检测失败,则该选项无效。
-mcpu = native使编译器自动检测生成计算机的CPU。目前,此功能仅在Linux上受支持,并且并非所有体系结构都可以识别。如果自动检测失败,则该选项无效。
-mtune = native使编译器自动检测生成计算机的CPU。目前,此功能仅在Linux上受支持,并且并非所有体系结构都可以识别。如果自动检测失败,则该选项无效。
然后可以将
-Q -v
添加到GCC flags
中,以查看启用了哪些优化,并在必要时进行进一步的优化。这是在我的Raspberry Pi上使用带有示例程序的
-march=native
输出:#> gcc -march=native -Q -v test.c -o test
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.6/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Debian 4.6.3-8+rpi1' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 4.6.3 (Debian 4.6.3-8+rpi1)
COLLECT_GCC_OPTIONS='-march=native' '-Q' '-v' '-o' 'test' '-mfloat-abi=hard' '-mfpu=vfp'
/usr/lib/gcc/arm-linux-gnueabihf/4.6/cc1 -v -imultilib . -imultiarch arm-linux-gnueabihf test.c -dumpbase test.c -march=native -mfloat-abi=hard -mfpu=vfp -auxbase test -version -o /tmp/cc1rCJ4W.s
cc1: error: bad value (native) for -march switch
GNU C (Debian 4.6.3-8+rpi1) version 4.6.3 (arm-linux-gnueabihf)
compiled by GNU C version 4.6.3, GMP version 5.0.5, MPFR version 3.1.0-p10, MPC version 0.9
GGC heuristics: --param ggc-min-expand=38 --param ggc-min-heapsize=15522
ignoring nonexistent directory "/usr/local/include/arm-linux-gnueabihf"
ignoring nonexistent directory "/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../../arm-linux-gnueabihf/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/arm-linux-gnueabihf/4.6/include
/usr/local/include
/usr/lib/gcc/arm-linux-gnueabihf/4.6/include-fixed
/usr/include/arm-linux-gnueabihf
/usr/include
End of search list.
GNU C (Debian 4.6.3-8+rpi1) version 4.6.3 (arm-linux-gnueabihf)
compiled by GNU C version 4.6.3, GMP version 5.0.5, MPFR version 3.1.0-p10, MPC version 0.9
GGC heuristics: --param ggc-min-expand=38 --param ggc-min-heapsize=15522
options passed: -v -imultilib . -imultiarch arm-linux-gnueabihf test.c
-march=native -mfloat-abi=hard -mfpu=vfp
options enabled: -fauto-inc-dec -fbranch-count-reg -fcommon
-fdelete-null-pointer-checks -fdwarf2-cfi-asm -fearly-inlining
-feliminate-unused-debug-types -ffunction-cse -fgcse-lm -fident
-finline-functions-called-once -fira-share-save-slots
-fira-share-spill-slots -fivopts -fkeep-static-consts -fleading-underscore
-fmath-errno -fmerge-debug-strings -fmove-loop-invariants -fpeephole
-fprefetch-loop-arrays -freg-struct-return -fsched-critical-path-heuristic
-fsched-dep-count-heuristic -fsched-group-heuristic -fsched-interblock
-fsched-last-insn-heuristic -fsched-rank-heuristic -fsched-spec
-fsched-spec-insn-heuristic -fsched-stalled-insns-dep -fshow-column
-fsigned-zeros -fsplit-ivs-in-unroller -fstrict-volatile-bitfields
-ftrapping-math -ftree-cselim -ftree-forwprop -ftree-loop-if-convert
-ftree-loop-im -ftree-loop-ivcanon -ftree-loop-optimize
-ftree-parallelize-loops= -ftree-phiprop -ftree-pta -ftree-reassoc
-ftree-scev-cprop -ftree-slp-vectorize -ftree-vect-loop-version
-funit-at-a-time -fvar-tracking -fvar-tracking-assignments
-fzero-initialized-in-bss -mglibc -mlittle-endian -msched-prolog
Execution times (seconds)
TOTAL : 0.00 0.00 0.00 8 kB
评论
-march = native未在gcc中为ARM处理器实现。 (至少不是gasp与Raspberrian一起运送)
–不
2012年9月29日12:14
@nos:正如您在我的答案中可以看到的那样,此页面说-march = native是为ARM GCC实现的。 Raspberry Pi可能是不受支持(因此未被检测)的体系结构,在这种情况下,-march = native无效。
– Avio
2012年9月29日12:30在
我的Raspberrian上的gcc表示:$ gcc -march = native test.c cc1:错误:-march开关的错误值(本机),它在输出中表示相同。 (与-mcpu相同)
–不
2012-09-29 13:41
与我相同的版本。看一下您发布的输出,它用-v标志隐藏在所有的详细信息中。在说COLLECT_GCC_OPTIONS的行之后...
–不
2012年9月29日下午13:47
@nos:好的,此版本似乎不支持。奇怪的是,我找不到在ARM也引入了-march = native的变更日志。
– Avio
2012-09-29 13:54
评论
在Raspbian Jessie 4.4.13-v7 +上运行gcc -mcpu = native -march = native -Q --help = target给我*** gcc中的错误:双重释放或损坏(顶部):0x0020c5a8 ***`, armv7l。
–tsbertalan
16-11-27在15:42