Нет, по крайней мере, вам нужна одна подпрограмма связи, такая как MPI_Send
, MPI_BCast
, MPI_AllGather
, чтобы отправить someOtherRankNode.state
на rank == 0
.Например:
#include <stdio.h>
#include <mpi.h>
int main(void)
{
char rank_0_state;
char rank_1_state;
MPI_Init(NULL, NULL);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
if (world_size != 2)
return 1;
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 0)
rank_0_state = 'I';
if (rank == 1)
rank_1_state = 'S';
if (rank == 0) {
MPI_Status status;
MPI_Recv(&rank_1_state, 1, MPI_BYTE, 1, 0, MPI_COMM_WORLD, &status);
}
if (rank == 1)
MPI_Send(&rank_1_state, 1, MPI_BYTE, 0, 0, MPI_COMM_WORLD);
if (rank == 0) {
if (rank_0_state == 'I' && rank_1_state == 'S') {
printf("I am rank 0 receiving the right value from rank 1\n");
}
}
MPI_Finalize();
return 0;
}
Попробуйте использовать MPI_Type_struct для правильной отправки этой структуры между процессами.