2010-03-02 14 views
19

आदमी पृष्ठों से:मेक "-j" विकल्प वास्तव में कैसे काम करता है?

-j [नौकरियों], --jobs [= नौकरियों] नौकरियों (आज्ञा) की संख्या निर्दिष्ट एक साथ चलाने के लिए। यदि एक से अधिक विकल्प हैं, अंतिम एक प्रभावी है। यदि -0 विकल्प तर्क के बिना दिया गया है, तो नौकरियों की संख्या को सीमित नहीं करेगा जो एक साथ चल सकता है।

मुझे पता है कि यह ग्राफ़ निर्भरता का उपयोग करता है यह जानने के लिए कि कौन से नियम स्वतंत्र हैं।

मैं जानना चाहता हूं कि यह ग्राफ कैसे बनाया गया है और समझ में आता है कि मानदंड क्या हैं।

धन्यवाद।

उत्तर

21

निर्भरता ग्राफ प्रत्येक मेकफ़ाइल लक्ष्य के लिए सूचीबद्ध पूर्वापेक्षाएँ पर आधारित है, जैसा कि अपेक्षा करता है। make एक ग्राफ तैयार करेगा जहां लक्ष्य और पूर्वापेक्षाएँ शिखर हैं और प्रीरेक्स से उनके लक्ष्य तक निर्देशित किनारा है। इस तरह आने वाले किनारों की संख्या आपको बताती है कि लक्ष्य के कितने prereqs है। यदि इसमें कोई आने वाली किनार नहीं है, तो इसकी कोई आवश्यकता नहीं है।

.c और .h फ़ाइलों के लिए शीर्ष, उदाहरण के लिए, कोई आवक किनार नहीं होगा। वे फ़ाइलें आपकी स्रोत फाइलें हैं और उन्हें बनाने की आवश्यकता नहीं है।

यह निष्पादन के आदेश को निर्धारित करने के लिए ग्राफ़ पर topological sort निष्पादित करता है। विकिपीडिया से:

टोपोलॉजिकल सॉर्टिंग (टोपोलॉजिकल ऑर्डर) का कैननिकल एप्लिकेशन नौकरियों या कार्यों के अनुक्रम को शेड्यूल करने में है; टोपोलॉजिकल सॉर्टिंग एल्गोरिदम का पहली बार परियोजना प्रबंधन (जेनागिन 1 9 60) में शेड्यूलिंग के लिए पीआरटी तकनीक के संदर्भ में 1 9 60 के दशक में अध्ययन किया गया था। नौकरी को शिखर से दर्शाया जाता है, और एक्स से वाई तक बढ़त होती है यदि नौकरी एक्स शुरू होने से पहले जॉब एक्स पूरा किया जाना चाहिए (उदाहरण के लिए, कपड़े धोते समय कपड़े धोने की मशीन को खत्म करने से पहले कपड़े धोना चाहिए)। फिर, एक स्थलीय प्रकार एक आदेश देता है जिसमें नौकरियां करने के लिए।

एक सांस्थितिकीय तरह का सार नहीं भेजे किनारों (कोई निर्भरता) के साथ कोने खोजने के लिए और उन पहले डाल करने के लिए है। फिर उन्हें ग्राफ से हटा दें। अब आपके पास आने वाले किनारों (कोई निर्भरता नहीं) वाले चरम का एक नया सेट होगा। वे अगले हैं। और इतने पर समाप्त होने तक।(यदि आप कभी ऐसे बिंदु तक नहीं पहुंचते हैं जब ऐसे कोई शिखर नहीं होते हैं तो निर्भरता ग्राफ में एक चक्र होता है, जो एक त्रुटि स्थिति है।)

एक सामान्य मेकफ़ाइल में इसका मतलब है कि आप पहले स्रोत फ़ाइलों का निर्माण करेंगे (कुछ भी करने की आवश्यकता नहीं है सामाप्त करो)। फिर ऑब्जेक्ट फ़ाइलें जो उन स्रोत फ़ाइलों पर निर्भर करती हैं। फिर उन ऑब्जेक्ट फ़ाइलों से निर्मित पुस्तकालयों और निष्पादन योग्य।

सामान्य गैर-समांतर ऑपरेशन make के तहत प्रत्येक पुनरावृत्ति को केवल एक ही लक्ष्य चुनने और इसे बनाने के लिए चुना जाएगा। जब यह समानांतर होता है तो यह कई निर्भरता-कम लक्ष्य को पकड़ लेगा और इसे समानांतर में बनाएगा, अनुमत एक साथ नौकरियों की संख्या तक।

तो जब make ऑब्जेक्ट फ़ाइल चरण में कहता है, तो इसमें ग्राफ में बड़ी संख्या में शिखर होंगे जिनके पास सभी आने वाले किनारों नहीं हैं। यह जानता है कि यह ऑब्जेक्ट फ़ाइलों को समानांतर में बना सकता है और इसलिए यह n ऑब्जेक्ट फ़ाइलों को बनाने के लिए gcc की प्रतियां बंद कर देता है।

3

मुझे संदेह है कि आप वास्तव में यहां से कहीं अधिक जादुई होने की उम्मीद कर रहे हैं। मेकफ़ाइल में लाइनें हैं:

target: prereq1 prereq2 prereq3 ... 

यह सिस्टम में फ़ाइलों के बीच संबंध परिभाषित करता है; ग्राफ़ पैरालांस में, लाइन पर प्रत्येक श्वेत-स्थान से अलग शब्द स्पष्ट रूप से ग्राफ में नोड घोषित करता है, और एक निर्देशित किनारा कोलन के बाईं ओर प्रत्येक नोड्स और कोलन के दाईं ओर प्रत्येक नोड्स के बीच बनाया जाता है , बाद वाले से पूर्व में इशारा करते हुए।

वहां से ग्राफ को ट्रैवर्स करने का एक साधारण मामला है जिसमें नोड्स नहीं हैं जिनमें आने वाले किनारों और उन नोड्स से जुड़े आदेशों को निष्पादित करने के लिए, फिर वहां से 'ग्राफ' को वापस काम करना है।

आशा है कि मदद करता है।

+0

समांतरता वास्तव में कैसे किया जाता है? मुझे लगता है कि यह 'openmpi' नहीं है .... – kilojoules

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