高性能矩阵乘法精选文档.ppt

上传人:石*** 文档编号:70966797 上传时间:2023-01-31 格式:PPT 页数:27 大小:1.56MB
返回 下载 相关 举报
高性能矩阵乘法精选文档.ppt_第1页
第1页 / 共27页
高性能矩阵乘法精选文档.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《高性能矩阵乘法精选文档.ppt》由会员分享,可在线阅读,更多相关《高性能矩阵乘法精选文档.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、高性能矩阵乘法本讲稿第一页,共二十七页2023/1/302并行算法优化研究相对于传统面向对象串行算法的并行算法优化研究相对于传统面向对象串行算法的4个挑战:个挑战:同步:两个或者多个线程协调其行为的过程通信:与线程之间交换数据相关的带宽和延迟问题负载均衡:多个线程之间工作量分布的情况,给各个线程(执行核)分配均匀的工作可扩展性:衡量在性能更加强劲的系统上运行软件时能否有效利用更多线程的指标,观察应用程序在更高级的平台上运行4核到8核线性增长本讲稿第二页,共二十七页2023/1/303多线程(核)设计主要分解模式多线程(核)设计主要分解模式任务分解:对程序根据其执行的功能进行分解的过程数据分解:

2、将应用程序根据各任务所处理的数据而非按任务的天然特性来进行分解数据流分解:研究数据在诸任务之间如何流动,根据任务之间的数据流关系对问题进行分解模式分解方式任务级并行模式任务分解DivideandConquer任务/数据分解几何分解模式数据分解流水线模式数据流分解波峰(wavefront)模式数据流分解本讲稿第三页,共二十七页2023/1/304多线程(核)设计主要分解模式多线程(核)设计主要分解模式任务分解:对程序根据其执行的功能进行分解的过程数据分解:将应用程序根据各任务所处理的数据而非按任务的天然特性来进行分解数据流分解:研究数据在诸任务之间如何流动,根据任务之间的数据流关系对问题进行分解

3、分解方式设计说明任务分解不同的程序行为采用不同的线程实现常用于GUI应用程序数据分解多个线程对不同的数据块执行相同的操作常用于音频、图像处理和科学计算应用程序数据流分解一个线程的输出作为另一个线程的输入尤其应注意尽量消除启动和排空延迟本讲稿第四页,共二十七页2023/1/305矩阵乘法算法探讨矩阵乘法算法探讨矩阵乘法算法探讨矩阵乘法算法探讨在工程科学计算中,矩阵乘积是最基本的运算典型的n阶稠密方阵乘积算法的时间复杂度是O(n3)。目前对大型矩阵乘积运算的处理主要是采用分治思想,将矩阵分布在多个节点上,但每个结点上的小矩阵仍要立方级乘法次数。基于分之思想的两种划分策略:条形划分和块状(棋盘)划分

4、的6种常见分布式矩阵乘法并行算法。本讲稿第五页,共二十七页2023/1/306基于不同划分策略的矩阵乘法算法探讨基于不同划分策略的矩阵乘法算法探讨1 1、条形(、条形(、条形(、条形(stripedpartitioningstripedpartitioning)划分的矩阵乘法并行算法)划分的矩阵乘法并行算法)划分的矩阵乘法并行算法)划分的矩阵乘法并行算法行条划分 列条划分两两组合:行列、行行、列列、列行本讲稿第六页,共二十七页2023/1/307基于不同划分策略的矩阵乘法算法探讨基于不同划分策略的矩阵乘法算法探讨基于不同划分策略的矩阵乘法算法探讨基于不同划分策略的矩阵乘法算法探讨2 2、块状划

5、分、块状划分、块状划分、块状划分(checkerboardpartitioning)(checkerboardpartitioning)的矩阵乘法并行算法的矩阵乘法并行算法的矩阵乘法并行算法的矩阵乘法并行算法称为棋盘划分本讲稿第七页,共二十七页CannonDescriptionforimplementationofMPIprogramtocomputeMatrixMatrixMultiplicationusingblockcheckerboardpartitioningandCannonAlgorithm2023/1/308本讲稿第八页,共二十七页CannonObjectiveComputin

6、gthematrix-matrixmultiplicationonSMPSystem.UseblockcheckerboardpartitioningofthematricesandCannonsAlgorithm.AssumptionSizeofthesquarematricesp=q2andthesizeofsquarematricesAandBisevenlydivisiblebyq.Itisassumedthatthenumberofblocksareequaltothenumberofprocessors.2023/1/309本讲稿第九页,共二十七页CannonCannonsalgo

