并行计算实验二报告Word格式.docx

上传人:b****5 文档编号:16079170 上传时间:2022-11-18 格式:DOCX 页数:16 大小:221.77KB
下载 相关 举报
并行计算实验二报告Word格式.docx_第1页
第1页 / 共16页
并行计算实验二报告Word格式.docx_第2页
第2页 / 共16页
并行计算实验二报告Word格式.docx_第3页
第3页 / 共16页
并行计算实验二报告Word格式.docx_第4页
第4页 / 共16页
并行计算实验二报告Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

并行计算实验二报告Word格式.docx

《并行计算实验二报告Word格式.docx》由会员分享,可在线阅读,更多相关《并行计算实验二报告Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

并行计算实验二报告Word格式.docx

在一个局域网中建立能够互相通信的两台计算机,实现两台计算机并行运算。

二、实验内容:

1.编写一个计算矩阵乘积的并行程序。

统计采用不同优化选项编译该程序生成的代码的运行时间,根据程序的计算量和运行时间计算出程序的实际浮点性能(以MFLOPS为单位)和效率(实际性能/处理器峰值性能),并将结果填写在下表中(根据需要加行)。

提示:

用“time程序名”可以得到程序的运行时间。

优化选项

运行时间/s

性能/MFLOPS

效率/%

减少矩阵初始化的循环次数

0.000978616

0.637

51.9

去掉不相关的输出

0.00102164

0.956

77.9

源程序代码:

#include"

mpi.h"

#include<

iostream.h>

#include<

stdlib.h>

time.h>

fstream.h>

constintN=10,M=10,H=10,P=10;

voidmain(intargc,char*argv[])

{

inti,j,k,t;

inta[N][M];

//矩阵A

intb[M][P];

//矩阵B

longintc[N][P];

//结果矩阵

intArraySize[4];

//矩阵的行数和列数

intmyid,rank,numprocs,namelen;

doublemypi,pi;

doublestartwtime,endwtime;

charprocessor_name[MPI_MAX_PROCESSOR_NAME];

MPI_Init(&

argc,&

argv);

MPI_Comm_size(MPI_COMM_WORLD,&

numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&

myid);

rank);

MPI_Get_processor_name(processor_name,&

namelen);

 

ArraySize[0]=N;

ArraySize[1]=M;

ArraySize[2]=H;

ArraySize[3]=P;

ofstreamsinput;

sinput.open("

sinput.txt"

);

//新建一个sinput.txt

//**************************************************************

//使用的代码

/*for(i=0;

i<

ArraySize[0];

i++)

{

for(j=0;

j<

ArraySize[1];

j++)

{

sinput<

<

rand()%100<

"

"

;

}

}

cout<

endl;

for(i=0;

ArraySize[2];

ArraySize[3];

*/

cout<

Process:

myid<

主机名:

processor_name<

if(myid==0)

{

t=10000;

startwtime=MPI_Wtime();

}

if(rank==0)

//******************************************************

ifstreamin("

//cout<

请输入矩阵a的行列数:

\n行数:

//cin>

>

ArraySize[0];

//ArraySize[0]=N;

列数:

//cin>

ArraySize[1];

//ArraySize[1]=M;

请输入矩阵b的行列数:

ArraySize[2];

//ArraySize[2]=H;

ArraySize[3];

//ArraySize[3]=P;

//**********************************************

/*if(ArraySize[0]>

N||ArraySize[1]>

M)

cout<

你输入的矩阵a过大!

exit(0);

if(ArraySize[2]>

M||ArraySize[3]>

P)

你输入的矩阵b过大!

*/

if(ArraySize[1]!

=ArraySize[2])

你输入的两个矩阵不可以相乘!

\n"

//*****************************************

/*for(i=0;

c[i][j]=0;

//初始化矩阵c

//********************************

srand((unsigned)time(NULL));

//初始化随机数生成器

随机生成a矩阵:

ArraySize[0]<

行,"

ArraySize[1]<

列"

in>

a[i][j];

a[i][j]=rand()%100;

//是生成0到100之间的随机数,做矩阵a的元素

cout<

a[i][j]<

//输出矩阵a

//********************************************************

随机生成b矩阵:

ArraySize[2]<

ArraySize[3]<

b[i][j];

b[i][j]=rand()%100;

//生成0到100之间的随机数,做矩阵b的元素

b[i][j]<

//输出矩阵b

}

//****************************************************

//i-j-k优化算法

/*for(i=0;

for(j=0;

j+=numprocs)//k++

for(k=0;

k<

k++)

c[i][j]=c[i][j]+a[i][k]*b[k][j];

//计算

*/

//*******************************************

//j-k-i优化算法

for(j=0;

for(k=0;

k+=numprocs)//k++

for(i=0;

c[i][j]=0;

//*******************************************

//对矩阵b转置可以节省存储空间

/*for(i=0;

i<

NUM;

i++)

for(j=0;

j<

i;

j++)

temp=B[i][j];

B[i][j]=B[j][i];

B[j][i]=temp;

*/

MPI_Reduce(&

mypi,&

pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);

矩阵a与矩阵b的乘积为:

if(numprocs-1)

i++)

{

2*c[i][j]<

else

c[i][j]<

endwtime=MPI_Wtime();

程序运行时间为:

endwtime-startwtime<

MPI_Finalize();

}

2.改变上述并行程序中三重循环的顺序,统计不同循环顺序的运行时间,性能及效率,将结果填写在下表中

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1