日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

并行程序设计报告(MPI并行计算π,实现mandelbrot集)

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并行程序设计报告(MPI并行计算π,实现mandelbrot集) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼的github地址

一.熟悉MPI并行程序設計環境

1.硬件
電腦:HP暗夜精靈
內存:4G
處理器:ntel? Core? i5-6300HQ CPU @ 2.30GHz × 4
顯卡:NVIDIA 960M

2.軟件
系統:Ubuntu 16.04LTS
MPI版本:MPICH2

二.計算π\piπ

1.問題描述
已知π\piπ計算公式:π=∫0141+x2dx\pi=\int_{0}^{1}{\frac{4}{1+x^2}}dxπ=01?1+x24?dx已知有如下兩種算法求其數值積分:

  • 1.用梯形面積進行數值計算
            
  • 2.用矩形面積進行數值計算
            
    2.程序概要設計(用梯形法計算)
MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD);//把n廣播給所有進程MPI_Barrier(MPI_COMM_WORLD);init_size=1.0/n;//把圖形分為n個梯形,每個梯形的高為1/nfor(int i=rank+1;i<=n;i+=proc_num)//每個進程計算n/proc_num個梯形{x1=init_size*(i);x2=init_size*(i-1);x1=4/(1+x1*x1);x2=4/(1+x2*x2);part_sum=part_sum+x1+x2;//把梯形的上底和下底計算到部分和中}temp_pi=init_size*part_sum/2;//計算該進程所計算的梯形面積和//歸約函數,對所有進程所計算的面積求和即是pi值 MPI_Reduce(&temp_pi,&cal_pi,1,MPI::DOUBLE,MPI::SUM,0,MPI_COMM_WORLD);

3.實驗結果及其分析

分割塊數50000100000100000010000000100000000
無并行(運行時間 s)0.004290.006200.052380.294422.79347
兩個進程并行(運行時間 s)0.000740.001450.013700.137081.38299
三個進程并行(運行時間 s)0.000520.000980.009360.089950.92909
四個進程并行(運行時間 s)0.000400.000740.007430.077310.77368
五個進程并行(運行時間 s)0.028350.031050.054990.129291.19763
六個進程并行(運行時間 s)0.039480.046320.056340.136551.10347

部分結果截圖如下:
     
     
結果分析: 
         

分割塊數50000100000100000010000000100000000
無并行(加速比)
兩個進程并行(加速比)5.794.273.822.142.01
三個進程并行(加速比)8.256.335.593.273.01
四個進程并行(加速比)10.738.387.053.803.61
五個進程并行(加速比)0.150.200.955.352.33
六個進程并行(加速比)0.110.130.922.152.53

從上圖可知,在我的計算機上當開四個進程時性能達到最大,因為我的計算機是四核的可以做到四個進程真正的并行 .當數據兩較小時,無并行的比并行的更快的主要原因是計算量小的時候MPI通信的時間占了進程時間開銷的大部分.
##三.Mandelbrot集##
1.問題描述
曼德勃羅特集是人類有史以來做出的最奇異,最瑰麗的幾何圖形,曾被稱為"上帝的指紋". 這個點集均出自公式zn+1=zn2+cz_{n+1}=z_n^2+czn+1?=zn2?+c,所有使得無限迭代后的結果能保持有限數值的復數c的集合構成曼德勃羅特集.假定迭代一定次數后的復數即為曼德勃羅特數,計算一定區間的曼德勃羅特集,并根據數字不同的迭代次數給該點設為不同的顏色.滑動鼠標,即可計算一定區域的曼德勃羅特集并顯示出來
2.程序概要設計
           
           把區域分為n?nn*nn?n的區域按順序依次分給空閑的進程

