2013-10-05 2 views
0

Я написал свой код для запуска параллельной программы пинг-понга. Ниже приводится мой код:Неустранимая ошибка при запуске параллельной программы для пинг-понга

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

int main (int argc, char **argv){ 
    //t0 Start Time 
    //t1 End Time 
    int size,rank,msgtag = 1; 
    double t0,t1,tmaster,tslave ; 

    MPI_Status status; 

    //initialize 
    int x; 

    //initialize MPI 
    if (MPI_Init(&argc, &argv) != MPI_SUCCESS) { 
     fprintf(stderr, "MPI initialization error\n"); 
     return EXIT_FAILURE; 
    } 
    MPI_Comm_size(MPI_COMM_WORLD,&size); 
    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 

    //communication between 2 nodes 
    ///action process 0 
    if(rank == 0){ 
     //start timer 
     //master process 
     t0 = MPI_Wtime(); 
     MPI_Send(&x,1,MPI_INT,1,msgtag,MPI_COMM_WORLD); 

     //stop timer 
     t1 = MPI_Wtime(); 
     //calculate elapsed time 
     tmaster = (t1 - t0); 
     MPI_Recv(&tslave,1,MPI_DOUBLE,1,msgtag,MPI_COMM_WORLD,&status); 


     printf("Master time: %g \n\n",tmaster); 
     printf("slave time: %g \n\n",tslave); 

    }else{ 
    ///action process 1 
     //receive message 
     t0 = MPI_Wtime(); 
     MPI_Recv(&x,1,MPI_INT,0,msgtag,MPI_COMM_WORLD,&status); 

     t1 = MPI_Wtime(); 
     tslave = (t1 - t0); 
     //Send message 
     MPI_Send(&tslave,1,MPI_DOUBLE,0,msgtag,MPI_COMM_WORLD); 
    } 
    MPI_Finalize(); 

} 

Я могу запустить свой код без каких-либо ошибок или предупреждений. Однако, когда я пытаюсь отлаживать его, он показал мне эту фатальную ошибку:

job aborted: 
rank:node:exit node:message: 
0:localhost:-101:Fatal error in MPI_Send:invalid rank,error stack: 
MPI_Send<172>:MPI_Send<buf=0x003FFBB4, count=1, MPI_INNT,dest=1, tag=1,MPI_COMM_WORLD> failed 
MPI_Send<97>.; invalid rank has value 1 but must be non negative and less then 1 

Кто-нибудь знает, как исправить эту роковую ошибку?

+0

Возможно, вы отлаживаете один экземпляр исполняемого файла - он запускается как так называемый экземпляр «singleton MPI», и в юниверсе MPI есть только один процесс, и он имеет ранг 0, поэтому отправка/получение из ранга 1 является ошибочным. Существуют специализированные параллельные отладчики, такие как TotalView и DDT, которые могут порождать параллельное задание, а затем отлаживать каждый процесс отдельно или совместно как единую программу. –

ответ

0

Похоже, что вы неправильно используете свой код (только запуск одного процесса). Убедитесь, что ваш вызов mpiexec передает значение, превышающее 0 для флага -n. Например:

mpiexec -n 2 ./pingpong 
0

Вы не указали стоимость x? Какая ценность x? Запустите его с помощью двух процессов.

Смежные вопросы