उबंटू ऐप्स के संकलन को कैसे तेज करें (मेक, सेमीक, जीसीसी)


11

मैं यहां कुछ कार्यक्रम संकलित कर रहा हूं और मेरे पास 4 कोर हैं। वहाँ बताने के लिए एक तरीका है make, cmakeया gccसभी कोर या उस प्रभावित करने के लिए कुछ का उपयोग कर संकलन करने के लिए?

जवाबों:


13

यदि कोई पैकेज इसका समर्थन करता है, तो आप -jध्वज का उपयोग समानांतर नौकरियों को चलाने के लिए कर सकते हैं , जैसे:

make -j8

इस ध्वज के बारे में अधिक जानकारी स्टैकेवरफ्लो प्रश्न में पाई जा सकती है कि जब यह उपलब्ध कोर की संख्या से बड़ी संख्या में पारित हो जाता है तो मेक-जे बेहतर प्रदर्शन क्यों करता है?

वितरित संकलन

यदि आपके पास कई मशीनें हैं, तो डिस्टेक को जाएं। शामिल मशीनों पर, sudo apt-get install distcc। यह मानते हुए कि आपकी निर्माण मशीन 192.168.1.1 है:

  • सहायक मशीनों पर, भागो:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • बिल्ड मशीन पर, चलाने से पहले configureया cmakeआपको मेजबानों को निर्दिष्ट करना होगा जिसे आप निर्माण प्रक्रिया के लिए उपयोग करना चाहते हैं। वैकल्पिक रूप से, स्लैश के बाद एक साथ नौकरियों की संख्या निर्दिष्ट करें (4 के लिए डिफ़ॉल्ट):

    export DISTCC_HOSTS='localhost/4 192.168.1.2/8 192.168.1.3/8'
    

    कंपाइलर का उपयोग डिस्टेक करें:

    export PATH="/usr/lib/distcc:$PATH"
    

    अब configureया cmakeआवेदन और के साथ निर्माण:

    make -j$(distcc -j)
    

    ध्यान दें कि यदि आपने /usr/lib/distccदो बार अपने पैट में डाल दिया है , तो यह विफल हो जाएगा। /usr/lib/distccअपने में केवल एक बार सेट करना सुनिश्चित करें PATH

अधिक जानकारी के लिए, distcc (1) और distccd (1) के लिए मैनुअल पेज देखें ।


OMG कि J अच्छा है। मैं 15 मिनट से भी कम समय तक चला गया। धन्यवाद एल।
लुइस अल्वारादो

यह distcc के साथ तेज़ हो सकता है, PHP का संकलन 2 मिनट में किया गया था, कर्नेल 3 मिनट (तीन i5 मशीनों) में किया गया था
Lekensteyn

जब मैं काम करने के लिए distcc के साथ कोशिश करूँगा। कल इस बारे में ऐसा ही सवाल कर रहा था। शायद आप इसके साथ यहाँ मदद कर सकते हैं: askubuntu.com/questions/106810/…
लुइस अल्वारादो

डिस्टेंक को रूट के रूप में चलाना एक बुरी योजना की तरह लगता है। मैंने कुछ कारणों से इसका उपयोग नहीं किया है, लेकिन जब मैंने किया तो मैं रूट का उपयोग नहीं कर सकता था क्योंकि मेरे पास उन मशीनों की अनुमति नहीं थी।
एम्स

@ जाम आपको इसे रूट के रूप में चलाने की आवश्यकता नहीं है। यदि आप इसे रूट के रूप में चलाते हैं और उपयोगकर्ताओं को स्विच करना चाहते हैं, तो उपयोग करें distccd --user nobody। अन्यथा, यह उस उपयोगकर्ता के अधीन चलेगा जिसने इसे निष्पादित किया है।
लेकेन्स्टाइन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.