并行化外部 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. 我认为HIGGSBASESELECTORMATRIX4 等等都是简单的路径。这些是什么? (另外,我假设你知道 ... 是指其余的目标目录,MCSUBSELECTOR 等等。) 你能举一个产生错误的路径的例子吗?另外,您使用的是哪个版本的 Make?

以上是关于并行化外部 Makefile的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有串行内循环的openMP并行化外循环以进行数组添加

通过 JDBC 进行并行化 - Pyspark - 并行化如何使用 JDBC 工作?

OpenMP:嵌套并行化有啥好处?

R语言并行化基础与提高

使用并行化创建键/值对 RDD?

犰狳中的并行化