0

新手来了

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

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

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

或者我是否必须修改 XX 代码和项目以有一个新的算法来满足我的需要。

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

非常感谢!


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

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

第一个周期,n 个处理器上的 N 个作业同时运行,并且在一定时间后,它们都结束并给出 N 个结果,我需要根据这 N 个结果做一个串行作业,这个结果将作为初始条件下一个循环,然后移动到下一个循环,

第二个循环,

第三个周期,

等等....

shell脚本能够做到这一点吗?还是我最好学习使用python?或者我仍然可以使用c++???

谢谢 :)

4

3 回答 3

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
...
于 2012-05-29T22:40:06.953 回答
1

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

Good oldxargs接受一个-P参数,告诉它同时执行多少个作业。

于 2012-05-29T22:17:33.847 回答
0

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

于 2012-05-29T22:33:59.667 回答