Следующая программа MPI просто определяет тип MPI для сообщения, а затем отправляет сообщение из процесса 0 в процесс 1. Однако происходит сбой с очень неинформативным сообщением об ошибке.Что с ним не так?
#include <stdio.h>
#include <mpi.h>
struct P {
char choices[64];
int next_choice;
};
typedef struct P Packing;
int main(int argc,char** argv) {
int rank;
MPI_Datatype PACKING_TYPE;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
if (rank == 0) {
/*Defines a new MPI datatype tag for Packings.*/
int field_count = 2;
int field_lengths[2] = {64,1};
MPI_Aint field_offsets[2] = {0,64 * sizeof(char)};
MPI_Datatype field_types[2] = {MPI_CHAR,MPI_INT};
MPI_Type_struct(field_count,field_lengths,
field_offsets,field_types,&PACKING_TYPE);
MPI_Type_commit(&PACKING_TYPE);
}
MPI_Barrier(MPI_COMM_WORLD);
if (rank == 0) {
Packing pack;
MPI_Status status;
MPI_Send(&pack,1,PACKING_TYPE,1,0,MPI_COMM_WORLD);
puts("Process 0 sent message.");
}
if (rank == 1) {
Packing pack;
MPI_Status status;
MPI_Recv(&pack,1,PACKING_TYPE,MPI_ANY_SOURCE,
MPI_ANY_TAG,MPI_COMM_WORLD,&status);
puts("Process 1 recieved message.");
}
MPI_Barrier(MPI_COMM_WORLD);
if(rank == 0) {
MPI_Type_free(&PACKING_TYPE);
}
MPI_Finalize();
return 0;
}