2009-10-07 22 views
15

पर (समानांतर नौकरियां) बनाएं जीएनयू के लिए कौन सी सेटअप काम करती है विंडोज पर समांतर नौकरियां (-जे) बनाती है?विंडोज

मैंने मिनीजीडब्ल्यू 3.81 का उपयोग करके cmd.exe को खोल सेट करने का प्रयास किया है, यह एकाधिक प्रक्रियाओं को बनाने में काम करता है लेकिन "नौकरी की प्रतीक्षा" संदेश में विफल रहता है।

क्या यह काम और सबसे अच्छा सेटअप क्या हो सकता है? (मिनजीडब्लू/साइगविन/???) क्या कोई मुझे परीक्षण करने के लिए एक काम करने वाले उदाहरण के लिए इंगित कर सकता है?

उत्तर

2

मुझे साइगविन के तहत make -jn का उपयोग करके कभी भी कोई संकेत नहीं मिला है। यह बल्कि अच्छी तरह से काम करता है। मैं नियमित रूप से माइक्रोसॉफ्ट के cl.exe कंपाइलर के साथ इसका उपयोग करता हूं। यह सिर्फ मेरे लिए बॉक्स से बाहर काम करता है। बहुत यूनिक्स की तरह, जो एक अच्छी बात ™ है। लिनक्स और मैक के लिए स्क्रिप्ट पोर्ट अच्छी तरह से बनाएं। अच्छी तरह से अनुशंसित।

कभी भी मिनीजीडब्ल्यू पसंद नहीं आया क्योंकि मुझे ऐसी जगह मिली जहां 5 बैक-स्लैश बहुत कम थे, फिर भी छह बहुत अधिक थे। आह! (AFGK बनाने में स्वीकार्य बैकस्लैश अलग पथ नाम बनाने के लिए MinGW हैक्स के साथ करने के लिए।)

+0

आपका अधिकार। जैसा कि आप वर्णन करते हैं, मैंने इसे काम करने के लिए प्राप्त किया - मुझे बस एक उचित बिंदु खोजने के लिए एक भयानक मेकफ़ाइल को उलझाना पड़ा - कॉल करना (कॉल करना कॉल करना ...)। – Oliver

+0

यदि आप एक साइगविन/मिनजीडब्लू खोल का उपयोग कर रहे हैं: 'shell' system variable को 'cmd'' पर सेट करना न भूलें (अन्यथा sh या sh.exe डिफ़ॉल्ट रूप से उपयोग किया जाएगा (उदाहरण के लिए साइगविन पर ...) और आपने जीता बहु-प्रक्रिया निष्पादन का समर्थन करने में सक्षम नहीं होगा)। बस 'SHELL = सीएमडी' निर्यात करें। आसान। –

+0

@ कराको नोयू, कृपया _don't_ ऐसा करें। 'sh' बस काम करता है। यह क्रॉस-प्लेटफार्म है। इसमें कोई समांतरता समस्या नहीं है। (_cygwin_ पर भी- _mingw_ के लिए vouch नहीं कर सकते हैं।) 'cmd' बस भयानक है। – bobbogo

3

जहां तक ​​मैं समझ सकता हूं, जीएनयू मेक समानांतर नौकरियां (सीपीयू) लोड जानकारी की आपूर्ति के लिए अंतर्निहित प्लेटफ़ॉर्म पर निर्भर करती हैं। यह दुर्भाग्यवश गैर-विंडोज-संगत तरीके से किया जाता है, और केवल "मेक-जे" कमांड स्केलिंग की तरह कुछ भी करता है। वह आदेश (नौकरियों की अधिकतम संख्या के बिना) संभावित रूप से काफी खतरनाक है, क्योंकि यह एक कठोर भूखे कुत्ते की तरह स्मृति खाएगा (मैंने इसे क्यूटी पर कोशिश की, और यह QtWebkit, क्यूटी में सबसे बड़ी परियोजना, 4 जीबी रैम, विन 7) पर दुर्घटनाग्रस्त हो गया।

दूसरे विचार पर, मुझे लगता है कि मुझे लगता है कि -33 बनाने से तेज़ी से चलता है, लेकिन वेब (फ़ोरम, मैन्युअल ...) पर मुझे जो कुछ मिल सकता है, उसके प्रकाश में यह बहुत पॉज़िक्स/लिनक्स विशिष्ट कार्यक्षमता प्रतीत होता है।

बीटीडब्ल्यू, मुझे आश्चर्य है कि आपका प्रश्न वोट दिया गया था।

3

मुझे this Danny Thorpe's blog entry मिला जो विंडोज पर समानांतर बनाने के साथ समस्याओं को समझाता है। मूल रूप से क्या यह पता चलता है पहले निम्नलिखित वातावरण चर सेट करने के लिए है:

set SHELL=cmd.exe 
इसी के साथ

, मैं दुर्भाग्य से नहीं नियंत्रित make -jN शैली कमांड make -j शैली कमांड चलाने के लिए सक्षम था, लेकिन।

3

मैंने इस समस्या का समाधान किया है इसलिए मैं सभी को समाधान साझा करता हूं।

