2009-06-03 19 views
31

मैं आपके इनपुट चाहता हूं जो ज़ीन्स के लिए अनुकूलन करते समय जीसीसी कंपाइलर झंडे का उपयोग करे?जीसीसी अनुकूलन झंडे?

mtune या मार्च में कोई 'xeon' नहीं है, जो निकटतम मैच है?

+3

आप अधिक विशिष्ट होना चाहते हैं कि आप किस ज़ीओन को लक्षित कर रहे हैं। ज़ीऑन ब्रांड काफी समय से आसपास रहा है और बहुत अलग आर्किटेक्चर की एक श्रृंखला फैलाता है। –

उत्तर

7

ज़ीऑन एक विपणन शब्द है, क्योंकि इसमें प्रोसेसर की एक लंबी सूची बहुत अलग आंतरिक है।

यदि आपका मतलब है कि नए नेहलेम प्रोसेसर (कोर i7) तो this slide इंगित करता है कि 4.3.1 जीसीसी का उपयोग किया जाना चाहिए-मार्च = जेनेरिक (हालांकि आपके स्वयं के ऐप का स्वयं का परीक्षण अन्य सेटिंग्स को ढूंढ सकता है)। यदि आप एफपी गणित के उस पहलू को अनुकूलित करना चाहते हैं तो 4.3 श्रृंखला भी शामिल है -msse4.2।

यहां some discussion इंटेल के कंपाइलर में कुछ जीसीसी झंडे बनाम ट्यूनिंग की तुलना कर रहा है। जीसीसी के

+4

चर्चा एक टूटी हुई लिंक है। वास्तव में, दोनों लिंक टूटा हुआ है। :) –

20

नए संस्करणों मार्च = देशी संकलक स्वचालित रूप से इष्टतम -march झंडा निर्धारित की सुविधा देता है जो की है।

+1

बंडल कि -mtune = मूल के साथ और आप कर रहे हैं। – ismail

+14

असल में, यदि आप स्पष्ट रूप से निर्दिष्ट नहीं करते हैं- mtune,-मार्च में जीसीसी दस्तावेज़ों के अनुसार पास-मार्च के बराबर एक अंतर्निहित -mtune है। – user83255

+0

ध्यान रखें कि -मार्क = मूल के साथ निर्मित कोड आवश्यक रूप से होस्ट किए गए होस्ट के अलावा CPUs पर नहीं चलेंगे। – bleater

3

मार्च = मूल आपकी मशीन के लिए ठीक है लेकिन बाइनरी रिलीज के लिए बुरा है।

मार्च = NOCONA परमाणु 330 (p4/64 बिट) मार्च = core2 core2

मैं तुम्हें 64 बिट जा रहे हैं यह सोचते कर रहा हूँ के लिए है के लिए सुझाव दिया है।

2

इंटेल CPUs और x86_64 के साथ मेरा अनुभव यह है कि हर बार जब मैंने एक विशिष्ट CPU प्रकार के लिए अनुकूलित करने के लिए जीसीसी को बताने की कोशिश की, तो प्रदर्शन-मार्च = जेनेरिक से बेहतर हो गया, बेहतर नहीं। वाईएमएमवी, ज़ाहिर है, लेकिन मैं वर्षों से इस तरह के सामानों के साथ खेल रहा हूं, और यह हमेशा ऐसा ही रहा है।

OTOH, i386 पर यह भावना कम से कम i686 लक्षित करने के लिए या, बना सकता है आप SSE गणित, कम से कम पेंटियम 4.

51

