0

In this mpi programme only works slave nodes. How to modify it to work master also. Because working of the master also improve the performance of the system.

int A,B,C, slaveid,recvid,root, rank,size;

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

/*-------------------------- master ------------------------------*/

if(rank == 0){

    N =10;  

    for(slaveid=1; slaveid<size; slaveid++){

       MPI_Send(&N, 1, MPI_INT, slaveid, 1, MPI_COMM_WORLD);
    }

    for(recvid=1; recvid<size; recvid++){
        MPI_Recv(&A, 1, MPI_INT, recvid, 2, MPI_COMM_WORLD, &status);

    printf(" My id = %d and i send = %d\n",recvid,A);
    }
}

/*-------------------------- Slave ------------------------------*/

if(rank>0){

    MPI_Recv(&B, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);

    C = B*3;

    MPI_Send(&C, 1, MPI_INT, 0, 2, MPI_COMM_WORLD);

}

MPI_Finalize();

}

4

1 に答える 1

1

で区切られたブロック内

if(rank == 0){

}

適切な場所に行を挿入します

work_like_a_slave(argument1, argument2,...)

適切な場所はおそらく、メッセージを送信するループとメッセージを受信するループの間にあるため、スレーブが苦労している間にマスターが完全にアイドル状態になることはありません。

これがパフォーマンスに測定可能な影響を与えるかどうかは、質問が適切な推測の基礎となる十分な情報を提供しない多くの要因に依存します。スレーブの数とそれに伴うマスターのメッセージ送受信のビジー度、各プロセスが行うメッセージングと比較してどれだけの作業が行われるかなどの要因

数値が不利になる場合は、測定可能な影響がマイナスになることに備えてください。つまり、マスターを稼働させて実際に計算を遅くすることです。

于 2013-05-03T09:30:22.613 に答える