7、rithmisbasedoncartesianvirtualtopologyAandBaresquarematricesofsizenandCbetheoutputmatrix.Thesematricesaredivedintoblocksorsubmatricestoperformmatrix-matrixoperationsinparallelnxnmatrixAcanberegardedasqxqarrayofblocksAi,j(0=iq,0=jq)suchthateachblockisan(n/q)x(n/q)submatrixWeusepprocessorstoimplementt

8、heblockversionofmatrixmultiplicationinparallelbychoosingqasasquarerootofpandcomputeadistinctblockCi,joneachprocessor.2023/1/3010本讲稿第十页,共二十七页传统并行传统并行2023/1/3011本讲稿第十一页,共二十七页传统并行传统并行ThematricesAandBarepartitionedintopblocks,A i,j andBi,j(0=iq,0=jq)ofsize(n/qxn/q)oneachprocess.Theseblocksaremappedontoa

9、qxqlogicalmeshofprocesses.TheprocessesarelabeledfromP0,0toPq-1,q-1.2023/1/3012本讲稿第十二页,共二十七页传统并行传统并行ProcessPi,jinitiallystoreblockmatricesAi,jandBi,jandcomputesblockCi,jofresultmatrix.TocomputesubmatrixCi,j,weneedallsubmatrices,Ai,kandBk,j(0=kq).Toacquirealltherequiredblocks,anall-to-allbroadcastofma

10、trixAi,jsisperformedineachrowandsimilarlyineachcolumnofmatrixBi,js.MPIcollectivecommunicationisusedtoperformthisoperations.2023/1/3013本讲稿第十三页,共二十七页传统并行传统并行AfterPi,jacquires,Ai,0,Ai,1,Ai,2,Ai,q-1andB0,j,B1,j,B2,j,Bq-1,j,itperformstheserialblockmatrixtomatrixmultiplicationandaccumulatesthepartialblock

11、matrixCi,jofmatrixC.ToobtaintheresultantproductmatrixC,processeswithrank0gathersalltheblockmatricesbyusingMPI_Gathercollectivecommunicationoperation.2023/1/3014本讲稿第十四页,共二十七页Cannonpprocessorsarrangedinqxqsquaregridofprocessorsandtheinputmatrices.AandBaredistributedamongtheprocessesincheckerboardfashi

12、on.ItresultsinconstructingpblockmatricesofAandB.Itusesonlypoint-to-pointcommunicationforcircularlyshiftingblocksofmatrixAandmatrixBamongpprocesses.2023/1/3015本讲稿第十五页,共二十七页Cannon-initalThealgorithmproceedsinqstages.ThefirststepinthisalgorithmistoperforminitialalignmentoftheblockmatrixAandblockmatrixB

13、.TheblocksofmatrixAarecircularlyshiftedtotheipositionstoleftintherowofthesquaregridofprocesses,whereiistherownumberoftheprocessinthemesh.TheblocksofmatrixBarecircularlyshiftedjpositionsupwards,wherejisthecolumnnumberoftheprocessintheprocessesmesh.2023/1/3016本讲稿第十六页,共二十七页Cannon-inital2023/1/3017本讲稿第十

14、七页,共二十七页Cannon-runningThealgorithmperformsthefollowingstepsineachstage:1.MultiplytheblockofmatrixAandmatrixBandaddtheresultantmatrixtogettheblockmatrixC,whichisinitiallysettozero.2.CircularlyshifttheblocksofmatrixAtoleftintherowsoftheprocessesandtheblocksofmatrixBupwardsinthecolumnsofthesquaregridof

15、processesinawraparoundmanner.2023/1/3018本讲稿第十八页,共二十七页Cannon-running2023/1/3019本讲稿第十九页,共二十七页Cannon-running2023/1/3020本讲稿第二十页,共二十七页书中书中Cannon-bug2023/1/3021MPI_SendandMPI_Recvisnotusedforpoint-to-pointcommunicationbecauseifalltheprocessescallMPI_SendorMPI_Recvindifferentorderthe deadlockeddeadlockedsi

16、tuationmayarise.Howtofix?指派一个缓冲区,使用MPI_Irecv/MPI_Isend非阻塞式通讯函数,MPI_wait.MPI_Sendrecv.本讲稿第二十一页,共二十七页2023/1/3022Cannon-bug死锁的问题问题来源于main_shift()这个函数中MPI函数的使用。在Cannon-mpi代码的main_shift()模块中,文献中算法使用的是MPI的阻塞通信阻塞通信函数:MPI_Send/MPI_Recv,这就使得Cannon算法在执行循环左移和循环上移时,矩阵规模超过共享buff的容量时出现循环等待循环等待的死锁死锁状况。在曙光4000集群系统上

