ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:116.99KB ,
资源ID:6729932      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-6729932.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(矩阵乘法的OpenMP实现与性能分析报告文档格式.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

矩阵乘法的OpenMP实现与性能分析报告文档格式.docx

1、sys/time.htimeval start,end;gettimeofday(&start,NULL);end,NULL);coutexecution time: (end.tv_sec-start.tv_sec)+(double)(end.tv_usec-start.tv_usec)/ 1000000seconds stdio.h#define NN 2000int aNNNN, bNNNN;long long cNNNN;void solve(int n, int num_thread) int i, j, t, k, time; clock_t startTime, endTime;

2、 long long sum; omp_set_num_threads(num_thread); for(i=0;in;i+)/对矩阵a和矩阵b进行初始化 t=i+1; for(j=0;jj+) aij=t+; bij=1; startTime=clock(); sum=0;#pragma omp parallel shared(a,b,c) private(i,j,k) #pragma omp for schedule(dynamic)i+) cij=0; for(k=0;kk+) cij+=aik*bkj; i+)for(j=0;j+) sum+=cij; endTime=clock();

3、 time=endTime-startTime; printf(sum=%lld time=%dmsn,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 不

4、同节点数下程序的执行时间(秒) 节点数实验结果12481632第1次16.6408.1724.0782.1251.0930.594第2次16.4228.1564.1722.1411.0780.578第3次16.4068.2661.0940.563第4次16.7814.0792.109第5次8.171平均值16.53428.18744.09702.12501.09040.5752图1 不同节点数下程序的执行时间图2 不同节点数下程序的加速比图3 不同节点数下程序的效率执行时间的分析:随着节点数的增加,程序的执行时间减少,大概可以从结果中得出,随着节点书的增加一倍,执行时间减少一半加速比的分析:随

5、着节点数的增加,程序的加速比增加,大概可以从结果中得出,随着节点书的增加一倍,加速相应的增加接近一倍效率的分析:随着节点数的增加,程序的效率逐渐减少3. 分析矩阵相乘程序的问题规模与效率的关系:固定节点数为4,让方阵阶从200到1600之间变化,每隔100取一个值。(为了减少时间,每项实验可只执行1次)表2 相同节点数下不同问题规模程序的执行时间与效率方阵阶数并行执行时间串行执效率2000.0150.0470.7833333000.0160.1091.7031254000.0630.2971.1785715000.1560.6571.0528856000.4061.641.0098527000

6、.9073.5780.9862188001.6096.360.9881919002.57810.1090.98031410003.81214.8910.97658711005.3921.0320.9755112007.34428.7340.97814513009.68837.9370.978969140012.42248.640.978908150015.65660.9380.973077160019.23474.8290.972614图3.1 不同问题规模下程序的效率问题规模与效率的关系分析:随着问题规模的增加,程序的效率趋于稳定,但是略微有点下降。嵌套循环中,如果外层循环迭代次数较少时,如

7、果将来CPU核数增加到一定程度时,创建的线程数将可能小于CPU核数。另外如果内层循环存在负载平衡的情况下,很难调度外层循环使之达到负载平衡。下面以矩阵乘法作为例子来讲述如何将嵌套循环并行化,以满足上述扩展性和负载平衡需求。一个串行的矩阵乘法的函数代码如下:/*矩阵串行乘法函数param int*a -指向要相乘的第个矩阵的指针param int row_a -矩阵a的行数param int col_a -矩阵a的列数param int *b 指向要想成的第个矩阵的指针param int row_b -矩阵b的行数param int col_b -矩阵b的列数param int *c -计算结果

8、的矩阵的指针param int c_size -矩阵c的空间大小(总元素个数)return void 无*/void Martrix_Multiply(int *a, int row_a,int col_a,int*b,int row_b,int col_b, int*c,int c_size) If(col_a!=row_b|c_sizerow_a*col_b) return;int i,j,k;/#pragma omp for private(i,j,k) for(i = 0;row_a; int row_i=i*col_a; int row_c=i*col_b; for(j=0;col_

9、b; crow_c+j=0; for(k=0;row_b; crow_c+j+=arow_i+k*bk*col_b+j;如果在外层循环前面加上OpenMP的for语句时,它就变成了一个并行的矩阵乘法函数,但是这样简单地将其并行化显然无法满足前面所述的扩展性需求。其实可以采用一个简单地方法将最外层循环和第2层循环合并成一个循环,下面便是采用合并循环后的并行实现。void Parallel_Matrix_Multiply(int *a,int row_a,int col_a,int *b,int row_b,int col_b,int *c,int c_size)=row_b)int index;

10、int border=row_a*col_b;i=0;j=0;/#pragma omp parallel private(i,j,k) num_threads(dtn(border,1) for(index = 0;indexborder;index+) i=index/col_b; j=index%col_b;从上面代码可以看出,合并后的循环便捷border=row_a*col_b;即等于原来的两个循环边界之积,然后再循环中计算出原来的外层循环和第2层循环的迭代变量i和j,采用除法和取余来求出i和j的值。需要值得注意的是,上面求i和j的值必须要保证循环迭代的独立性,即不能有循环迭代间的依赖关系。不能讲求i和j的值得过程优化成如下的形式if(j=col_b) j=0; i+;/.此处代表实际的矩阵乘法代码j+; 上面这种优化,省去了除法,效率高,但是只能在串行代码中使用,因为它存在循环迭代间的依赖关系,无法将其正确地并行

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

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