2011-12-03 19 views
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と宣言されたステータスのアドレスを取得しようとしています。

答えて

2

ローカルintとしてstatusを宣言した:

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

以前のコード内statusのいずれかのグローバル宣言を上書きしています。

ローカルのstatus変数の名前を変更するか、適切なタイプにします。

+0

うわー、どうして私はそれを見逃しましたか?ありがとうポール。 –

+0

コンパイラの警告が有効になっていることを確認してください。誤ってこのようなことをしたときに、ローカル変数がグローバル宣言をシャドウすることを警告する必要があります。 –

+0

確かに、私はそれをします。 –

関連する問題