4

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

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

4

1 回答 1

1

我能想到三种可能:

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

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

3)拆分编译和运行。使用 bash 脚本随心所欲地运行。

于 2012-09-06T06:52:08.280 回答