中国科学院大学 计算流体力学 作业 13.2

上传人:亦*** 文档编号:288429425 上传时间:2022-05-05 格式:DOCX 页数:5 大小:26.60KB
返回 下载 相关 举报
中国科学院大学 计算流体力学 作业 13.2_第1页
第1页 / 共5页
中国科学院大学 计算流体力学 作业 13.2_第2页
第2页 / 共5页
中国科学院大学 计算流体力学 作业 13.2_第3页
第3页 / 共5页
中国科学院大学 计算流体力学 作业 13.2_第4页
第4页 / 共5页
中国科学院大学 计算流体力学 作业 13.2_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《中国科学院大学 计算流体力学 作业 13.2》由会员分享,可在线阅读,更多相关《中国科学院大学 计算流体力学 作业 13.2(5页珍藏版)》请在金锄头文库上搜索。

1、计算流体力学作业13.213.2实现矩阵相乘的并行计算矩阵A,B均为N*N的方阵,试计算矩阵C=AB;使用P个进程并行计算(N可以被P整除);矩阵A, B及C均采用分布式存储;A,C按行分割,B按列分割存储(见本稿47页)。要求编写计算C矩阵的MPI程序,并进行计算。实际计算时,矩阵A,B请采用如下值,N设为1004=e sin3引用=(巧 +cos4Xj)(l + H);Xj = (J1)/(N-1);m = (j-l)/(N-l)计算出c矩阵后,请计算,并由根节点打印出来。J1 11将s值与串行程序的结果进行比照,校验程序的正确性;使用1,2,4,10个进程进行计算,并利用MPI_Wtim

2、e()函数计算杷 序的运行时间;考核加速比及计算效率。要求:1)提交计算程序;2)使用L 2, 4, 10个进程计兑,提交 计算结果(S值及计算时间)、计算效率及加速比。首先,新建工程lyr3_2,配置MPI环境。然后在新建的源程序中编写程序(见报告末附,或lyr3_2.cpp)。注:可能是我自己电脑的问题,莫说N= 10000,就是N=1000我这里都显示溢出,所以本报告采用N=100进行呈现。编译生成完成后,得到.exe可执行文件。lyr_13 2 x64 Debug名称修改日期大小硝 lyr_13_22020/6/4 16:031,096 KB匚T lyr_13_2.ilk2020/6/

3、4 16:03Incremental Link.2,801 KB身 lyr_13_2.pdb2020/6/4 16:03Program Debug .6,412 KB用powershell运行该.exe文件。分别使用P=l, 2, 4, 10进行。结果如下图。B Windows PowerShells s s Sp o P1OP312OP78 2 4 5C:UsersdelllDesktoplyr_13_2x64Debug mpiexec -n 1 lyr_ of 1 , Time = 0. 008052, s_Dal一二 1558. 227221. S = 1558. 227221.C:Us

4、ersdelllDesktoplyr_13_2x64Debug mpiexec -n 2 lyr_ of 2 , Time = 0. 004499, socal = 848. 932615.of 2 , Time = 0.004489, s_local = 709.294606.S = 1558.227221.C:UsersdelllDesktoplyr_13_2x64Debug mpiexec -n 4 lyr_of4 , Time = 0. 004377,s local = 194. 668377.of4 , Time = 0. 004421,s_local = 588. 123712.o

5、f4 , Time = 0.004490,s_local = 654. 264238.of4 , Time = 0.004670,s-local = 121. 170894. S = 1558. 227221.C:Usersdel11Desktoplyr_13_2x64Debug mpiexec -n 10 lyrof10 ,Time = 0.012121,s_local = 179.387607.of10 ,Time = 0.012871,s_local = 91. 492762.of10 , Time = 0.008520,sZlocal = 137.653103.of10 ,Time =

