2017-03-10 11 views
0

私はmpi_comm_spawn &散乱を使用して、次のシナリオを実装しようとしています:受信データMPI産卵C

1 - マスターが仕事を持つ2つのプロセスを生成します。

2 Heは、これらの生成されたプロセスに配列を散在させます。

3-生成されたプロセスは分散型配列を受け取ってソートして戻します。

4-マスタは配列のソートされた部分を受け取ります。

私はステップ2を行う方法を知っていますが、これまでに送受信を試してきましたが、それらは完全に動作しますが、私はスキャッタ機能でそれをやりたいのです。

編集:ここで私は奴隷の私が散乱配列を受け取る

/*Master Here*/ 

MPI_Comm_spawn(slave, MPI_ARGV_NULL, 2, MPI_INFO_NULL,0, MPI_COMM_WORLD, &inter_comm, array_of_errcodes); 

printf("MASTER Sending a message to slaves \n"); 
MPI_Send(message, 50, MPI_CHAR,0 , tag, inter_comm); 

MPI_Scatter(array, 10, MPI_INT, &array_r, 10, MPI_INT, MPI_ROOT, inter_comm); 

おかげで一部が欠落しています、私はマスターのコードでやってみたいものです。

+0

http://mpitutorial.com/tutorials/mpi-スキャッターギャザーと-allgather/ – Shibli

+0

あなたは誤解しているようですが、私はmpi_comm_spawnでそれらを使用したいのですが、実行方法に関する情報が見つかりません – Silversprint

+0

あなたのコードを共有するように気をつけますか? – Arash

答えて

2

master.c

#include "mpi.h" 

int main(int argc, char *argv[]) 
{ 
    int n_spawns = 2; 
    MPI_Comm intercomm; 

    MPI_Init(&argc, &argv); 

    MPI_Comm_spawn("worker_program", MPI_ARGV_NULL, n_spawns, MPI_INFO_NULL, 0, MPI_COMM_SELF, &intercomm, MPI_ERRCODES_IGNORE); 

    int sendbuf[2] = {3, 5}; 
    int recvbuf; // redundant for master. 

    MPI_Scatter(sendbuf, 1, MPI_INT, &recvbuf, 1, MPI_INT, MPI_ROOT, intercomm); 

    MPI_Finalize(); 
    return 0; 
} 

worker.c

#include "mpi.h" 
#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    MPI_Init(&argc, &argv); 

    MPI_Comm intercomm; 
    MPI_Comm_get_parent(&intercomm); 

    int sendbuf[2]; // redundant for worker. 
    int recvbuf; 

    MPI_Scatter(sendbuf, 1, MPI_INT, &recvbuf, 1, MPI_INT, 0, intercomm); 
    printf("recvbuf = %d\n", recvbuf); 

    MPI_Finalize(); 
    return 0; 
} 

コマンドライン

mpicc master.c -o master_program 
mpicc worker.c -o worker_program 
mpirun -n 1 master_program 
+0

ありがとう、魅力のように、ギャグと同じこと。 – Silversprint

関連する問題