предупреждение: передача аргумента 7 'MPI_Recv' из несовместимого типа указателя - PullRequest
1 голос
/ 03 декабря 2011

Я пытаюсь скомпилировать функцию MPI_Exchange, но продолжаю получать следующие ошибки.

Ошибка:

OddEvenSort.c: In function ‘MPI_Exchange’:
OddEvenSort.c:75: warning: passing argument 7 of ‘MPI_Recv’ from incompatible pointer type
/usr/lib/openmpi/include/mpi.h:1174: note: expected ‘struct MPI_Status *’ but argument is of type ‘int *’
OddEvenSort.c:84: warning: passing argument 7 of ‘MPI_Recv’ from incompatible pointer type
/usr/lib/openmpi/include/mpi.h:1174: note: expected ‘struct MPI_Status *’ but argument is of type ‘int *’
/usr/bin/mpicc  -o OddEvenSort OddEvenSort.o -lm

Код:

int MPI_Exchange( int n, double *a, int rank1, int rank2,MPI_Comm comm )
{
   int rank, tag1, tag2, size, i, status;
   double * b, * c;


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

   if(rank == rank1){
     MPI_Send(&a[0],n,MPI_DOUBLE,rank2,tag1,comm);
     MPI_Recv(&b[0],n,MPI_DOUBLE,rank2,tag2,comm,&status);
     c = merge_array(n,a,n,b);
     for(i=0;i<n;i++){
       a[i] = c[i];
     }

   }
   else if(rank == rank2){
      MPI_Send(&a[0],n,MPI_DOUBLE,rank1,tag1,comm);
     MPI_Recv(&b[0],n,MPI_DOUBLE,rank1,tag2,comm,&status);
     c = merge_array(n,a,n,b);
     for(i=0;i<n;i++){
       a[i] = c[i+n];
     }
   }

     return MPI_SUCCESS;
    }

Я полагаю, что ошибки относятся к &status в двух случаях MPI_Recv. Я пытаюсь получить адрес статуса, который ранее был объявлен в моем коде как MPI_Status status.

1 Ответ

2 голосов
/ 03 декабря 2011

У вас status объявлено как локальное int:

   int rank, tag1, tag2, size, i, status;

, которое переопределяет любое глобальное объявление status ранее в вашем коде.

Либо измените имясвою локальную переменную status или укажите для нее соответствующий тип.

...