并行计算实验二报告.docx

上传人:b****4 文档编号:6621128 上传时间:2023-05-10 格式:DOCX 页数:17 大小:221.85KB
下载 相关 举报
并行计算实验二报告.docx_第1页
第1页 / 共17页
并行计算实验二报告.docx_第2页
第2页 / 共17页
并行计算实验二报告.docx_第3页
第3页 / 共17页
并行计算实验二报告.docx_第4页
第4页 / 共17页
并行计算实验二报告.docx_第5页
第5页 / 共17页
并行计算实验二报告.docx_第6页
第6页 / 共17页
并行计算实验二报告.docx_第7页
第7页 / 共17页
并行计算实验二报告.docx_第8页
第8页 / 共17页
并行计算实验二报告.docx_第9页
第9页 / 共17页
并行计算实验二报告.docx_第10页
第10页 / 共17页
并行计算实验二报告.docx_第11页
第11页 / 共17页
并行计算实验二报告.docx_第12页
第12页 / 共17页
并行计算实验二报告.docx_第13页
第13页 / 共17页
并行计算实验二报告.docx_第14页
第14页 / 共17页
并行计算实验二报告.docx_第15页
第15页 / 共17页
并行计算实验二报告.docx_第16页
第16页 / 共17页
并行计算实验二报告.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

并行计算实验二报告.docx

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

并行计算实验二报告.docx

并行计算实验二报告

广东技术师范学院实验报告

学院:

计算机科学学院

专业:

计算机科学与技术

班级:

成绩:

姓名:

学号:

组别:

组员:

实验地点:

工业中心203

实验日期:

指导教师签名:

预习情况

操作情况

考勤情况

数据处理情况

实验

(二)项目名称:

并行程序设计

一、实验目的

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

二、实验内容:

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

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

提示:

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

优化选项

运行时间/s

性能/MFLOPS

效率/%

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

0.000978616

0.637

51.9

去掉不相关的输出

0.00102164

0.956

77.9

源程序代码:

#include"mpi.h"

#include

#include

#include

#include

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);

MPI_Comm_rank(MPI_COMM_WORLD,&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

{

for(j=0;j

{

sinput<

}

}

cout<

cout<

for(i=0;i

{

for(j=0;j

{

sinput<

}

}

*/

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

 

cout<<"Process:

"<

"<

if(myid==0)

{

t=10000;

startwtime=MPI_Wtime();

}

if(rank==0)

{

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

ifstreamin("sinput.txt");

//cout<<"请输入矩阵a的行列数:

\n行数:

";

//cin>>ArraySize[0];

//ArraySize[0]=N;

//cout<<"列数:

";

//cin>>ArraySize[1];

//ArraySize[1]=M;

 

//cout<<"请输入矩阵b的行列数:

\n行数:

";

//cin>>ArraySize[2];

//ArraySize[2]=H;

//cout<<"列数:

";

//cin>>ArraySize[3];

//ArraySize[3]=P;

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

/*if(ArraySize[0]>N||ArraySize[1]>M)

{

cout<<"你输入的矩阵a过大!

";

exit(0);

}

if(ArraySize[2]>M||ArraySize[3]>P)

{

cout<<"你输入的矩阵b过大!

";

exit(0);

}

*/

if(ArraySize[1]!

=ArraySize[2])

{

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

\n";

exit(0);

}

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

/*for(i=0;i

{

for(j=0;j

{

c[i][j]=0;//初始化矩阵c

}

}

*/

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

srand((unsigned)time(NULL));//初始化随机数生成器

cout<<"随机生成a矩阵:

"<

for(i=0;i

{

for(j=0;j

{

in>>a[i][j];

a[i][j]=rand()%100;//是生成0到100之间的随机数,做矩阵a的元素

cout<

}

cout<

}

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

cout<<"随机生成b矩阵:

"<

for(i=0;i

{

for(j=0;j

{

in>>b[i][j];

b[i][j]=rand()%100;//生成0到100之间的随机数,做矩阵b的元素

cout<

}

cout<

}

}

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

//i-j-k优化算法

/*for(i=0;i

{

for(j=0;j

{

for(k=0;k

{

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

}

}

}

*/

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

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

//j-k-i优化算法

for(j=0;j

{

for(k=0;k

{

for(i=0;i

{

c[i][j]=0;

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

}

}

}

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

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

/*for(i=0;i

{

for(j=0;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);

if(rank==0)

cout<<"矩阵a与矩阵b的乘积为:

"<

if(numprocs-1)

{

for(i=0;i

{

for(j=0;j

{

cout<<2*c[i][j]<<"";

}

cout<

}

}

else

{

for(i=0;i

{

for(j=0;j

{

cout<

}

cout<

}

}

if(myid==0)

{

endwtime=MPI_Wtime();

cout<<"程序运行时间为:

";

cout<

}

MPI_Finalize();

}

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

循环顺序

运行时间/s

性能/MFLOPS

效率/%

I,J,K

0.000973867

0.838

68.3

I,K,J

0.000992584

0.869

70.8

J,K,I

0.00125351

0.934

76.1

J,I,K

0.00106103

0.802

65.4

K,I,J

0.00123954

0.902

73.5

K,J,I

0.00124681

0.976

79.6

3、实验分析与结论

在宿舍与同学无法实现双机或多机并行计算,各个主机在vc++中编译生成已通过,但是最后实现多机运算时失败,各个主机都能单机运行,而如今没有上机课,实验上交时间期限将近,无法到机房实现并行计算,因此,本实验只给出单机运算的结果。

之前在上机课时弄了个手动输入的小矩阵,但因矩阵太小,回到宿舍修改代码随机生成比较大的矩阵,却是不能实现多机运算了。

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2