आप मिनजीडब्ल्यू-टीडीएम (होम पेज: http://tdm-gcc.tdragon.net/) या मिनजीडब्ल्यू-समीकरण (पृष्ठ डाउनलोड करें: http://www.equation.com/servlet/equation.cmd?fa=fortran) का प्रयास कर सकते हैं।

उदाहरण के लिए D:\MinGW\MinGW32 लिए 32 बिट संस्करण स्थापित करें (और 64 बिट संस्करण डी: \ MinGW \ MinGW64 आप 64 बिट्स संकलन बाइनरी उपयोग करना चाहते हैं)

उसके बाद निम्न अपने निर्माण पर इसे चलाने के रूप में एक बैच फ़ाइल बनाएं निर्देशिका:

Set MinGW_bin=D:\MinGW\MinGW32\bin 
Set MSys_bin=D:\MinGW\msys\bin 
Set Path=%MSys_bin%;%MinGW_bin% 
mingw32-make SHELL=CMD.exe -j6 -f makefile 

आप http://sourceforge.net/apps/trac/mingw-w64/wiki/MSYS से एमएसवाईएस डाउनलोड कर सकते हैं। इसमें कई यूनिक्स जैसे यूटिलिटी हैं जिन्हें कई ओपन सोर्स लाइब्रेरी, एप्लिकेशन बनाने की आवश्यकता है।

जहां -j6 6 समांतर संकलन नौकरियों को चलाने का विकल्प है।

टीआईपी: आप विकल्प -जेएन सेट कर सकते हैं जहां एन = आपके द्वारा CPU कोर (थ्रेड) की संख्या 1.5 से अधिक हो। मेरे मामले में, मेरे सीपीयू में 4 धागे हैं इसलिए मैंने यह मान 6 पर सेट किया है।

नोट: यदि आप चला सकते हैं

make.exe -jN -f makefile

SHELL=CMD.exe विकल्प के बिना और अपने संकलन समानांतर चलाया जाता है लेकिन यह कुछ मामले में संगत नहीं है (जहां make.exe एमएसवाईएस निर्देशिका से आया है)।

सादर,

+0

सामान्य मिनीजीडब्लू दिखाई देता है, न केवल टीडीएम, और यह काम करता है, आखिरकार एक काम करने वाला समानांतर बनाता है जो 100% सीपीयू एलओएल – rogerdpack

3

एक टिप मदद कर सकता है कि CMake उपयोगकर्ताओं

-jN विकल्प काम नहीं करता एक makefile कॉल रिकर्सिवली जब के रूप में cmake-makefiles आम तौर पर करते हैं। लेकिन एक ऐसा उपाय है जो फिर से काम करता है क्योंकि जेनरेट किए गए मेकफ़ाइल में सीएमके इस तरह के सिंटैक्स के माध्यम से कॉल करता है।

$(MAKE) -f CMakeFiles\Makefile2 <subproject> 

इसका मतलब है आप चर कर संशोधित कर सकते हैं:

mingw32-make "MAKE=mingw32-make -j3" 

अब हर बार एक subproject-मेकअप शुरू कर दिया है, यह फिर से "-j3" विकल्प हो जाता है। लेकिन ध्यान दें कि यह प्रभावी रूप से समांतर संकलनों की संख्या को 3 तक सीमित नहीं करता है जैसा कि आप उम्मीद कर सकते हैं। यदि आपके पास 3 से अधिक परियोजनाएं हैं जो एक ही पदानुक्रम पर एक दूसरे पर निर्भर नहीं हैं तो सभी 3 परियोजनाएं समानांतर निर्माण करेंगी और उनमें से प्रत्येक ने 3 संकलन चरणों को लॉन्च किया है। 9 समांतर संकलन चरणों में परिणाम।

जब हम सेमीकेक द्वारा उत्पन्न मेकफ़ाइल शीर्ष पर एक और नज़दीकी नज़र डालते हैं तो हम देखते हैं कि लक्ष्य "सभी" अनिवार्य रूप से केवल उप-निर्माण शुरू करता है।

$(MAKE) -f CMakeFiles\Makefile2 all 

तो हम

mingw32-make "MAKE=mingw32-make -j3" -f CMakeFiles\Makefile2 all 

फोन करके subproject समानांतरवाद में से एक परत को हटा सकते हैं लेकिन इस प्रगति रिपोर्टिंग बलिदान।

मुझे उम्मीद है कि यह फिर भी मदद करता है।

+0

का उपयोग करके लटका नहीं करता है, यह कामकाज के रूप में बहुत अच्छी तरह से काम करता है, धन्यवाद! मुझे यकीन है कि यह केवल cmake उपयोगकर्ताओं के लिए उपयोगी नहीं है :-) - रिकर्सिव मेक असामान्य नहीं है। –

+0

उर्क! यह एक बड़े रिकर्सिव मेक सिस्टम में करने के लिए _bad_ चीज़ की तरह लगता है। _Every_ _make_ आमंत्रण 3 नौकरियां चला रहा है ('-j3' के लिए)।यह आसानी से कुल मिलाकर एक साथ कई नौकरियों के लिए चला सकता है! ध्यान दें कि उचित समांतर बनाने के लिए सभी _make_ उदाहरणों को सभी मामलों में अधिकतम 3 नौकरियां (इस मामले में) को बनाए रखने के लिए एक-दूसरे से बात करने की आवश्यकता होती है। चतुर। – bobbogo