2014-05-22 12 views
6

tôi có thể multi-thread một make với make -jNMulti-ren làm

Tôi có thể sai khiến đa luồng trong Makefile để chỉ make từ dòng lệnh chạy nhiều luồng. Đây là makefile của tôi:

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

Chỉ cần nhận ra rằng tôi có thể làm 'tất cả: $ (MAKE) -j8 make2' hoặc một cái gì đó như thế này, nhưng hy vọng có một lựa chọn tốt hơn – user1088084

+0

Bạn có thể ngăn chặn hoạt động song song với '.NOTPARALLEL:' như là một mục tiêu giả. Tôi không biết cách nào để ép buộc tính song song khác với các tùy chọn dòng lệnh (xem [hướng dẫn sử dụng GNU 'make'] (http://www.gnu.org/software/make/manual/make.html#Parallel)) . –

Trả lời

12

Đầu tiên, phải rõ ràng, thực hiện không phải là đa luồng. Sử dụng -j chỉ yêu cầu thực hiện để chạy nhiều lệnh cùng một lúc (trong nền, về cơ bản).

Thứ hai, không, không thể bật nhiều công việc từ bên trong makefile. Bạn không muốn làm điều đó, nói chung, anyway bởi vì các hệ thống khác sẽ có số lượng lõi khác nhau và bất cứ giá trị nào bạn chọn sẽ không hoạt động tốt trên các hệ thống đó.

Bạn không cần phải viết nhiều makefiles, tuy nhiên, bạn chỉ có thể sử dụng:

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

Có thể là hợp lý để đặt 'MAX_PARALLEL = 8' và sử dụng' -j $ {MAX_PARALLEL} 'để bạn có thể ghi đè phép song song trên dòng lệnh khi muốn. –

+1

@MadScientist hoàn toàn phù hợp. Cảm ơn – user1088084

+0

không chạy nhiều lệnh cùng một lúc, giống như chạy nhiều luồng? –

2

Hãy cẩn thận sử dụng -j nếu hệ thống tập tin nơi làm đang xảy ra là một phần nfs. Tôi đã thấy kết quả kỳ lạ và đã có nó đề cập với tôi rằng các thư mục nfs gắn hoạt động khác nhau (một số loại vấn đề khóa tập tin?)

Tôi chạy đa của tôi làm từ một kịch bản và kiểm tra cpuinfo để tìm hiểu có bao nhiêu bộ vi xử lý việc xây dựng hộp có (đang chạy cùng một kịch bản chống lại nhiều kiến ​​trúc/xây dựng máy)

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" 
Các vấn đề liên quan