簡體   English   中英

MPI通信運行多個可執行文件

[英]MPI communication running multiple executables

我正在實現一個應運行主從算法的程序,並且主從作業將由執行參數確定。 例如:

mpirun -oversubscribe -tag-output -np 1 BioNetFit2 -a load -c parabolaA_272002678.sconf : -oversubscribe -tag-output -np 4 BioNetFit2 -t particle -p 0 -a run -c parabolaA_272002678.sconf

在這種情況下,主服務器將運行以下部分: ./BioNetFit2 -a load -c parabolaA_272002678.sconf

從站將執行此部分: ./BioNetFit2 -t particle -p 0 -a run -c parabolaA_272002678.sconf

這就是我初始化通信世界的方式:

   cout << "Detected BNF2mpi in Pheromones init()" << endl;
    MPI_Init(NULL, NULL);
    // Get the number of processes
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    cout << "Defined mpi environment" << endl;
    // Get the rank of the process
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    cout << "My rank is " << world_rank << "and I have just started." << endl;

我的問題是,主服務器發送一條消息,而從服務器則從未收到它,反之亦然。

所有源代碼都可以在這里找到: https : //github.com/raqueldias/testing_rep這是一個大型程序,它是由另一個人首先在boost-MPI中實現的,我的工作是從boost轉換分布式消息傳遞功能。 -MPI到MPI。

我的第一個非常基本的問題是:如果我按這樣的兩個部分運行程序,則這些進程默認情況下是否能夠正常通信,還是必須指定任何其他配置才能使其通信?

事實證明,進程掛起的問題與mpirun執行中的多個程序或多個實例的執行無關。

我誤解了MPI_Iprobe的工作方式。 這是我之前實現的方式:

while (1) {
            //std::cout << "rcv loop" << std::endl;
            serializedMessage.resize(1000);
            usleep(10000);
            MPI_Status status;
            int flag = 0;

            while(!flag){
                    MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, &status);
            }
if (flag) {
         //receive code here
           }

} ...

這使進程掛起。 使程序正常工作的正確實現是:

    while (1) {
                //std::cout << "rcv loop" << std::endl;
                serializedMessage.resize(1000);
                usleep(10000);
                MPI_Status status;
                int flag = 0;

                MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, &status);

                if (flag==1) {
                  //do something here
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM