#include #include #include #include "mpi.h" #define USE_GMP #define USE_MPFR #include "mpi_bnc.h" void mpf_f(mpf_t ret, mpf_t a) { mpf_t tmp; mpf_init2(tmp, mpf_get_prec(ret)); mpf_mul(tmp, a, a); mpf_add_ui(tmp, tmp, 1UL); mpf_ui_div(ret, 4UL, tmp); mpf_clear(tmp); return; } int main(int argc,char *argv[]) { int n, myid, numprocs, i; double startwtime = 0.0, endwtime; mpf_t mpf_pi, mpf_h, mpf_x; int namelen; char processor_name[MPI_MAX_PROCESSOR_NAME]; 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); create_mpf_op(&(MPI_MPF_SUM), _mpi_mpf_add, MPI_COMM_WORLD); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); n=14 * 16384; mpf_init(mpf_h); mpf_init(mpf_x); mpf_init(mpf_pi); mpf_set_ui(mpf_x, 0UL); mpf_set_ui(mpf_h, 1UL); if(myid == 0) startwtime = MPI_Wtime(); _mpi_mpf_trapezoidal_fs(mpf_pi, mpf_x, mpf_h, mpf_f, n, MPI_COMM_WORLD, MPI_MPF); if(myid == 0) { endwtime = MPI_Wtime() - startwtime; printf("BNC: _mpi_mpf_trapezoidal_fs = \n"); mpf_out_str(stdout, 10, 0, mpf_pi);printf("\n"); printf("Time: %f\n", endwtime); } mpf_clear(mpf_x); mpf_clear(mpf_h); mpf_clear(mpf_pi); free_mpf(&(MPI_MPF)); free_mpf_op(&(MPI_MPF_SUM)); MPI_Finalize(); return EXIT_SUCCESS; }