2017-03-10 71 views
0

我試圖實現使用mpi_comm_spawn &散射以下情形:接收數據MPI產卵Ç

1-主產卵2個流程與作業。

2-他將一個數組分散到那些產生的進程。

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