हाल जीसीसी/जिऑन के लिए एक अद्यतन करना चाहते हैं।

  • Sandy-Bridge-based जिऑन (E3-12xx श्रृंखला, E5-14xx/24xx श्रृंखला, E5-16xx/26xx/46xx श्रृंखला)।

    जीसीसी < 4.9.0 या जीसीसी> = 4.9.0 के लिए -march=sandybridge के लिए -march=corei7-avx

    यह Advanced Vector Extensions support के साथ-साथ एईई और PCLMUL सैंडी ब्रिज के लिए निर्देश सेट सक्षम बनाता है। यहाँ जीसीसी i386/x86_64 विकल्प पृष्ठ से अवलोकन है:

    64-बिट एक्सटेंशन, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, एईएस के साथ इंटेल कोर i7 सीपीयू और पीसीएलएमयूएल निर्देश सेट समर्थन।

  • Ivy-Bridge-based जिऑन (E3-12xx वी 2 सीरीज, E5-14xx v2/24xx वी 2 सीरीज, E5-16xx v2/26xx v2/46xx वी 2 सीरीज, E7-28xx v2/48xx v2/88xx वी 2 श्रृंखला)।

    जीसीसी < 4.9.0 या जीसीसी> = 4.9.0 के लिए -march=ivybridge के लिए -march=core-avx-i

    इसमें सैंडी ब्रिज (कोरि 7-एवीएक्स) विकल्प शामिल हैं जबकि नए आईवी निर्देश सेट के लिए समर्थन में भी काम करना है: एफएसजीएसबीएसई, RDRND और F16C। जीसीसी विकल्प पृष्ठ से:

    64-बिट एक्सटेंशन, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, एईएस, PCLMUL, FSGSBASE, RDRND और F16C6 अनुदेश के साथ

    इंटेल कोर सीपीयू समर्थन सेट करें।

  • Haswell-based जिऑन (E3-1xxx v3 सीरीज, E5-1xxx v3 सीरीज, E5-2xxx v3 सीरीज)। G12> = 4.9.0 के लिए

    -march=core-avx2 जीसीसी 4.8.2/4.8.3 या -march=haswell के लिए।

    जीसीसी विकल्प पृष्ठ से:

    64-बिट एक्सटेंशन, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2 के साथ इंटेल Haswell सीपीयू, एईएस, पीसीएलएमयूएल, एफएसजीएसबीएसई, आरडीआरएनडी, एफएमए, बीएमआई, बीएमआई 2 और एफ 16 सी निर्देश सेट समर्थन।

  • Broadwell-based जिऑन (E3-12xx v4 श्रृंखला, E5-16xx v4 श्रृंखला)

    जीसीसी 4.8.x के लिए -march=core-avx2 या जीसीसी> = 4.9.0 के लिए -march=broadwell

    जीसीसी विकल्प पृष्ठ से:

    64-बिट एक्सटेंशन, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2 के साथ इंटेल Broadwell सीपीयू, एईएस, पीसीएलएमयूएल, एफएसजीएसबीएसई, आरडीआरएनडी, एफएमए, बीएमआई, बीएमआई 2, एफ 16 सी, आरडीएसईईडी, एडीसीएक्स और प्रीफेट्वा निर्देश सेट समर्थन।

  • Skylake-based जिऑन (E3-12xx v5 श्रृंखला)

    जीसीसी 4.8.x के लिए -march=core-avx2 या जीसीसी 4.9.x के लिए -march=skylake या जीसीसी के लिए -march=skylake-avx512> = 5.x

    जीसीसी से विकल्प पृष्ठ:

    64-बिट एक्सटेंशन, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCN के साथ इंटेल Skylake सर्वर सीपीयू टी, पीकेयू, एवीएक्स, एवीएक्स 2, एईएस, पीसीएलएमयूएल, एफएसजीएसबीएसई, आरडीआरएनडी, एफएमए, बीएमआई, बीएमआई 2, एफ 16 सी, आरडीएसईईडी, एडीसीएक्स, प्रीफेट्वा, सीएलएफएलएचओपीटी, एक्सएसएवीसीसी, एक्सएसएवीईएस, एवीएक्स 512 एफ, एवीएक्स 512 वीएल, एवीएक्स 512 बीडब्ल्यू, एवीएक्स 512 डीक्यू और एवीएक्स 512 सीडी निर्देश सेट समर्थन।

पता लगाने के लिए आप क्या संकलक -march=native विकल्प के साथ करना होगा उपयोग कर सकते हैं:

gcc -march=native -Q --help=target 
3

निम्नलिखित आपके प्रोसेसर का समर्थन करता है आप सभी झंडे दिखाएगा:

cat /proc/cpuinfo | grep flags | head -1 

यह निर्धारित करने का सबसे अच्छा तरीका है कि आपके प्रोसेसर के लिए कौन से अनुकूलन मौजूद हैं, विशेष रूप से मॉडल पर निर्भर नहीं हैं, लेकिन आपके पास जीसीसी का कौन सा संस्करण है सिस्टम पर आप संकलित कर रहे हैं। अपनी दस्तावेज़ीकरण पर जीसीसी का कौन सा संस्करण आपके पास जांच सुनिश्चित करें, और पार संदर्भ बनाओ:

https://gcc.gnu.org/onlinedocs

यानी मैं स्लैकवेयर 14.1 x64, जो जीसीसी 4.8.2 है है, इसलिए मैं यहाँ जाना होगा:

https://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options

संबंधित मुद्दे