6、 0.025890,socal = 284. 065067.of10 ,Time = 0.008643,s_local = 296.538526.of10 ,Time = 0.010157,s_local = 55. 867006.of10 ,Time = 0.012856,socal = 24. 568804.of10 ,Time = 0. 021615,sZlocal = 256.944916.of10 ,Time = 0.010785,s_local = 223.967626.of10 ,Time = 0.024458,s local = 7. 741805. S = 1558. 227

7、221.C:UsersdelllDesktoplyr_13_2x64Debug .of4 , Time = 0. 004377,s local = 194. 668377.of4 , Time = 0. 004421,s_local = 588. 123712.of4 , Time = 0.004490,s_local = 654. 264238.of4 , Time = 0.004670,s-local = 121. 170894. S = 1558. 227221.C:Usersdel11Desktoplyr_13_2x64Debug mpiexec -n 10 lyrof10 ,Time

8、 = 0.012121,s_local = 179.387607.of10 ,Time = 0.012871,s_local = 91. 492762.of10 , Time = 0.008520,sZlocal = 137.653103.of10 ,Time = 0.025890,socal = 284. 065067.of10 ,Time = 0.008643,s_local = 296.538526.of10 ,Time = 0.010157,s_local = 55. 867006.of10 ,Time = 0.012856,socal = 24. 568804.of10 ,Time

9、= 0. 021615,sZlocal = 256.944916.of10 ,Time = 0.010785,s_local = 223.967626.of10 ,Time = 0.024458,s local = 7. 741805. S = 1558. 227221.C:UsersdelllDesktoplyr_13_2x64Debug .PS0!1 !9!61313_2. exe13_2. exe13_2. exe13 2. exe由结果可知,使用1、2、4、10个进程计算出来的S相同,计算的 S 值均为 1558.227221c当进程数为1时可以看做是串行程序,其它为并行程序。从而可以

10、计算:加速比二串行程序的计算时间/n个并行程序的计算时间;计算效率=加速比/进程数。将各进程时间列于表格中,具体见lyr_数据处理.xlsx。N1241000.0080520.0044890.0046700.02445810.0044990.0044210.01015720.0044900.00852030.0043770.01078540.02589050.00864360.02161570.01212180.01287190.012856总时间0.0080520.0089880.0179580.147916从而,得到加速比和计算效率。进程数12410计算时间0.0080520.008988

11、0.0179580.147916加速比11.1162444110.4483795520.054436302计算效率10.5581222060.1120948880.00544363分析可以得知,一定程度下增加进程数可以提高运算速率,但由于算例较简单,进程数较多时;进程之间通信时间过长,导致计算时 间较单进程计算时间长。附源程序:#include#include#include#includeint main(int argc, char* argv) (int myid, numprocs, q; double sum_local, sum; int id send, id recv; MPI

12、Status status;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_C0MM_W0RLD, &myid);MPLComm _size(MPI_COMM WORLD, &numprocs);define N 100 此处可修改Ndefine P 1修改此处 P=l, 2, 4, 10#define NP N/Pdouble A1NPN, B1NNP, C1NPN;double BtempNNP, CtempNPNP, ANN, BNN;double start, finish; start = MPI_Wtime();矩阵初始化memset (Cl, 0

13、, sizeof (Cl);memset(Ctemp, 0, sizeof(Ctemp);for (int i = 0; i N; i+) (for (int j = 0; j N; j+) (Ai j = exp(j / (N - 1. 0) * sin(3. 0 * (i / (N - 1. 0);= (i / (N - 1.0) + cos(4.0 * (i / (N - 1.0) * (1. 0 + (j / (N - 1.0); )for (int k = 0; k NP; k+)for (int j = 0; j N; j+)q = NP * myid + k;Alk j = Aq j;Bljk =for (int i = 0; i NP; i+)(for (int j = 0; j N; j+)(for (int k = 0; k NP; k+) (q = NP * myid + k;CtempEi k = CtempEi k + (Al Ei j CliLq = CtempEik;)开始计算for (int step = 1; step = P) id send = id_send - P;)idrecv = myid - step;if (id_recv 0) (id recv = idrecv + P;recv,MPI_Sendrecv(Bl, N * NP,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号