複数のプロセスを生成するために、invoke MPI_Comm_spawn_multiple を実行しようとしましたが、興味深いことがあります。40個の子プロセスを生成すると、うまくいきます。80 の子プロセスを生成すると、セグメンテーション エラーが表示されます。この問題は、MPI_Info に 'wdir' を設定し、生成された子プロセスの数が十分に多い場合に発生します (私のテストでは、53 より大きいはずです)。誰かが苦しんでいるか、問題を解決する方法を知っているのだろうか. 私の MPI バージョンは mvapich2-1.8.1 です。
以下は私のコードです:
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#define P_SIZE 80
int main( int argc, char *argv[] )
{
int np[P_SIZE],i;
int errcodes[P_SIZE];
MPI_Comm parentcomm, intercomm;
char *cmds[P_SIZE];
MPI_Info infos[P_SIZE];
for(i=0;i<P_SIZE;i++){
np[i]=1;
MPI_Info_create(&infos[i]);
cmds[i]="./spawn_example";
}
for(i=0;i<10;i++){ MPI_Info_set(infos[i], "hosts", "node1");MPI_Info_set(infos[i], "wdir", "/home");}
for(i=10;i<20;i++){ MPI_Info_set(infos[i], "hosts", "node2");MPI_Info_set(infos[i], "wdir", "/home");}
for(i=20;i<30;i++){ MPI_Info_set(infos[i], "hosts", "node3");MPI_Info_set(infos[i], "wdir", "/home");}
for(i=30;i<40;i++){ MPI_Info_set(infos[i], "hosts", "node4");MPI_Info_set(infos[i], "wdir", "/home");}
for(i=40;i<50;i++){ MPI_Info_set(infos[i], "hosts", "node5");MPI_Info_set(infos[i], "wdir", "/home");}
for(i=50;i<60;i++){ MPI_Info_set(infos[i], "hosts", "node6");MPI_Info_set(infos[i], "wdir", "/home");}
for(i=60;i<70;i++){ MPI_Info_set(infos[i], "hosts", "node7");MPI_Info_set(infos[i], "wdir", "/home");}
for(i=70;i<80;i++){ MPI_Info_set(infos[i], "hosts", "node8");MPI_Info_set(infos[i], "wdir", "/home");}
MPI_Init( &argc, &argv );
MPI_Comm_get_parent( &parentcomm );
if (parentcomm == MPI_COMM_NULL)
{
MPI_Comm_spawn_multiple( P_SIZE, cmds, MPI_ARGVS_NULL, np, infos, 0, MPI_COMM_SELF, &intercomm, errcodes );
printf("I'm the parent.\n");
}
else
{
printf("I'm the spawned.\n");
}
fflush(stdout);
MPI_Finalize();
return 0;
}