Windows(1.4.1p1)でMPICHを使用してMPIを学習しているときに、ここでサンプルコードを見つけました。元々、サーバーを実行したときに、生成されたものをコピーして、port_name
それを使用してクライアントを起動する必要がありました。そうすれば、クライアントはサーバーに接続できます。MPI_Publish_name()
代わりにサーバーに含めるように変更しました。の名前でサーバーを起動した後、失敗しaaaa
たクライアントを起動しますMPI_Lookup_name()
Invalid service name (see MPI_Publish_name), error stack:
MPID_NS_Lookup(87): Lookup failed for service name aaaa
コードの一部を次に示します。
server.c
MPI_Comm client;
MPI_Status status;
char port_name[MPI_MAX_PORT_NAME];
char serv_name[256];
double buf[MAX_DATA];
int size, again;
int res = 0;
MPI_Init( &argc, &argv );
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Open_port(MPI_INFO_NULL, port_name);
sprintf(serv_name, "aaaa");
MPI_Publish_name(serv_name, MPI_INFO_NULL, port_name);
while (1)
{
MPI_Comm_accept( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &client );
/*...snip...*/
}
client.c
MPI_Comm server;
double buf[MAX_DATA];
char port_name[MPI_MAX_PORT_NAME];
memset(port_name,'\0',MPI_MAX_PORT_NAME);
char serv_name[256];
memset(serv_name,'\0',256);
strcpy(serv_name, argv[1] )
MPI_Lookup_name(serv_name, MPI_INFO_NULL, port_name);
MPI_Comm_connect( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &server );
MPI_Send( buf, 0, MPI_DOUBLE, 0, tag, server );
MPI_Comm_disconnect( &server );
MPI_Finalize();
return 0;
それが問題でさえあるとしても、公開された名前の可視性を変更することについての情報を見つけることができません。MPICHはMPI_INFOで何も実装していないようです。openMPIを試してみますが、ビルドするだけで問題が発生します。助言がありますか?