17、,该算法的发生死锁的矩阵下限规模是200200的浮点型矩阵。本讲稿第二十二页,共二十七页2023/1/3023Cannon-bug原始(阻塞式)的原始(阻塞式)的原始(阻塞式)的原始(阻塞式)的main_shiftmain_shift模块:模块:模块:模块:voidmain_shift()/*将分块b左移位*/MPI_Send(a,dl2,MPI_FLOAT,get_index(my_row,my_col-1,sp),1,MPI_COMM_WORLD);MPI_Recv(a,dl2,MPI_FLOAT,get_index(my_row,my_col+1,sp),1,MPI_COMM_WORLD

18、,&status);/*将分块b上移位*/MPI_Send(b,dl2,MPI_FLOAT,get_index(my_row-1,my_col,sp),1,MPI_COMM_WORLD);MPI_Recv(b,dl2,MPI_FLOAT,get_index(my_row+1,my_col,sp),1,MPI_COMM_WORLD,&status);本讲稿第二十三页,共二十七页2023/1/3024Cannon-bug改进(非阻塞式)的改进(非阻塞式)的改进(非阻塞式)的改进(非阻塞式)的main_shiftmain_shift模块模块模块模块ci*dl+j+=ai*dl+k*bj*dl+k;/

19、改进了的Cannon按行存取/*将分块a左移位*/MPI_Isend(a,dl2,MPI_FLOAT,get_index(my_row,my_col-1,sp),1,MPI_COMM_WORLD,&myrequest_s);MPI_Irecv(buf,dl2,MPI_FLOAT,get_index(my_row,my_col+1,sp),1,MPI_COMM_WORLD,&myrequest_r);MPI_Wait(&myrequest_s,&status);MPI_Wait(&myrequest_r,&status);memcpy(a,buf,sizeof(float)*dl2);/*将分块

20、b上移位*/MPI_Isend(b,dl2,MPI_FLOAT,get_index(my_row-1,my_col,sp),1,MPI_COMM_WORLD,&myrequest_s);MPI_Irecv(buf,dl2,MPI_FLOAT,get_index(my_row+1,my_col,sp),1,MPI_COMM_WORLD,&myrequest_r);MPI_Wait(&myrequest_s,&status);MPI_Wait(&myrequest_r,&status);memcpy(b,buf,sizeof(float)*dl2);本讲稿第二十四页,共二十七页2023/1/302

21、5Cannon-bugCannon-bugMPI_Irecv仅仅初始化接受操作,在与之对应的MPI_Wait函数的调用返回之前,将不能访问bufferMPI_Irecv函数返回时,handle指向一个MPI_Request对象,它代表了一个已近初始化了的通信操作。这个函数并不返回一个指向MPI_Status对象的指针,因为实际的接受操作并未完成。MPI_Wait会一直阻塞,直至参数handle所关联的操作完成,对发送来说,此时就可以向缓冲区写入新的值。而对接收来说,便可以从缓冲区读取消息,而status所指向的MPI_Status对象包含了所接收消息的信息。新增加buf的目的就是防止在a还未发

22、送出去的时候就recv内容至a中导致信息的错误,只有在MPI_Wait返回以后,再调用mencpy将buf的内容写回a中,完成更新。本讲稿第二十五页,共二十七页2023/1/3026CannonCannon乘法乘法乘法乘法mpimpi代码主要模块代码主要模块代码主要模块代码主要模块intget_index(introw,intcol,intsp)/处理器逻辑阵列坐标至rank号的转换voidrandom_A_B()/随机生成矩阵A/Bvoidscatter_A_B()/rank=0的处理器向外分发A,B的相关块voidinit_alignment()/矩阵A/B初始对齐Voidmain_shift()/分块矩阵左移和上移,并计算分块c这个模块就是我改造该算法的重点部位这个模块就是我改造该算法的重点部位voidcollect_c()/rank=0的处理器从其余处理器收集分块矩阵cvoidprint(float*m,char*str)/打印矩阵intmain(intargc,chat*argv)/主过程,cannon算法,矩阵相乘本讲稿第二十六页,共二十七页2023/1/3027Cannon-reviewCannon-review循环移位对齐左移上移分而治之的并行计算思想任务划分数据划分精简通讯All-to-AllPoint-to-Point本讲稿第二十七页,共二十七页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