Я хочу отправить другой тип данных с одного узла на другой. Например, у меня есть 2 данных с разными типами: int и double. Однако после их отправки узел, который получает данные, получает неправильное значение, даже если я указываю тип. Из приведенного ниже примера кода второй узел получает 0,00000 и 0 значений для обоих приемов. Как я могу это исправить и заставить второй узел получить правильное значение, в этом случае значение для двойного должно быть 1,2 и 5 для целого.
include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
/* Main function */
int main(int argc, char *argv[]) {
int rank, numberOfProcesses;
MPI_Init( &argc, &argv );
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numberOfProcesses);
MPI_Status status[5];
MPI_Request req[5]; //request array
int nreq = 0;
int tag = 0;
if (rank == 0){
double sendDouble = 1.2;
int sendInteger = 5;
MPI_Isend(&sendInteger, 1, MPI_INT, 1, 100, MPI_COMM_WORLD,&req[nreq++]);
MPI_Isend(&sendDouble, 1, MPI_DOUBLE, 1, 222, MPI_COMM_WORLD,&req[nreq++]);
}
MPI_Waitall(nreq,req,status);
if (rank ==1) {
MPI_Status status;
double recvDouble;
int recvInt;
MPI_Irecv(&recvDouble,1,MPI_DOUBLE,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&req[nreq++]);
MPI_Irecv(&recvInt,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&req[nreq++]);
printf("receive double %lf\n", recvDouble);
printf("receive integer %d\n", recvInt);
}
MPI_Finalize();
return 0;
}
получать двойное 0,000000
получить целое число 0