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

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

. . 深 圳 大 学 实 验 报 告 课程名称:并行计算 实验名称:矩阵乘法的 OpenMP实现与性能分析 姓 名: 学号: 班 级: 实验日期: 2011 年 10 月 21 日、 11 月 4 日 一 . 实验目的 1) 用 OpenMP实现最基本的数值算法“矩阵乘法” 1 / 8 . . 2) 掌握 for 编译制导语句 3) 对并行程序进行简单的性能 二 . 实验环境 1) 硬件环境: 32 核 CPU、 32G存计算机; 2) 软件环境: Linux 、 Win2003、 GCC、MPICH、 VS2008; 4) Windows 登录方式:通过远程桌面连接 192.168.150.197 ,用户名和初始密码都是自己的 学号。 三 . 实验容 1. 用 OpenMP编写两个 n 阶的方阵 a 和 b 的相乘程序,结果存放在方阵 for 编译制导语句实现并行化操作 ,并调节 for 编译制导中 schedule 间最短,写出代码。 方阵 a 和 b 的初始值如下: , , ,...,12 , , ,..., , , ,...,a 3 , , ,..., a 3 4 5 n , , ,..., . . n n n n 1 n 11 1 1, 11 1 1 1 11 1 1 11 1 1 2 b 11 2 b 11 1 1 . . 2 ,...,2n 1 2 ,...,2n 1 1 1 1 1 c 中, 其中乘法用 的参数,使得执行时 输入: 方阵的阶 n、并行域的线程数 输出: c 中所有元素之和、程序的执行时间 提示: a,b,c 的元素定义为 int 型, c 中所有元素之各定义为 long long 型。 Windows 计时 : 用time.h 中的 clock_t clock( void ) Linux 计时 : #include sys/time.h timeval start,end; gettimeofday(start,NULL); gettimeofday(end,NULL); 函数得到当前程序执行的时间 2 / 8 . . coutexecution time:(end.tv_sec-start.tv_sec)+(double)(end.tv_usec-start.tv_usec)/10000 00seconds endl; 答: 在 windows 下使用 Microsofe Visual Studio 编程,源代码如下: #include omp.h #include stdio.h #include time.h #define NN 2000 int a[NN][NN], b[NN][NN]; longlong c[NN][NN]; void solve( int n, int num_thread) { int i, j, t, k, time; clock_t startTime, endTime; longlong sum; omp_set_num_threads(num_thread); for (i=0;in;i++) // 对矩阵 a和矩阵 b进行初始化 { t=i+1; for (j=0;jn;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) 3 / 8 . . for (i=0;in;i++) { for (j=0;jn;j++) { c[i][j]=0; for (k=0;kn;k++) { c[i][j]+=a[i][k]*b[k][j]; } } } } for (i=0;

文档评论(0)

1亿VIP精品文档

相关文档