并行计算实验二报告Word格式.docx
- 文档编号:16079170
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:16
- 大小:221.77KB
并行计算实验二报告Word格式.docx
《并行计算实验二报告Word格式.docx》由会员分享,可在线阅读,更多相关《并行计算实验二报告Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
在一个局域网中建立能够互相通信的两台计算机,实现两台计算机并行运算。
二、实验内容:
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.改变上述并行程序中三重循环的顺序,统计不同循环顺序的运行时间,性能及效率,将结果填写在下表中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 并行 计算 实验 报告