//定義Zn+1=Zn^2+c的運算ComplexNumber f(ComplexNumber z, ComplexNumber c) {   ComplexNumber result;   result.real=c.real+z.real*z.real-z.imag*z.imag;   result.imag=c.imag+z.imag*z.real+z.real*z.imag;   return result;  }   
//定義曼德勃羅特的計算步驟,并在recv數組中記錄該點迭代的次數void Mandelbrot(double Xmin,double dx, int xloop, int xfrom, double Ymin,  double dy, int yloop, int yfrom)   {   int x, y, k;   ComplexNumber c, z;   for (x=0; x<xloop; x++)   {   c.real = Xmin+x*dx;   for (y=0; y<yloop; y++)   {   c.imag = Ymin+y*dy;   z.real = z.imag = 0.0f;   k = 0;   while (k<MAX_ITERATE_DEPTH && (z.real*z.real+z.imag*z.imag)<=MAX_MAGNITUDE)   {   z = f(z, c);   k++;   }   recv[xfrom+x][yfrom+y] = k;   }   }   }   
                // 對于一個進程如果接收到了再計算的命令,就計算分配給他的區域的曼德勃羅特集,區域信息存在info結構體中if (Redo == status.MPI_TAG)   {   MPI_Recv(&info,1,AreaType,0,Redo,MPI_COMM_WORLD,&status);   int txfrom=(info.xloop%slave_num)*info.sub_xloop;double tymin=(info.xloop/slave_num)*info.Yarea/slave_num+info.Ymin;int tyfrom=(info.xloop/slave_num)*info.sub_yloop; Mandelbrot(txmin,info.dx,info.sub_xloop,txfrom,tymin,info.dy,info.sub_yloop,tyfrom);MPI_Send(&info.xloop,1,MPI_INT,0,Over,MPI_COMM_WORLD);MPI_Send(recv,PIXEL_NUM,MPI_SHORT,0,Over,MPI_COMM_WORLD);   printf("send from slave %d\n", rank-1);   }   
   //opengl的閑時回調函數,主進程一直再執行該函數,接受子進程的數據,當接受到一個進程發來的數據時,主進程判斷還有無未計算的區域,如果有就分配給該進程void Idle()    {   //printf("34");static int recved = 0;   int pos;int i, j, x, y;   int xfrom, yfrom;   int flag, slave_rank;   MPI_Status status;   MPI_Iprobe(MPI_ANY_SOURCE,Over,MPI_COMM_WORLD, &flag, &status);   if (!flag)  return;   MPI_Recv(&pos,1,MPI_INT,status.MPI_SOURCE,Over,MPI_COMM_WORLD,&status);MPI_Recv(recv,PIXEL_NUM,MPI_SHORT,status.MPI_SOURCE,Over,MPI_COMM_WORLD,&status);   if (slave_num*slave_num== ++recved)   {   recved = 0;   end_time = MPI_Wtime();    printf("wall clock time = %f\n", end_time-start_time);   }   slave_rank = status.MPI_SOURCE-1;   printf("recieve from slave %d\n", slave_rank);   i = slave_rank;   xfrom = (pos%slave_num)*info.sub_xloop;   yfrom = (pos/slave_num)*info.sub_yloop;       for(x=0; x<info.sub_xloop; x++)   {   for (y=0; y<info.sub_yloop; y++)   indices[xfrom+x][yfrom+y] = recv[xfrom+x][yfrom+y];   }if(count<slave_num*slave_num){MPI_Send(&part[count],1,AreaType,slave_rank+1,Redo,MPI_COMM_WORLD);   count++;}glutPostRedisplay();}  

3實驗.結果及其分析
  
  
  

總結

以上是生活随笔為你收集整理的并行程序设计报告(MPI并行计算π,实现mandelbrot集)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲成人av在线 | 亚洲一级av无码毛片精品 | 精品人妻互换一区二区三区 | 公车乳尖揉捏酥软呻吟 | 丰满女人又爽又紧又丰满 | 欧美日韩中文字幕一区二区三区 | 久久三级| 激情九月婷婷 | 淫视频网站 | 污导航在线观看 | 丝袜视频在线 | 中文字幕一区二区三区四区不卡 | 日日爽 | 一区二区三区日韩 | 小草av | 欧美精品xxxxx | 在线观看黄网 | 欧美挤奶吃奶水xxxxx | 成人wwxx免费观看 | 色爽交| 日韩成人av在线 | 一区二区三区色 | 蜜桃视频在线播放 | 亚洲精品福利 | 免费成人美女女 | 一极毛片| 欧美日韩精品在线 | 日韩电影一区二区在线观看 | 中文字幕在线视频一区二区三区 | 日本福利视频导航 | 毛片av在线 | 成年网站免费观看 | 性农村xxxxx小树林 | 国产精品久线在线观看 | 最新激情网 | 老色鬼在线 | 成人在线国产 | 2019日韩中文字幕mv | 国产三级自拍 | 欧美综合网 | 亚洲精品2 | 国产午夜一区二区三区 | 亚洲国产精品视频 | av中文天堂在线 | 任你躁av一区二区三区 | 狠狠操免费视频 | 中文字幕第9页 | 欧美sm凌虐视频网站 | 久久国产精品电影 | 香蕉视频免费网站 | 黄床大片 | 欧美日韩在线视频播放 | 麻豆小视频| 538在线精品视频 | 亚洲人成电影网站 | 韩国av电影网站 | 深夜成人福利视频 | 91蜜臀精品国产自偷在线 | 日本少妇一区二区 | 成人黄性视频 | 精品在线免费观看 | 精品午夜福利视频 | 日本高清www免费视频 | 国产精品自拍在线 | 黄瓜视频在线免费看 | 不卡日韩| 在线免费看污片 | 青草精品在线 | 女女百合高h喷汁呻吟玩具 www.亚洲一区 | 小镇姑娘高清播放视频 | 日韩城人视频 | 欧美成人精品欧美一级乱黄 | 又黄又高潮的视频 | 国产91香蕉 | 国产精品久久AV无码 | 国产在线视频第一页 | 一级片免费观看 | 99r热| 久久久三级| 欧美成人中文字幕 | 国产精品国产精品国产专区蜜臀ah | 青青草97国产精品麻豆 | 亚洲精品二 | 天天躁日日躁aaaa视频 | 国产精品91一区二区 | 成人免费视频网站在线看 | 美女被c出白浆 | 国产亚洲欧美日韩精品 | 日韩在线免费 | 欧美射射 | 日韩成人免费观看 | 手机看片一区 | 男女做受视频 | 日韩在线视频在线观看 | 手机在线看永久av片免费 | 999久久久国产 | 欧美精品久久久久久久久老牛影院 | 中文字幕第一页在线 | 欧美夫妻性生活视频 |