1. 程式人生 > >平行計算--Java--求π並行實現

平行計算--Java--求π並行實現



  1.  publicvoid run()   
  2. {  
  3.   int i;  
  4.   step=1.0/(double)num_steps_wy;  
  5.   for(i=start_wy;i<num_steps_wy;i+=2)  
  6.   {  
  7.    x=(i+0.5)*step;  
  8.    sum=sum+4.0/(1.0+x*x);  
  9.   }  
  10.  }  
  11.  publicvoid seril_pi()  
  12.  {  
  13.   int i;  
  14.   step=1.0/(double)num_steps_wy;  
  15.   for(i=1;i<num_steps_wy;i++)  
  16.   {  
  17.    x=(i+0.5
    )*step;  
  18.    sum=sum+4.0/(1.0+x*x);  
  19.   }  
  20.  }  
  21.  publicstaticvoid main(String[] args) throws InterruptedException {  
  22.   double pi_wy,sum_wy=0.0,seri_t_wy,para_t_wy;  
  23.   Pi_thread thread1=new Pi_thread(1);  
  24.   Pi_thread thread2=new Pi_thread(2);  
  25.   double t1=System.currentTimeMillis();  
  26.   thread1.start();  
  27.   thread2.start();  
  28.   thread1.join();  
  29.   thread2.join();  
  30.   double t2=System.currentTimeMillis();  
  31.   sum_wy=thread1.sum+thread2.sum;  
  32.   pi_wy=thread1.step*sum_wy;  
  33.   para_t_wy=t2-t1;  
  34.   System.out.println("並行結果: "+pi_wy);  
  35.   System.out.println("並行時間: "+para_t_wy);  
  36.   Pi_thread thread3=new Pi_thread(
    3);  
  37.   t1=System.currentTimeMillis();  
  38.   thread3.seril_pi();  
  39.   t2=System.currentTimeMillis();  
  40.   pi_wy=thread3.sum*thread3.step;  
  41.   seri_t_wy=t2-t1;  
  42.   System.out.println("竄行結果: "+pi_wy);  
  43.   System.out.println("序列時間: "+seri_t_wy);  
  44.   System.out.println("加速比: "+(seri_t_wy/para_t_wy));  
  45.  }  
  46. }  

並行結果: 3.1415926135900225
並行時間: 484.0
竄行結果: 3.1415926135904266
序列時間: 1000.0
加速比: 2.0661157024793386
  1.  publicvoid run()   
  2. {  
  3.   int i;  
  4.   step=1.0/(double)num_steps_wy;  
  5.   for(i=start_wy;i<num_steps_wy;i+=2)  
  6.   {  
  7.    x=(i+0.5)*step;  
  8.    sum=sum+4.0/(1.0+x*x);  
  9.   }  
  10.  }  
  11.  publicvoid seril_pi()  
  12.  {  
  13.   int i;  
  14.   step=1.0/(double)num_steps_wy;  
  15.   for(i=1;i<num_steps_wy;i++)  
  16.   {  
  17.    x=(i+0.5)*step;  
  18.    sum=sum+4.0/(1.0+x*x);  
  19.   }  
  20.  }  
  21.  publicstaticvoid main(String[] args) throws InterruptedException {  
  22.   double pi_wy,sum_wy=0.0,seri_t_wy,para_t_wy;  
  23.   Pi_thread thread1=new Pi_thread(1);  
  24.   Pi_thread thread2=new Pi_thread(2);  
  25.   double t1=System.currentTimeMillis();  
  26.   thread1.start();  
  27.   thread2.start();  
  28.   thread1.join();  
  29.   thread2.join();  
  30.   double t2=System.currentTimeMillis();  
  31.   sum_wy=thread1.sum+thread2.sum;  
  32.   pi_wy=thread1.step*sum_wy;  
  33.   para_t_wy=t2-t1;  
  34.   System.out.println("並行結果: "+pi_wy);  
  35.   System.out.println("並行時間: "+para_t_wy);  
  36.   Pi_thread thread3=new Pi_thread(3);  
  37.   t1=System.currentTimeMillis();  
  38.   thread3.seril_pi();  
  39.   t2=System.currentTimeMillis();  
  40.   pi_wy=thread3.sum*thread3.step;  
  41.   seri_t_wy=t2-t1;  
  42.   System.out.println("竄行結果: "+pi_wy);  
  43.   System.out.println("序列時間: "+seri_t_wy);  
  44.   System.out.println("加速比: "+(seri_t_wy/para_t_wy));  
  45.  }  
  46. }  

並行結果: 3.1415926135900225
並行時間: 484.0
竄行結果: 3.1415926135904266
序列時間: 1000.0
加速比: 2.0661157024793386