网站大量收购闲置独家精品文档,联系QQ:2885784924

棋盘划分下的矩阵—向量乘法题库.docx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
*******************实践教学*******************大学理学院 2016年春季学期并行计算课程设计专业班级:_____________________姓名: _____________________学号:______________________指导教师:______________________成绩:_______________________棋盘划分下的矩阵—向量乘法摘要并行计算是计算机科学中重要研究内容,已有几十年的发展历程,它是在串行计算的基础上演变而来的。创建和应用并行计算的最主要原因是因为它是解决单处理机速度瓶颈的最好的方法之一。并行计算的发展是大型复杂科学、工程问题的计算需求以及与当代社会相关问题的需求。并行计算的研究需要并行计算机系统、并行算法和并行程序设计等专家以及并行应用领域专家的共同参与。矩阵—向量乘法同样可以有带状划分和棋盘划分下两中并行算法。所谓棋盘划分(Checker?Board?Partitioning)就是将方阵划分成若干个子方阵,每个子方阵指派给一个处理器,此时任意处理器均不包含整行或整列。目录一、题目及要求2二、设计算法、算法原理2三、算法描述、设计流程33.1算法描述33.2设计流程图4四、源程序代码及运行结果54.1源代码54.2题目运行结果示意图12五、算法分析、优缺点125.1算法分析125.2优缺点12六、总结13七、参考文献14一、题目及要求棋盘划分的矩阵-向量乘法已知,求二、设计算法、算法原理所谓棋盘划分(Checker Board Partitioning)就是将方阵划分成若干子方阵,每个子方阵指派给一个处理器,此时任一处理器均不包含整行整列。和带状划分类似,棋盘划分可分为块棋盘划分(Block- Checker Board Partitioning)和循环棋盘划分(Cycile-Checker Board Partitioning)。如图一所示:块棋盘划分)(b.循环棋盘划分)图一两种棋盘划分矩阵划分成棋盘状可和处理器连成二维网孔相对应。对与一个nn的方阵和的二维处理器,每个处理器均匀的分配有2/p个矩阵元素。值得指出的是,和带状划分相比,棋盘划分可开发出更高的并行度。例如,对于一个nn的方阵,棋盘划分最多可以使用n2个处理器进行并行计算,但使用带状划分可用的处理器不能多于n个。算法描述、设计流程3.1算法描述划分(块棋盘划分): Pij存放ai,j, xi置入Pi,i中算法: 对p=n2情形①每个Pi,i向Pj,i播送xi(一到多播送);②按行方向进行乘-加与积累运算,最后一列Pi,n-1收集的结果为yi;注: 对pn2情形,p个处理器排成的二维网孔,算法中Pi,i向Pj,i播送X中相应的个分量 (1)网孔连接的计算时间Tp(CT): .X中相应分量置入Pi,i的通讯时间: .按列一到多播送时间: .按行单点积累的时间:示例如图二所示:图二 p时棋盘划分的矩阵—向量乘法3.2设计流程图图三程序流程设计图四、源程序代码及运行结果4.1源代码#includestdio.h#includestdlib.h#include mpi.h#define intsize sizeof(int)#define floatsize sizeof(float)#define A(x,y) A[x*N+y]#define B(x) B[x]#define C(x) C[x]#define a(x) a[x]#define b(x) b[x]#define c(x) c[x]float *a,*b,*c;float *A,*B,*C;int M,N,K,P;int m,n;int myid;FILE *dataFile;MPI_Status status;double time1;double starttime,endtime;void readData(){ int i,j; starttime=MPI_Wtime(); dataFile=fopen(dataIn.txt,r); fscanf(dataFile,%d%d,M,N); A=(float*)malloc(floatsize*M*N); for(i=0;iM;i++) { for(j=0;jN;j++) { fscanf(dataFile,%f,A+i*N+j); } } fscanf(dataFile,%d,K); if(N!=K) {

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档