OpenMP 之 矩阵乘法实现 (星星笔记)
来源:互联网 发布:色彩搭配书籍推荐 知乎 编辑:程序博客网 时间:2024/06/05 07:51
用OpenMP编写两个n阶的方阵A和B的相乘程序,结果存放在方阵C中,其中乘法用for编译制导语句实现并行化操作,并调节for编译制导中schedule的参数,使得执行时间最短。
方阵A和B的初始值如下:
方阵的阶n、并行域的线程数
输出:c中所有元素之和、程序的执行时间
具体的程序如下:
// ZhenLiu.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <omp.h>#include <stdio.h>#include <time.h>#define NN 2000int A[NN][NN], B[NN][NN];long long C[NN][NN];void solve(int n, int num_thread){int i, j, t, k, paralleltime,serialtime;clock_t startTime, endTime;long long sum;omp_set_num_threads(num_thread);//--------------对矩阵A和矩阵B进行初始化-------------for(i=0;i<n;i++) {t=i+1;for(j=0;j<n;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<n;i++){for(j=0;j<n;j++){C[i][j]=0;for(k=0;k<n;k++){C[i][j]+=A[i][k]*B[k][j];}}}}for(i=0;i<n;i++)for(j=0;j<n;j++) sum+=C[i][j];endTime=clock();paralleltime=endTime-startTime;printf("矩阵C所有元素和为sum=%lld 并行计算时间time=%dms\n",sum,paralleltime);//--------------------------------------------------------//--------------------------------------------------------startTime = clock();sum = 0;for(i=0;i<n;i++){for(j=0;j<n;j++){C[i][j]=0;for(k=0;k<n;k++){C[i][j]+=A[i][k]*B[k][j];}}}for(i=0;i<n;i++)for(j=0;j<n;j++) sum+=C[i][j];endTime = clock();serialtime=endTime-startTime;printf("矩阵C所有元素和为sum=%lld 串行计算时间time=%dms\n",sum,serialtime);printf("相对加速比为: %d/%d\n",serialtime,paralleltime);//----------------------------------------------------}int _tmain(int argc, _TCHAR* argv[]){int n, num_thread;printf("------------------ 软件工程 星星笔记 ------------------\n");printf("请输入矩阵的节数(整数N<=2000),再输入并行的线程数。\n\n");while(scanf("%d%d",&n,&num_thread)!=EOF){printf("你输入的矩阵节数为:%d并行线程数为:%d\n",n,num_thread);solve(n,num_thread);}return 0;}运行结果如下图:
0 0
- OpenMP 之 矩阵乘法实现 (星星笔记)
- java 多线程并行计算之矩阵乘法(星星笔记)
- java 多线程并行计算之矩阵乘法继承Thread类实现(星星笔记)
- OpenMP矩阵乘法实现
- Win32API、MFC、.NET多线程并行求矩阵乘法(星星笔记)
- OpenMP 之 sections 求素数、求和、求积分圆周率(星星笔记)
- OpenCL之矩阵乘法实现
- C++ 求一个矩阵的逆矩阵(星星笔记)
- Hadoop 之 Sort 排序 (星星笔记)
- OpenMP编程实例(向量点积、矩阵乘法和快排)
- OpenMP之矩阵转置
- 矩阵乘法学习笔记(一)
- 矩阵乘法学习笔记
- 【矩阵乘法】:矩阵乘法的基本实现
- C语言矩阵乘法(指针实现)
- 矩阵乘法(Strassen算法/C++实现)
- 矩阵乘法(Strassen 算法实现)
- 矩阵乘法实现
- Android TextView 属性详解
- java学习篇(五)---浅谈JUnit 4
- 跟着8张思维导图学习javascript
- Xib中的控件无法调整其位置
- IOS-- UIView中的坐标转换
- OpenMP 之 矩阵乘法实现 (星星笔记)
- 握手李彦宏:张亚勤开启百度之旅
- 【cocos2D-x学习】5.坐标系其三——再看Cocos中的坐标系
- B树、B+树、B*树
- hdu 4274 Spy's Work(2012 长春网络赛 树形DP)
- Codeforces 464 C. Substitutes in Number
- C++编程注意事项
- 查看php编译参数
- 解密“万达电商”