如何制作更高级别的并行代码/脚本?

时间:2012-05-29 22:14:07

标签: c++ shell

新手在这里。

我有一个c ++程序XX,注意XX是一个可执行的二进制文件。现在我希望这个程序XX做N次类似的工作,但有N组不同的输入参数,并说我现在有N个处理器,那么我可以让这N个工作同时在这N个处理器上运行。

是否可以从脚本级别到qsub这些“并行”作业?或者甚至可以在C ++级别上完成它?或者更好的想法?

我问,因为我写的XX代码是基于一个大型项目,我不容易改变代码的mpi部分。 :(

或者我是否必须修改XX代码和项目以获得符合我需要的新算法。

或任何其他建议,比如使用python或什么?这可以很快实现我的目标。

非常感谢!


我想在我的问题中添加更多内容,以使其更清晰。

如果这些N的结果是依赖的,该怎么办?不,我的意思是我怎么能这样做,

第一个周期,n个处理器上的N个作业同时运行,经过一段时间后,它们都结束并给出N个结果,我需要根据这N个结果做一个连续作业,结果将是用作下一个周期的初始条件,然后进入下一个周期,

第二个周期,

第3个周期,

依旧......

shell脚本能够执行此操作吗?或者我最好学习使用python?或者我仍然可以使用c ++ ???

谢谢:)

3 个答案:

答案 0 :(得分:1)

您可以使用GNU Parallel通过shell脚本并行执行作业。

好的旧xargs采用-P参数,告诉它同时执行多少个作业。

答案 1 :(得分:1)

bourne shell可以做你想要的就好了:

#!/bin/sh
# Run XX 3 times in parallel
XX args&
XX other-args&
XX different-args&
wait  # Wait for all 3 to finish
...

答案 2 :(得分:0)

GNU make具有“-j”开关,允许您指定要同时运行的作业数。因此,如果您可以将整个事物转换为具有适当依赖关系的gnu Makefile,则您可能可以同时运行指定数量的作业。或者,您可以尝试其他构建系统/自动化工具。或者你可以在shell脚本或类似的东西中从头开始实现它。只要您有权访问某些线程库,也可以使用普通C ++。或者您可以使用python生成Makefile(或其他构建脚本)。有很多方法可以解决这个问题。