2009-01-05 10 views
139

त्वरित प्रश्न: बड़ी परियोजनाओं को संकलित करने के लिए g ++ को कई उदाहरणों को तेज करने के लिए संकलक ध्वज क्या है (उदाहरण के लिए एक बहु-कोर CPU के लिए एक समय में 4 स्रोत फ़ाइलें)?एकाधिक कोर का उपयोग कर g ++ के साथ संकलन

बहुत धन्यवाद।

+0

क्या यह वास्तव में मदद करेगा? सीपीयू बाध्य की बजाय मेरी सभी संकलन नौकरियां I/O बाध्य हैं I –

+4

भले ही वे I/O बाध्य हैं, फिर भी यदि आप CPU भारी बिट्स हो रहे हैं तो संभवतः I/O लोड अधिक हो सकता है (केवल एक g ++ उदाहरण के साथ lulls होगा) और संभवतः I/O क्षमताएं प्राप्त करें यदि शेड्यूलर के पास अधिक विकल्प है डिस्क से आगे क्या पढ़ना है इसके बारे में। मेरा अनुभव यह रहा है कि 'मेक-जे' का न्यायसंगत उपयोग लगभग हमेशा कुछ सुधारों में होता है। – Flexo

+1

@BrianKnoblauch लेकिन मेरी मशीन (असली या वर्चुअलबॉक्स में) पर, यह सीपीयू बाध्य है, मैंने पाया कि संकलन करते समय सीपीयू 'टॉप' कमांड के माध्यम से व्यस्त है। –

उत्तर

199

आप इसे बनाने के साथ कर सकते हैं - gnu के साथ यह -j ध्वज है (यह एक यूनिप्रोसेसर मशीन पर भी मदद करेगा)।

उदाहरण के लिए यदि आप मेकअप से 4 समानांतर नौकरियों हैं:

make -j 4 

तुम भी

gcc -pipe 

हो जाएगा ताकि पाइपलाइन संकलन चरणों के साथ एक पाइप में जीसीसी चला सकते हैं, जो भी मदद मिलेगी रखना कोर व्यस्त

यदि आपके पास अतिरिक्त मशीनें भी उपलब्ध हैं, तो आप distcc देख सकते हैं, जो खेत उन लोगों के साथ भी संकलित करेगा।

+30

आप हैं- जे संख्या आपके पास कोर की संख्या 1.5x होनी चाहिए। –

+0

हां, ऐसा कुछ समझ में आता है I/O भी है - यद्यपि उपयोग करने पर कुछ ट्यूनिंग की आवश्यकता हो सकती है-साथ ही – frankodwyer

+1

धन्यवाद। मैं CFLAGS/CPPFLAGS/CXXFLAGS के माध्यम से जीसीसी को "-j #" पास करने का प्रयास करता रहा। मैं पूरी तरह से भूल गया था कि "-j #" जीएनयू बनाने के लिए एक पैरामीटर था (और जीसीसी के लिए नहीं)। – chriv

7

make यह आपके लिए करेगा। मैन पेज में -j और -l स्विच की जांच करें। मुझे नहीं लगता कि g++ समांतर है।

+0

जो संकलन त्रुटियों की लंबी सूची को समझा सकता है ... –

2

मुझे g ++ के बारे में निश्चित नहीं है, लेकिन यदि आप जीएनयू का उपयोग कर रहे हैं तो "मेक-जे एन" (जहां एन थ्रेड बनाने की संख्या बना सकती है) उसी पर मल्टीपल जी ++ नौकरियां चलाने की अनुमति देगी समय (जब तक फाइलें एक-दूसरे पर निर्भर नहीं होतीं)।

+2

कोई एन धागे की संख्या नहीं है! बहुत से लोग इसे गलत समझते हैं, लेकिन '-j एन' बताता है कि एक बार में कितनी प्रक्रियाएं पैदा की जानी चाहिए, धागे नहीं। यही कारण है कि यह एमएस 'सीएल-एमटी '(वास्तव में बहुप्रचारित) के रूप में प्रदर्शन करने वाला नहीं है। – Sebi2020

36

ऐसा कोई ध्वज नहीं है, और प्रत्येक उपकरण को केवल एक समारोह करने और इसे अच्छी तरह से करने के यूनिक्स दर्शन के खिलाफ एक रन चलता है। स्पॉन्गिंग कंपाइलर प्रक्रियाएं अवधारणात्मक रूप से निर्माण प्रणाली का काम है। क्या आप शायद के लिए देख रहे जीएनयू करने के लिए -j (नौकरियों) झंडा बनाने के लिए, एक ला

make -j4

है या आप उपयोग कर सकते हैं pmake या इसी तरह के समानांतर प्रणाली बनाते हैं।

+0

http://www.gnu.org/software/make/manual/html_node/Parallel.html भी http://www.gnu.org/software/make/manual/html_node/Options-Summary.html#Options -समरी –

+2

_ "यूनिक्स पैडेंट्री सहायक नहीं है" _ अच्छी बात यह है कि यह पैडेंट्री नहीं था, अज्ञात संपादक। पीछे लेना। समीक्षाकर्ता कृपया जो भी कर रहे हैं उस पर अधिक ध्यान दें। –

11

लोगों ने make का उल्लेख किया है लेकिन bjam भी इसी तरह की अवधारणा का समर्थन करता है। bjam -jx का उपयोग x समवर्ती आदेशों तक बनाने के लिए bjam को निर्देशित करता है।

हम विंडोज और लिनक्स पर एक ही निर्माण स्क्रिप्ट का उपयोग करते हैं और इस विकल्प का उपयोग करके दोनों प्लेटफार्मों पर हमारे निर्माण के समय को रोकते हैं। अच्छा लगा।

5

distcc का उपयोग न केवल मौजूदा मशीन पर संकलन वितरित करने के लिए किया जा सकता है, बल्कि एक खेत में अन्य मशीनों पर भी जो कि distcc स्थापित है।

+0

+1, distcc बड़े निर्माण के लिए किसी के शस्त्रागार में एक उपयोगी उपकरण है। – Flexo

+0

ऐसा लगता है कि कुछ ऐसे हैं जो "जैसे" distcc काम करते हैं: http://stackoverflow.com/questions/5374106/distributed-make/13770116#13770116 – rogerdpack

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