1

複数のプロセスを生成するために、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;
}
4

0 に答える 0