#author("2018-11-27T16:52:09+09:00","","")
#author("2018-11-27T16:52:17+09:00","","")
[[卒論]]

ソースコード

 #include <stdio.h>
 #include <math.h>
 #include <mpi.h>

 void main(int argc, char* argv[]){
  double PI25DT = 3.141592653589793238462643;
  double mypi, pi, h, sum, x, f, a;
  double t1, t2, t0, t_w;
  int n, myid, numprocs, i, rc;
  int ierr;
  
 MPI_Status stat;
 MPI_Init(&argc, &argv);
 MPI_Comm_rank(MPI_COMM_WORLD, &myid);
 MPI_Comm_size(MPI_COMM_WORLD, &numprocs);

  if(myid==0){
    printf("Enter the number of intervals \n");
    scanf("%d", &n);
    printf("n=%d \n", n);
             }

 MPI_Barrier(MPI_COMM_WORLD);
 t1=MPI_Wtime();
 
 MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
    h = 1.0 / n;
    sum = 0.0;
  for(i=myid+1; i<=n; i+=numprocs){
      x = h * (i - 0.5);
      sum = sum + 4.0 / (1.0 + x*x);
                                  }

  mypi = h * sum;
 MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

  if(myid == 0){
    printf("pi is approximately: %18.16lf Error is: %18.16lf \n", pi,fabs(pi-PI25DT));
               }

 MPI_Barrier(MPI_COMM_WORLD);
 t2 = MPI_Wtime();
 t0= t2-t1;
 MPI_Reduce(&t0, &t_w, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
    
  if(myid==0){   
    printf("execution time = : %8.4lf [sec.] \n", t_w);
             }
   rc= MPI_Finalize();
    
 }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS