動的に作成された bash スクリプトを生成したい既存のアプリケーションを変更中です。bash スクリプトの名前を引数として取る単純なラッパー ルーチンを作成しました。ラッパーでは、スクリプトは MPI_Comm_spawn によって生成されます。直後に、ラッパーはスクリプトが終了する前に実行される MPI_Finalize を呼び出します。
#include "mpi.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char *script = argv[1];
int maxProcs = 2, myRank;
MPI_Comm childComm;
int spawnError[maxProcs];
// Initialize
argv[1] = NULL;
MPI_Init(&argc, &argv);
// Rank of parent process
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);
// Spawn application
MPI_Comm_spawn(script, MPI_ARGV_NULL, maxProcs, MPI_INFO_NULL, myRank, MPI_COMM_SELF, &childComm, spawnError);
// Finalize
MPI_Finalize();
return EXIT_SUCCESS;
}
私が挿入した場合
sleep(10);
直前
MPI_Finalize ();
すべて正常に動作します。ここで私の質問は、bash スクリプトが終了するまでラッパーで実行をブロックできるかどうかです。また、スクリプトの戻り値を取得できるとよいでしょう。残念ながら、スクリプト内から MPI 環境変数にアクセスする必要があるため、親ラッパーと通信し、システム コールを介して bash スクリプトを実行する、スクリプト用の別のラッパーを作成するオプションはありません。私は物事を十分に明確にしたことを願っています。どんな助けでも大歓迎です!