रास्पबेरी पाई पर जीसीसी के लिए कौन से सीपीयू झंडे उपयुक्त हैं?


23

gcc एक विशेष CPU प्रकार के लिए अनुकूलित कोड का उत्पादन करने के लिए -mcpu = (या -march =) झंडे लेता है। वहाँ हाथ वेरिएंट की अधिकता है, और जीसीसी शाखा लक्ष्य भी कई FPU प्रकार प्रदान करता है।

कौन सा -mcpu = / - मार्च = झंडे और -mfpu = झंडे रास्पबेरी पाई पर सी कोड संकलित करते समय उचित / मूल उपयोग करने वाले हैं?

जवाबों:


11

यह इस बात पर निर्भर करता है कि आप किन पुस्तकालयों के साथ अपने कोड को जोड़ना चाहते हैं। यदि आप रास्पियन छवियों का उपयोग कर रहे हैं, तो वास्तुकला "आर्मफ़" है और संकलन के झंडे हैं:

-march=armv6
-mfpu=vfp
-mfloat-abi=hard

यदि आप डेबियन "आर्मल" आर्च के लिए संकलन कर रहे हैं, तो संकलन झंडे अलग हैं।


10

आरपीआई एआरएम कोर एक एआरएम 1176jzf-S है, उपयुक्त झंडे तब होना चाहिए

-march=armv6zk -mcpu=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp

नरम फ्लोट डिस्ट्रो पर जब -mfloat-abi = hard -mfpu = vfp गिराएं।

ये झंडे gcc -mcpu=native -march=native -Q --help=targetgcc> = 4.7` पर चलाकर प्राप्त किए जा सकते हैं


रनिंग gcc -mcpu=native -march=native -Q --help=targetमुझे *** Error in gcc देता है ': डबल फ्री या करप्शन (टॉप): 0x0020c5a8 *** `, रास्पियन जेसी 4.4.13-v7 +, armv7l पर।
tsbertalan

8

मैंने पाया कि यह सेट सबसे इष्टतम होना चाहिए:

-march=armv6 -mfloat-abi=hard -mfpu=vfp

(-mfloat-abi = कठिन, निश्चित रूप से केवल जब आप एक आर्मफ डिस्ट्रो का उपयोग करते हैं)


3

मैं -mfpuध्वज के बारे में जवाब नहीं दे सकता , लेकिन मैं पहले ये आज़माना चाहूँगा:

-march=native
-mcpu=native
-mtune=native

जैसा कि रिपोर्ट किया गया है GCC manual page related to ARM options:

मार्च = देशी कंपाइलर का निर्माण कंप्यूटर के आर्किटेक्चर का स्वत: पता लगाने का कारण बनता है। वर्तमान में, यह सुविधा केवल लिनक्स पर समर्थित है, और सभी आर्किटेक्चर मान्यता प्राप्त नहीं हैं। यदि ऑटो-डिटेक्ट असफल है तो विकल्प का कोई प्रभाव नहीं पड़ता है।

-mcpu = देशी कंपाइलर का निर्माण कंप्यूटर के CPU का पता लगाने का कारण बनता है। वर्तमान में, यह सुविधा केवल लिनक्स पर समर्थित है, और सभी आर्किटेक्चर मान्यता प्राप्त नहीं हैं। यदि ऑटो-डिटेक्ट असफल है तो विकल्प का कोई प्रभाव नहीं पड़ता है।

-mtune = देशी कंपाइलर का निर्माण कंप्यूटर के CPU का पता लगाता है। वर्तमान में, यह सुविधा केवल लिनक्स पर समर्थित है, और सभी आर्किटेक्चर मान्यता प्राप्त नहीं हैं। यदि ऑटो-डिटेक्ट असफल है तो विकल्प का कोई प्रभाव नहीं पड़ता है।

फिर आप जोड़ सकते हैं -Q -vGCC flags देखने के लिए अपने साथ हैं कि क्या अनुकूलन सक्षम हैं और यदि आवश्यक हो तो आगे अनुकूलन के लिए आगे बढ़ें।

यह -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

1
- उमर = देशी gcc में एआरएम प्रोसेसर के लिए लागू नहीं किया गया है। (कम से कम नहीं रास्पबेरी के साथ शिपिंग नहीं)
nos

@nos : जैसा कि आप मेरे उत्तर में पढ़ सकते हैं, यह पृष्ठ कहता है कि के -march=nativeलिए लागू किया गया है ARM GCC। रास्पबेरी पाई एक असमर्थित (और इस तरह अनिर्धारित) वास्तुकला हो सकती है, उस स्थिति -march=nativeमें कोई प्रभाव नहीं पड़ता है।
Avio

2
मेरे Raspberrian पर gcc कहता है:, $ gcc -march=native test.c cc1: error: bad value (native) for -march switchयह आपके आउटपुट में समान है। (वही -mcpu के साथ भी)
nos

1
मेरे जैसे ही संस्करण। आपके द्वारा पोस्ट किए गए आउटपुट में देखें, यह -v ध्वज के साथ सभी क्रिया-कलापों में छिपा हुआ है। COLLECT_GCC_OPTIONS कहने वाली लाइन के बाद ...
nos

1
@nos : ठीक है, यह इस संस्करण में समर्थित नहीं है। अजीब बात यह है कि मैं उस चैंज को नहीं खोज सकता, जहां -march=nativeइसके लिए भी शुरुआत की गई है ARM
Avio
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.