C++ 如何生成更高级别的并行代码/脚本?
我是新手 <>我有一个C++程序XX,注释XX是这里的一个可执行二进制文件。现在我想让这个程序XX做N次类似的工作,但是有N组不同的输入参数,假设我现在有N个处理器,那么我可以让这N个任务在这N个处理器上同时运行 从脚本级别到qsub这类“并行”作业是否可能?还是可以在C++级别上完成?还有更好的主意吗 我这样问是因为我写的XX代码是基于一个大项目的,我不容易更改代码的mpi部分:( 或者我必须修改XX代码和项目,以有一个新的算法来满足我的需要 或者其他建议,比如使用python或者什么?这可以很快实现我的目标 非常感谢C++ 如何生成更高级别的并行代码/脚本?,c++,shell,C++,Shell,我是新手 我有一个C++程序XX,注释XX是这里的一个可执行二进制文件。现在我想让这个程序XX做N次类似的工作,但是有N组不同的输入参数,假设我现在有N个处理器,那么我可以让这N个任务在这N个处理器上同时运行 从脚本级别到qsub这类“并行”作业是否可能?还是可以在C++级别上完成?还有更好的主意吗 我这样问是因为我写的XX代码是基于一个大项目的,我不容易更改代码的mpi部分:( 或者我必须修改XX代码和项目,以有一个新的算法来满足我的需要 或者其他建议,比如使用python或者什么?这可以很快
我想补充我的问题,让它更清楚 如果这些N的结果是相依的呢?不,我是说我怎么能这样做 第一个周期,N个处理器上的N个作业同时运行,经过一段时间后,它们都结束并给出N个结果,我需要根据这些N个结果执行一个串行作业,这一结果将用作下一个周期的初始条件,然后移动到下一个周期 第二周期 第三周期 等等
是shell脚本能够做到这一点吗?还是我最好学会使用Python?或者我仍然可以使用C++?? 谢谢:)
您可以使用shell脚本并行执行作业好的旧
xargs
接受一个-p
参数,告诉它同时执行多少个作业 具有“-j”开关,允许您指定要同时运行的作业数量。因此,如果您能够将整个过程转换为具有适当依赖关系的gnu Makefile,那么您可能能够同时运行指定数量的作业。或者,您可以尝试其他构建系统/自动化工具。或者,您可以在shell脚本或类似的东西中从头开始实现它。也可以使用普通C++,只要你能访问一些线程库。或者可以使用python生成Makefile(或另一个构建脚本)。有很多方法可以做到这一点。伯恩壳牌可以很好地满足您的要求:
#!/bin/sh
# Run XX 3 times in parallel
XX args&
XX other-args&
XX different-args&
wait # Wait for all 3 to finish
...
许多shell都有一个外部cmd
xargs
,有些版本会使用-n2-??
参数来表示并行运行n
副本。还要寻找gnu并行。这两个都在S.O.的Q/A中有很好的记录。祝你好运。