コードを使用してC++でコードをコンパイルしようとしています:https://stackoverflow.com/questions/5953979/sending-and-receiving-array-using-mpi-part-2。MPIをコンパイル中にエラーが発生しました
私はコンパイルする次のコマンドを使用します。mpiicpc -o <filename> xxxx.cc -lmpi
私がコンパイルした後、すべての私のエラーが出力値を印刷し、MPI IsendとMPI Irecvを行うために、私は私のソースコードで定義された2つの関数を参照するように見えます。関数呼び出しの引数が少なすぎます:MPI_Isend/MPI_Irecv
とMPI Waitall();
最後に、それがこのメッセージに存在します。コンパイルはXXXXのため中止されまし識別子「変数」は未定義
- エラーを取得します.cc(コード2)。
変数を定義するときに間違っていなければならないことを指摘してください。ここで
は私のソースコードの抜粋である(その全体のコードはhttps://stackoverflow.com/questions/5953979/sending-and-receiving-array-using-mpi-part-2で入手できます):int main (int argc, char *argv[])
{
int my_rank;
int p;
int source;
int dest;
int tag = 0;
//Allocating Memory
double *A = new double[Rows*sizeof(double)];
double *B = new double[Rows*sizeof(double)];
....
....
....
//MPI Commands
MPI_Status status;
MPI_Init (&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &p);
//For number of beats
for (ibeat=0;ibeat<beats;ibeat++)
{
for (i=0; i<Cols/2; i++)
{
for (y=0; y<Rows/2; y++)
{
if (my_rank == 0)
if (i < 48)
if (y<48)
V[i][y] = 0;
if (my_rank ==
.....
....
....
}
}
//Load the Array with the edge values
for (r=0; r<Rows/2; y++)
{
if ((my_rank == 0) || (my_rank == 1))
{
A[r] = V[r][48];
BB[r] = V[r][48];
}
if ((my_rank
...
...
}
prttofile();
outputpass();
ibeat = ibeat+1;
}
MPI_Finalize();
}
void prttofile()
{
for (i = 0; i<Cols/2; i++)
{
for (y = 0; y<Rows/2; y++)
{
if (my_rank == 0)
fout << V[i][y] << " " ;
....
....
}
}
if (my_rank == 0)
fout << endl;
....
}
void outputpass()
{
int test = 2;
if ((my_rank%test) == 0)
{
MPI_Isend(C, Rows, MPI_DOUBLE, my_rank+1, MPI_COMM_WORLD); //Non blocking Send
MPI_Irecv(CC, Rows, MPI_DOUBLE, my_rank+1, MPI_COMM_WORLD, &status); //Non Blocking Recv
}
else if ((my_rank%test) == 1)
....
....
MPI_Waitall();
}
こんにちはCarlさん、ありがとうございます。 (1)関数内で宣言しなければならないのですか?私はメインの中にそれらを宣言することは、まだそれらをグローバル変数としてレンダリングすると思った。 (2)ありがとう! (3)prttofile()とoutputpass()を指定する2つの関数は、main()ルーチン内では定義されていません。私はちょうどmainの中からこれらの関数を呼び出します。エラーの行番号は、私がmainから参照する関数を指しているようです。私を訂正してください。ありがとう! – Ashmohan
@Ashmohan変数は* all *関数の外で定義されたときのみグローバルです。 'main()'の変数は 'main()'に対してローカルです。 – chrisaycock
@Ashmohan - 1:適切な範囲で宣言する必要があります。グローバル(「main」を含む*任意の関数の外)またはローカル(使用する関数内)。 3:私は何かを誤読していた - 心配しないで! –