并行计算-实验二-矩阵乘法的OpenMP实现及性能分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

并行计算-实验二-矩阵乘法的OpenMP实现及性能分析

深圳大学

实验报告

课程名称:并行计算

实验名称:矩阵乘法的OpenMP实现及性能分析姓名:

学号:

班级:

实验日期:2011年10月21日、11月4日

一. 实验目的

1) 用OpenMP 实现最基本的数值算法“矩阵乘法”

2) 掌握for 编译制导语句

3) 对并行程序进行简单的性能

二. 实验环境

1) 硬件环境:32核CPU 、32G 内存计算机;

2) 软件环境:Linux 、Win2003、GCC 、MPICH 、VS2008;

4) Windows 登录方式:通过远程桌面连接192.168.150.197,用户名和初始密码都是自己的学号。

三. 实验内容

1. 用OpenMP 编写两个n 阶的方阵a 和b 的相乘程序,结果存放在方阵c 中,其中乘法用for 编译制导语句实现并行化操作,并调节for 编译制导中schedule 的参数,使得执行时间最短,写出代码。

方阵a 和b 的初始值如下:

⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-++++=12,...,2,1,..2,...,5,4,31,...,4,3,2,...,3,2,1n n n n n n n a ⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=1,...,1,1,1..1,...,1,1,11,...,1,1,11,...,1,1,1b

输入:

方阵的阶n、并行域的线程数

输出:

c中所有元素之和、程序的执行时间

提示:

a,b,c的元素定义为int型,c中所有元素之各定义为long long型。

Windows计时:

中的clock_t clock( void )函数得到当前程序执行的时间

Linux计时:

#include

timeval start,end;

gettimeofday(&start,NULL);

gettimeofday(&end,NULL);

cout<<"execution time:"<< (__sec)+(double)(_u

_usec)/ 1000000<<"seconds"

<

答:

在windows下使用Microsofe Visual Studio编程,源代码如下:

#include

#include

#include

#define NN 2000

int a[NN][NN], b[NN][NN];

long long c[NN][NN];

void solve(int n, int num_thread)

{

int i, j, t, k, time;

clock_t startTime, endTime;

long long sum;

omp_set_num_threads(num_thread);

for(i=0;i

{

t=i+1;

for(j=0;j

{

a[i][j]=t++;

b[i][j]=1;

}

}

startTime=clock();

sum=0;

#pragma omp parallel shared(a,b,c) private(i,j,k)

{

#pragma omp for schedule(dynamic)

for(i=0;i

{

for(j=0;j

{

c[i][j]=0;

for(k=0;k

{

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

}

}

}

}

for(i=0;i

endTime=clock();

time=endTime-startTime;

printf("sum=%lld time=%dms\n",sum,time);

}

int main()

{

int n, num_thread;

while(scanf("%d%d",&n,&num_thread)!=EOF)

{

solve(n,num_thread);

}

return 0;

}

2. 分析矩阵相乘程序的执行时间、加速比和效率:方阵阶固定为1000,节点数分别取1、2、4、8、16和32时,为减少误差,每项实验进行5次,取平均值作为实验结果。

答:串行执行时程序的执行时间为:T =

15.062s

加速比=顺序执行时间/并行执行时间

效率=加速比/节点数

表1 不同节点数下程序的执行时间(秒)

1 2 4 8 16 32

16.640 8.172 4.078 2.125 1.093 0.594 第

1

16.422 8.156 4.172 2.141 1.078 0.578 第

2

16.406 8.266 4.078 2.125 1.094 0.563 第

3

第16.781 8.172 4.079 2.109 1.094 0.563

相关文档
最新文档