2014-05-22 9 views
6

मैं make -jNमल्टी पिरोया

के साथ एक कर बहु-थ्रेड कर सकते हैं मैं बोल सकते हैं बहु सूत्रण भीतर Makefile बनाने के लिए इतना है कि सिर्फ कमांड लाइन से make से अधिक थ्रेड चलाता है। यहां मेरा मेकफ़ाइल है:

BIN_OBJS = $(wildcard *.bin) 
HEX_OBJS = $(subst .bin,.hex,$(BIN_OBJS)) 

all: $(HEX_OBJS) 

$(HEX_OBJS): %.hex: %.bin 
    python ../../tools/bin2h.py $< > [email protected] 
+0

सब: $ (बनाने) -j8 make2' या कुछ इस तरह है, लेकिन उम्मीद है कि एक बेहतर विकल्प – user1088084

+0

आप को दबा सकती हैं वहाँ एक छद्म-लक्ष्य के रूप में '.NOTPARALLEL:' के साथ समांतर ऑपरेशन। मुझे कमांड लाइन विकल्पों के अलावा समांतरता को बल देने के तरीके से अवगत नहीं है (देखें [जीएनयू 'मेक' मैनुअल] (http://www.gnu.org/software/make/manual/make.html#Parallel) । –

उत्तर

12

सबसे पहले, स्पष्ट होने के लिए, बहु-थ्रेडेड नहीं है। -j का उपयोग करके बस एक ही समय में (पृष्ठभूमि में, मूल रूप से) एकाधिक आदेश चलाने के लिए कहता है।

दूसरा, नहीं, मेकफ़ाइल के भीतर से कई नौकरियां सक्षम करना संभव नहीं है। आप सामान्य रूप से ऐसा नहीं करना चाहते हैं, वैसे भी, क्योंकि अन्य प्रणालियों में अलग-अलग कोर होंगे और जो भी मूल्य आप चुनते हैं वे उन सिस्टम पर अच्छी तरह से काम नहीं करेंगे।

आप एक से अधिक makefiles लिखने के लिए है, हालांकि नहीं है, तुम सिर्फ उपयोग कर सकते हैं:

BIN_OBJS = $(wildcard *.bin) 
HEX_OBJS = $(subst .bin,.hex,$(BIN_OBJS)) 

.PHONY: all multi 
multi: 
     $(MAKE) -j8 all 

all: $(HEX_OBJS) 

$(HEX_OBJS): %.hex: %.bin 
     python ../../tools/bin2h.py $< > [email protected] 
+1

'MAX_PARALLEL = 8' सेट करने के लिए समझदार हो सकता है और '-j $ {MAX_PARALLEL}' का उपयोग करें ताकि आप वांछित होने पर कमांड लाइन पर समांतरता को ओवरराइड कर सकें। –

+1

@MadScientist जो पूरी तरह से उपयुक्त है। धन्यवाद – user1088084

+0

एक ही समय में एकाधिक कमांड नहीं चला रहा है, एक ही थ्रेड चलाने के समान है? –

2

-j का उपयोग कर यदि फाइल सिस्टम से कहां से उत्पन्न हो रही है एक NFS शेयर है सावधान रहें। मैंने अजीब नतीजे देखे हैं और क्या मुझे यह बताया गया है कि एनएफएस घुड़सवार निर्देशिका अलग-अलग काम करती है (फ़ाइल लॉक इश्यू के कुछ प्रकार?)

मैंने अपनी बहु रचनाओं को एक स्क्रिप्ट से भाग लिया और सीपीयूइन्फो की जांच की ताकि यह पता लगा सके कि कितने प्रोसेसर बिल्ड बॉक्स था (कई आर्किटेक्चर के खिलाफ एक ही स्क्रिप्ट चल रहा था/मशीनों का निर्माण)

CPUCOUNT=$(grep -c "^processor" /proc/cpuinfo) 

if [ ${CPUCOUNT} -lt 1 -o ${CPUCOUNT} -gt 4 ] 
then 
    echo "Unexpected value for number of cpus, ${CPUCOUNT}, exiting ..." 
    exit 16 
fi 

echo "This machine has ${CPUCOUNT} cpus, will use make -j${CPUCOUNT} where possible" 
बस मैं कर सकता `एहसास हुआ
संबंधित मुद्दे