मैं इस सवाल में अपने दो सेंट फेंकने जा रहा हूं और एलियास के उत्तर के बारे में थोड़ा और विस्तार करने का सुझाव दूंगा। 4.6 gcc के रूप में, दौड़ने 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;'
हालांकि, मैंने केवल दो अलग-अलग सीपीयू (एक इंटेल कोर 2 और एएमडी फेनोम) पर इस की शुद्धता को सत्यापित किया है, इसलिए मेरा सुझाव है कि निम्नलिखित स्क्रिप्ट को चलाने के लिए सुनिश्चित करें कि इन सभी -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
gcc 4.2 में पेश किया गया था, जिसके पहले यह सिर्फ एक गैर-मान्यता प्राप्त तर्क है।
--param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512