1
私はMPI_Exchange関数をコンパイルしようとしていますが、以下のエラーが発生し続けます。警告:互換性のないポインタ型から 'MPI_Recv'の引数7を渡します。
エラー:
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;
}
私はエラーがMPI_Recv
の2つのインスタンスに&status
を参照してください信じています。私はコードの前にMPI_Status status
と宣言されたステータスのアドレスを取得しようとしています。
うわー、どうして私はそれを見逃しましたか?ありがとうポール。 –
コンパイラの警告が有効になっていることを確認してください。誤ってこのようなことをしたときに、ローカル変数がグローバル宣言をシャドウすることを警告する必要があります。 –
確かに、私はそれをします。 –