রাস্পবেরি পাইতে কোন সিসিইউ পতাকাগুলি জিসিসির জন্য উপযুক্ত?


23

একটি নির্দিষ্ট সিপিইউ টাইপের জন্য অনুকূলিত কোড তৈরি করতে gcc -mcpu = (বা-মার্চ =) পতাকা নেয়। আর্মের বৈকল্পিকগুলির আধিক্য রয়েছে এবং গিসি আর্ম টার্গেটে অসংখ্য এফপিইউ প্রকার সরবরাহ করা হয়।

কোন -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 = হার্ড-এমএফপু = ভিএফপি ছাড়ুন।

এই পতাকাগুলি gcc -mcpu=native -march=native -Q --help=targetgcc> = 4.7` এ চালিয়ে পাওয়া যাবে `


রানিং gcc -mcpu=native -march=native -Q --help=targetআমাকে *** Error in জিসিসি দেয় : ডাবল ফ্রি বা দুর্নীতি (শীর্ষ): 0x0020c5a8 *** `, রাস্পবিয়ান জেসি 4.4.13-ভি 7 +, আর্মভ 7 এল এ।
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 = নেটিভ কম্পাইলারটি বিল্ড কম্পিউটারের সিপিইউ স্বয়ংক্রিয়ভাবে সনাক্ত করতে পারে causes বর্তমানে, এই বৈশিষ্ট্যটি কেবল লিনাক্সেই সমর্থিত এবং সমস্ত আর্কিটেকচার স্বীকৃত নয়। যদি স্বয়ংক্রিয় সনাক্তকরণ ব্যর্থ হয় তবে বিকল্পটির কোনও প্রভাব নেই।

-mtune = নেটিভ সংকলকটি বিল্ড কম্পিউটারের সিপিইউ স্বয়ংক্রিয়ভাবে সনাক্ত করতে পারে causes বর্তমানে, এই বৈশিষ্ট্যটি কেবল লিনাক্সেই সমর্থিত এবং সমস্ত আর্কিটেকচার স্বীকৃত নয়। যদি স্বয়ংক্রিয় সনাক্তকরণ ব্যর্থ হয় তবে বিকল্পটির কোনও প্রভাব নেই।

এর পরে আপনি যোগ করতে পারেন -Q -vআপনার টু GCC 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
-মার্চ = নেটিভটি জিসিসিতে এআরএম প্রসেসরের জন্য প্রয়োগ করা হয় না। (অন্তত Raspberrian সঙ্গে শিপিং ভালো হচ্ছে gcc নয়)
টি

@ নোট : আপনি আমার উত্তরে যেমন পড়তে পারেন, এই পৃষ্ঠায় বলা হয়েছে যে -march=nativeএটি কার্যকর করা হয়েছে ARM GCC। রাস্পবেরি পাই একটি অসমর্থিত (এবং এইভাবে সনাক্ত করা হয়নি) আর্কিটেকচার হতে পারে, সে ক্ষেত্রে -march=nativeকোনও প্রভাব নেই effect
এভিও

2
আমার রাস্পবেরিয়ান এর উপর জিসিসি বলেছেন:, $ gcc -march=native test.c cc1: error: bad value (native) for -march switchএটি আপনার আউটপুটে একই কথা বলে। (-mcpu সঙ্গে একই পাশাপাশি)
টি

1
আমার হিসাবে একই সংস্করণ। আপনার পোস্ট করা আউটপুটটি দেখুন, এটি -v পতাকা সহ সমস্ত ভার্বোসনেস লুকিয়ে আছে। লাইন পর COLLECT_GCC_OPTIONS বলার অপেক্ষা রাখে না ...
আমরা

1
@ নোট : ঠিক আছে, এটি এই সংস্করণে সমর্থিত নয় বলে মনে হচ্ছে। অদ্ভুত জিনিস যে আমি পরিবর্তণের যেখানে খুঁজে পাচ্ছি না হয় -march=nativeজন্যও চালু করা হয়েছে ARM
এভিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.