Я пытаюсь скомпилировать код в C ++, используя код из: https://stackoverflow.com/questions/5953979/sending-and-receiving-array-using-mpi-part-2.
Я использую следующую команду для компиляции: mpiicpc -o <filename> xxxx.cc -lmpi
После компиляции всемои ошибки, кажется, относятся к двум функциям, которые я определил в своем исходном коде для печати выходных значений и выполнения MPI Isend и MPI Irecv.В частности, я получаю два типа ошибок
- Ошибка: идентификатор «переменная» не определен
- Ошибка: слишком мало аргументов в вызове функции:
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 ();
}