新手在这里。
我有一个c ++程序XX,注意XX是一个可执行的二进制文件。现在我希望这个程序XX做N次类似的工作,但有N组不同的输入参数,并说我现在有N个处理器,那么我可以让这N个工作同时在这N个处理器上运行。
是否可以从脚本级别到qsub这些“并行”作业?或者甚至可以在C ++级别上完成它?或者更好的想法?
我问,因为我写的XX代码是基于一个大型项目,我不容易改变代码的mpi部分。 :(
或者我是否必须修改XX代码和项目以获得符合我需要的新算法。
或任何其他建议,比如使用python或什么?这可以很快实现我的目标。
非常感谢!
我想在我的问题中添加更多内容,以使其更清晰。
如果这些N的结果是依赖的,该怎么办?不,我的意思是我怎么能这样做,
第一个周期,n个处理器上的N个作业同时运行,经过一段时间后,它们都结束并给出N个结果,我需要根据这N个结果做一个连续作业,结果将是用作下一个周期的初始条件,然后进入下一个周期,
第二个周期,
第3个周期,
依旧......
shell脚本能够执行此操作吗?或者我最好学习使用python?或者我仍然可以使用c ++ ???
谢谢:)
答案 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(或其他构建脚本)。有很多方法可以解决这个问题。