#include #include #include #include "mpi.h" #define USE_GMP #define USE_MPFR #include "gmp.h" #include "mpfr.h" #include "mpi_bnc.h" main(int argc, char *argv[]) { int num_procs, myrank; mpf_t a, b; void *buf; int tag = 0; MPI_Status status; MPI_Init(&argc, &argv); _mpi_set_bnc_default_prec_decimal(50, MPI_COMM_WORLD); commit_mpf(&(MPI_MPF), ceil(50/log10(2.0)), MPI_COMM_WORLD); MPI_Comm_size(MPI_COMM_WORLD, &num_procs); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); mpf_init_set_ui(a, 0); mpf_init_set_ui(b, 0); if(myrank == 0) { mpf_set_ui(a, 1); buf = allocbuf_mpf(mpf_get_prec(a), 1); pack_mpf(a, 1, buf); MPI_Send(buf, 1, MPI_MPF, 1, tag, MPI_COMM_WORLD); } else if(myrank == 1) { buf = allocbuf_mpf(mpf_get_prec(b), 1); MPI_Recv(buf, 1, MPI_MPF, 0, tag, MPI_COMM_WORLD, &status); unpack_mpf(buf, b, 1); } printf("Process %d: a = ", myrank); mpf_out_str(stdout, 10, 0, a); printf(", b = "); mpf_out_str(stdout, 10, 0, b); printf("\n"); mpf_clear(a); mpf_clear(b); free_mpf(&(MPI_MPF)); MPI_Finalize(); return EXIT_SUCCESS; }