MPI を使用する場合、メイン プログラムを実行するときにいくつかのプロセスを指定します。ただし、1 つのプロセスから開始し、さらに必要な場合は実行時に動的に決定し、より多くのプロセスを分岐させたいと考えています。それまたは似たようなことは可能ですか?
そうでなければ、私は非常に避けたいMPIを再発明する必要があります。
MPI を使用する場合、メイン プログラムを実行するときにいくつかのプロセスを指定します。ただし、1 つのプロセスから開始し、さらに必要な場合は実行時に動的に決定し、より多くのプロセスを分岐させたいと考えています。それまたは似たようなことは可能ですか?
そうでなければ、私は非常に避けたいMPIを再発明する必要があります。
fork()子プロセスが MPI 関数を使用できないため、使用できません。MPI には、新しいプロセスを動的に作成するための簡単なメカニズムがあります。関数MPI_Comm_spawnまたはMPI_Comm_spawn_mutliple
OpenMPI ドキュメント: http://www.open-mpi.org/doc/v1.4/man3/MPI_Comm_spawn.3.php
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#define NUM_SPAWNS 2
int main( int argc, char *argv[] )
{
int np = NUM_SPAWNS;
int errcodes[NUM_SPAWNS];
MPI_Comm parentcomm, intercomm;
MPI_Init( &argc, &argv );
MPI_Comm_get_parent( &parentcomm );
if (parentcomm == MPI_COMM_NULL) {
MPI_Comm_spawn( "spawn_example", MPI_ARGV_NULL, np, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &intercomm, errcodes );
printf("I'm the parent.\n");
} else {
printf("I'm the spawned.\n");
}
fflush(stdout);
MPI_Finalize();
return 0;
}