0

ここの初心者。

私は C++ プログラム XX を持っています。ここで XX は実行可能なバイナリであることに注意してください。そして今、このプログラム XX に同様のジョブを N 回実行させたいのですが、N セットの異なる入力パラメーターを使用して、現在 N 個のプロセッサがあるとすると、これらの N 個のジョブをこれらの N 個のプロセッサで同時に実行させることができます。

スクリプトレベルから、これらの種類の「並列」ジョブを qsub にすることは可能ですか? または、C++ レベルでも実行できますか? または、より良いアイデアはありますか?

私が書いた XX コードは大規模なプロジェクトに基づいており、コードの mpi 部分を変更するのは簡単ではないため、質問しました。:(

または、XX コードとプロジェクトを変更して、必要に応じて新しいアルゴリズムを作成する必要がありますか。

または、python を使用するなど、他のアドバイスはありますか? それは私の目標をすばやく達成することができます。

どうもありがとう!


より明確にするために、質問にさらに追加したいと思います。

これらの N の結果が従属関係にある場合はどうなるでしょうか? いいえ、どうやってこれを行うことができますか?

第 1 サイクルでは、n 個のプロセッサで N 個のジョブが同時に実行され、一定時間後、それらはすべて終了して N 個の結果が得られます。これらの N 個の結果に基づいてシリアル ジョブを実行する必要があります。この結果は、次のサイクル、そして次のサイクルに移動し、

2サイクル目、

3サイクル目、

等々....

シェルスクリプトはこれを行うことができますか? それともPythonの使い方を学んだほうがいいですか?それとも、まだC++を使用できますか???

ありがとう :)

4

3 に答える 3

1

GNU Parallelを使用して、シェル スクリプトを介して並列でジョブを実行できます。

古き良きは、同時に実行するジョブの数をxargs示すパラメーターを取ります。-P

于 2012-05-29T22:17:33.847 に答える
1

bourne シェルは、あなたが求めることをうまく実行できます。

#!/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 に答える
0

GNU makeには「-j」スイッチがあり、同時に実行するジョブの数を指定できます。したがって、すべてを適切な依存関係を持つ gnu Makefile に変換できれば、指定された数のジョブを同時に実行できる可能性があります。または、他のビルド システム/自動化ツールを試すこともできます。または、シェルスクリプトなどでゼロから実装することもできます。いくつかのスレッド ライブラリにアクセスできる限り、プレーン C++ も可能です。または、Python を使用して Makefile (または別のビルド スクリプト) を生成することもできます。これにアプローチする方法はたくさんあります。

于 2012-05-29T22:33:59.667 に答える