マスタスレーブアルゴリズムを実行するプログラムを実装しており、マスタスレーブジョブは実行パラメータによって決定されます。たとえば :複数の実行ファイルを実行するMPI通信
mpirun -oversubscribe -tag-output -np 1 BioNetFit2 -a load -c parabolaA_272002678.sconf : -oversubscribe -tag-output -np 4 BioNetFit2 -t particle -p 0 -a run -c parabolaA_272002678.sconf
この場合、マスターはこの部分を実行します:./BioNetFit2 -a load -c parabolaA_272002678.sconf
そして奴隷はこの部分を実行します:./BioNetFit2 -t particle -p 0 -a run -c parabolaA_272002678.sconf
そして、これは私が初期化しています方法ですコミュニケーションの世界:
cout << "Detected BNF2mpi in Pheromones init()" << endl;
MPI_Init(NULL, NULL);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
cout << "Defined mpi environment" << endl;
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
cout << "My rank is " << world_rank << "and I have just started." << endl;
私の問題はマスターはメッセージを送信し、スレーブはそれを受信せず、逆も同様です。
すべてのソースコードはここに提供されています:https://github.com/raqueldias/testing_rep これは大規模なプログラムであり、それは私の仕事は、MPIにブースト-MPIから分散型のメッセージパッシング機能を変換することで、別の人によってブースト-MPIで最初に実装されました。
最初の非常に基本的な質問は次のとおりです。プログラムを2つの部分で実行すると、プロセスがデフォルトで正常に通信できるか、通信を行うために別の構成を指定する必要がありますか?
質問に送信/受信部分を投稿してください。それが原因であるかどうかは不明です。私たちがチェックできるようにもっとコードを入れてください。 –
ソースコード全体をアップロードしました。 – RDlady