使用单线程和多线程配方混合运行make

时间:2012-09-05 16:25:07

标签: parallel-processing makefile openmp

我有一个makefile,它编译并运行一组相当大的程序,以产生输出。有些程序是单线程的,有些程序使用OpenMP在多个CPU核心上运行。相当多的任务需要很长时间才能运行,因此传递“-j”选项来生成,以允许单线程程序并行运行会很有用。但是,OpenMP任务已经使用了所有可用的CPU内核(以及相当多的RAM),因此它们应该一次运行一个。

是否有一个标志可以附加到makefile中使用OpenMP的任务,该任务阻止与其并行运行的其他任务,同时允许其他任务在其他时间并行运行?我认为.NOTPARALLEL特殊目标完全禁用所有并行性。

1 个答案:

答案 0 :(得分:1)

我可以想到三种可能性:

1)如果彼此依赖,make将不会并行运行任务。 因此,您可以尝试通过向要单独运行的目标添加虚假依赖来欺骗make。例如,声明您的OpenMP目标取决于所有串行目标的输出。

2)您也可以将Makefile分成两个不同的:一个用于不能并行运行的OpenMP目标,一个用于串行目标。这意味着您在OpenMP和串行目标之间没有交叉依赖关系。

3)拆分编译和运行。使用bash脚本按照自己的意愿运行。