मैं जीसीसी 4.3 का उपयोग कर अपने सी ++ ऐप को संकलित कर रहा हूं। ऑप्टिमाइज़ेशन झंडे मैन्युअल रूप से चुनने के बजाय मैं -march=native
का उपयोग कर रहा हूं, जो सिद्धांत में हार्डवेयर पर लागू सभी ऑप्टिमाइज़ेशन झंडे को जोड़ना चाहिए जो मैं संकलित कर रहा हूं। लेकिन मैं कैसे जांच सकता हूं कि वास्तव में इसका उपयोग किस झंडे का उपयोग कर रहा है?कैसे देखें flags -march = मूल सक्रिय होगा?
उत्तर
आप -Q --help=target
विकल्पों का उपयोग कर सकते हैं:
gcc -march=native -Q --help=target ...
-v
विकल्प भी उपयोग की जा सकती है।
आप --help
विकल्प here पर दस्तावेज़ देख सकते हैं।
कमांड लाइन झंडे देखने के लिए, का उपयोग करें:
gcc -march=native -E -v - </dev/null 2>&1 | grep cc1
आप को देखने के लिए संकलक/precompiler कुछ मापदंडों द्वारा निर्धारित परिभाषित करता है, ऐसा करते हैं चाहते हैं:
echo | gcc -dM -E - -march=native
यह उत्तर स्वीकृत एक के रूप में स्वीकृत एक के रूप में कई अपवर्तकों के हकदार है, विशेष रूप से, 'मूल' वास्तव में क्या समझाता है। –
इसलिए यदि मैं क्रॉस-नेटिव-संकलन करना चाहता हूं, तो मुझे दोनों कंपाइलर को परिभाषित और तर्क दोनों को खिलाया जाना चाहिए? या तर्क पर्याप्त है? – hanshenrik
यह होना चाहिए (-###
-v
के समान है):
echo | gcc -### -E - -march=native
"री एल "जीसीसी के लिए देशी झंडे।
आप उन्हें एक आदेश के साथ और अधिक "स्पष्ट रूप से" प्रदर्शित कर सकते हैं:
gcc -### -E - -march=native 2>&1 | sed -r '/cc1/!d;s/(")|(^.* -)//g'
और आप के साथ -mno- साथ झंडे से छुटकारा पा सकते *:
gcc -### -E - -march=native 2>&1 | sed -r '/cc1/!d;s/(")|(^.* -)|(-mno-[^\ ]+)//g'
आप जानना चाहते हैं तो बाहर सेट अप करने के लिए कैसे एक गैर मूल पार संकलन, मैं इस उपयोगी पाया:
लक्ष्य मशीन पर,
% gcc -march=native -Q --help=target | grep march
-march= core-avx-i
फिर निर्माण मशीन पर इस का उपयोग करें:
% gcc -march=core-avx-i ...
दुर्भाग्य से सभी झंडे शामिल नहीं होंगे। –
@BaptisteWicht वहाँ झंडे हैं कि-मार्च = मूल में शामिल होगा- मार्च = कोर-एवीएक्स- मैं, इस मामले में, या कौन सा झंडे नहीं? धन्यवाद! – rogerdpack
@rogerdpack इस कंप्यूटर (रेतीलेब्रिज) पर, मार्च = sandybridge AVX को सक्षम नहीं करता है (क्यों नहीं पता) मार्च = मूल करता है। एक और महत्वपूर्ण अंतर यह है कि कैश आकार केवल मार्च = मूल –
मैं एलियास के जवाब के लिए थोड़ी ज्यादा वर्बोज़ विस्तार का सुझाव इस सवाल में मेरी दो सेंट फेंक करने जा रहा हूँ और। जीसीसी 4.6 के अनुसार, gcc -march=native -v -E - < /dev/null
चलने से अनावश्यक -mno-*
झंडे के रूप में स्पैम की बढ़ती मात्रा निकलती है। निम्नलिखित इन हटेगा:
gcc -march=native -v -E - < /dev/null 2>&1 | grep cc1 | perl -pe 's/ -mno-\S+//g; s/^.* - //g;'
हालांकि, मैं केवल दो अलग अलग सीपीयू (एक Core2 इंटेल और AMD Phenom) पर इस की सत्यता की पुष्टि कर ली है, तो मैं भी निम्न स्क्रिप्ट चलाने की सलाह देते सुनिश्चित करने के लिए सभी को है कि इन -mno-*
झंडे सुरक्षित रूप से छीन लिया जा सकता है।
#!/bin/bash
gcc_cmd="gcc"
# Optionally supply path to gcc as first argument
if (($#)); then
gcc_cmd="$1"
fi
with_mno=$(
"${gcc_cmd}" -march=native -mtune=native -v -E - < /dev/null 2>&1 |
grep cc1 |
perl -pe 's/^.* - //g;'
)
without_mno=$(echo "${with_mno}" | perl -pe 's/ -mno-\S+//g;')
"${gcc_cmd}" ${with_mno} -dM -E - </dev/null> /tmp/gcctest.a.$$
"${gcc_cmd}" ${without_mno} -dM -E - </dev/null> /tmp/gcctest.b.$$
if diff -u /tmp/gcctest.{a,b}.$$; then
echo "Safe to strip -mno-* options."
else
echo
echo "WARNING! Some -mno-* options are needed!"
exit 1
fi
rm /tmp/gcctest.{a,b}.$$
मैं gcc -march=native -v -E - < /dev/null
और gcc -march=native -### -E - < /dev/null
कुछ मानकों उद्धृत किया जा रहा के अलावा अन्य के बीच एक अंतर नहीं मिला है - और पैरामीटर है कि कोई विशेष वर्ण, तो मैं किन परिस्थितियों इस किसी भी असली फर्क नहीं पड़ता तहत यकीन नहीं है।
अंत में, ध्यान दें कि --march=native
जीसीसी 4.2 में पेश किया गया था, इससे पहले कि यह केवल एक अपरिचित तर्क है।
अच्छा, इस gleans कैश के रूप में अच्छी तरह से आकार – rogerdpack
जीसीसी संस्करण 5.4.0 (Buildroot 2017.05-rc2-00016-gc7eaf50-गंदा) रिटर्न है? यह हो सकता है कि "मूल" केवल कुछ आर्किटेक्चर पर समर्थित है। –
ओलेग: क्या मेहराब आप उपयोग कर रहे –
- 1. MYSQL अस्थायी सारणी - सक्रिय लोगों को कैसे देखें
- 2. .NET: सक्रिय निर्देशिका में उपयोगकर्ता को कैसे देखें?
- 3. कंटेनर देखें नियंत्रक - सूचित कार्रवाई की मूल
- 4. किसी दिए गए कंप्यूटर पर सक्रिय दूरस्थ डेस्कटॉप कनेक्शन देखें
- 5. क्यों pthread_create() केवल 2 धागे सक्रिय के साथ विफल होगा?
- 6. कैसे देखें
- 7. देखें
- 8. देखें
- 9. देखें
- 10. देखें
- 11. Activity.addContentView (देखें) == ViewGroup.addContentView (देखें)?
- 12. पैकेज इतिहास कैसे देखें?
- 13. कैसे कस्टम देखें
- 14. सार्वजनिक डेटासेट कैसे देखें?
- 15. कैसे स्वनिर्धारित देखें
- 16. देखें
- 17. कैमरा सतह देखें छवियां देखें
- 18. सक्रिय
- 19. गिट में फ़ाइल कैसे देखें?
- 20. केंद्र नीचे देखें अन्य देखें
- 21. फ़ाइल को सिम्लिंक करने के बाद, मुझे रूबी में मूल फ़ाइल का मार्ग कैसे प्राप्त होगा?
- 22. फीडपार्सर-मूल बातें कैसे
- 23. देखें
- 24. देखें
- 25. सक्रिय जावास्क्रिप्ट टाइमआउट कैसे गिनें?
- 26. नकली सक्रिय निर्देशिका कैसे करें?
- 27. जब कोई बच्चा फॉर्म सक्रिय होता है तो मूल रूप से अक्षम कैसे करें?
- 28. सक्रिय निर्देशिका
- 29. जीसीसी कैसे बनाने के लिए डिफ़ॉल्ट = देशी मूल रूप से उपयोग करता है?
- 30. कोड :: ब्लॉक में डिस्सेप्लर को कैसे देखें?
मैं सुझाव देना चाहता हूं कि यह उप-शीर्ष है। --help = target का आउटपुट CPU कैश जानकारी प्रदर्शित नहीं करता है, जिसमें से नीचे दिए गए एलियास और 42n4 दोनों विधियां सूचीबद्ध हैं। विशेष रूप से, एक फेनोम पर जीसीसी 4.9.2 पर, आउटपुट में इन्हें शामिल किया गया है: '--param l1-cache-size = 64 --param l1-cache-line-size = 64 --param l2-cache-size = 512 ' –
@DanielSantos: मेरे सिस्टम पर यह 'cc1' कमांड लाइन के हिस्से के बावजूद' -v' विकल्प के साथ उन पैरामीटर को प्रदर्शित करता है ... – thkala
सही नहीं है। जीसीसी संस्करण 5.4.0 (Buildroot 2017.05-rc2-00016-gc7eaf50-dirty) पर यह बदले में त्रुटि का कारण बन जाएगा: असेंबलर संदेश: त्रुटि: अज्ञात आर्किटेक्चर मूल त्रुटि: अपरिचित विकल्प -मार्क = मूल। तो, '-march = native' को हटाएं और यह हर जगह काम करेगा:' gcc -Q --help = target'। –