并行化外部 Makefile
Posted
技术标签:
【中文标题】并行化外部 Makefile【英文标题】:parallelize external Makefile 【发布时间】:2012-09-20 10:04:39 【问题描述】:我有这个 Makefile
framework:
@$(MAKE) -C $(HIGGSBASESELECTOR)
@$(MAKE) -C $(MATRIX4)
@$(MAKE) -C $(SUBSELECTOR)
@$(MAKE) -C $(MCSUBSELECTOR)
@$(MAKE) -C $(MATRIXSUBSELECTOR)
@$(MAKE) -C $(CHECKSUBSELECTOR)
...
如果我跑
make -j framework
它只使用一个进程。重构此 Makfile 以使编译并行化的最佳(和快速)方法是什么?
【问题讨论】:
【参考方案1】:您的规则按顺序执行$(MAKE)
命令,因此您一次只能看到一个进程也就不足为奇了。
一种快速而肮脏的方法(如果没有等待这些调用的结果)是
framework:
@$(MAKE) -C $(HIGGSBASESELECTOR) &
@$(MAKE) -C $(MATRIX4) &
@$(MAKE) -C $(SUBSELECTOR) &
@$(MAKE) -C $(MCSUBSELECTOR) &
@$(MAKE) -C $(MATRIXSUBSELECTOR) &
@$(MAKE) -C $(CHECKSUBSELECTOR) &
如果这让你的血液变冷(它应该)你可以这样做:
framework: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
do things after the calls
.PHONY: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
$(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...:
@$(MAKE) -C $@
【讨论】:
我在.PHONY
线上得到:Makefile:88: *** multiple target patterns. Stop.
我认为HIGGSBASESELECTOR
、MATRIX4
等等都是简单的路径。这些是什么? (另外,我假设你知道 ...
是指其余的目标目录,MCSUBSELECTOR
等等。)
你能举一个产生错误的路径的例子吗?另外,您使用的是哪个版本的 Make?以上是关于并行化外部 Makefile的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有串行内循环的openMP并行化外循环以进行数组添加