高性能矩阵乘法_第1页
高性能矩阵乘法_第2页
高性能矩阵乘法_第3页
高性能矩阵乘法_第4页
高性能矩阵乘法_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高性能矩阵乘法第一页,共二十七页,2022年,8月28日2023/4/22并行算法优化研究相对于传统面向对象串行算法的4个挑战:同步:两个或者多个线程协调其行为的过程通信:与线程之间交换数据相关的带宽和延迟问题负载均衡:多个线程之间工作量分布的情况,给各个线程(执行核)分配均匀的工作可扩展性:衡量在性能更加强劲的系统上运行软件时能否有效利用更多线程的指标, 观察应用程序在更高级的平台上运行 4核到8核线性增长第二页,共二十七页,2022年,8月28日2023/4/23多线程(核)设计主要分解模式任务分解: 对程序根据其执行的功能进行分解的过程数据分解: 将应用程序根据各任务所处理的数据而非按任务的天然特性来进行分解数据流分解: 研究数据在诸任务之间如何流动,根据任务之间的数据流关系对问题 进行分解模式分解方式任务级并行模式任务分解DivideandConquer任务/数据分解几何分解模式数据分解流水线模式数据流分解波峰(wavefront)模式数据流分解第三页,共二十七页,2022年,8月28日2023/4/24多线程(核)设计主要分解模式任务分解: 对程序根据其执行的功能进行分解的过程数据分解: 将应用程序根据各任务所处理的数据而非按任务的天然特性来进行分解数据流分解: 研究数据在诸任务之间如何流动,根据任务之间的数据流关系对问题 进行分解

分解方式设计说明任务分解不同的程序行为采用不同的线程实现常用于GUI应用程序数据分解多个线程对不同的数据块执行相同的操作常用于音频、图像处理和科学计算应用程序数据流分解一个线程的输出作为另一个线程的输入尤其应注意尽量消除启动和排空延迟第四页,共二十七页,2022年,8月28日2023/4/25矩阵乘法算法探讨

在工程科学计算中,矩阵乘积是最基本的运算 典型的n阶稠密方阵乘积算法的时间复杂度是O(n3)。 目前对大型矩阵乘积运算的处理主要是采用分治思想,将矩阵分布在多个节点上,但每个结点上的小矩阵仍要立方级乘法次数。 基于分之思想的两种划分策略:条形划分和块状(棋盘)划分的6种常见分布式矩阵乘法并行算法。

第五页,共二十七页,2022年,8月28日2023/4/26基于不同划分策略的矩阵乘法算法探讨

1、条形(stripedpartitioning)划分的矩阵乘法并行算法

行条划分 列条划分两两组合:行列、行行、列列、列行第六页,共二十七页,2022年,8月28日2023/4/27基于不同划分策略的矩阵乘法算法探讨

2、块状划分(checkerboardpartitioning)的矩阵乘法并行算法

称为棋盘划分第七页,共二十七页,2022年,8月28日Cannon

DescriptionforimplementationofMPIprogramtocomputeMatrixMatrixMultiplicationusingblockcheckerboardpartitioning

andCannonAlgorithm

2023/4/28第八页,共二十七页,2022年,8月28日Cannon

Objective

Computingthematrix-matrixmultiplicationonSMPSystem.UseblockcheckerboardpartitioningofthematricesandCannon'sAlgorithm.

AssumptionSizeofthesquarematricesp=q2andthesizeofsquarematricesAandBisevenlydivisiblebyq.

Itisassumedthatthenumberofblocksareequaltothenumberofprocessors.2023/4/29第九页,共二十七页,2022年,8月28日Cannon

Cannon'salgorithmisbasedoncartesianvirtualtopologyAandBaresquarematricesofsizenandCbetheoutput

matrix.Thesematricesaredivedintoblocksorsubmatricestoperformmatrix-matrixoperationsinparallelnxnmatrixAcanberegardedasqxqarrayofblocksAi,j(0<=i<q,0<=j<q)suchthateachblockisan(n/q)x(n/q)submatrixWeusep

processorstoimplementtheblockversionofmatrixmultiplicationinparallelbychoosingqasasquarerootof

p

andcomputeadistinctblockCi,joneachprocessor.2023/4/210第十页,共二十七页,2022年,8月28日传统并行

2023/4/211第十一页,共二十七页,2022年,8月28日传统并行

ThematricesAandBare

partitionedintop

blocks,A

i,j

andBi,j

(0<=i<q,0<=j<q)ofsize

(n/qxn/q)

oneachprocess.Theseblocksaremappedontoaqxq

logicalmeshofprocesses.TheprocessesarelabeledfromP0,0toPq-1,q-1.2023/4/212第十二页,共二十七页,2022年,8月28日传统并行

ProcessPi,jinitiallystoreblockmatricesAi,jandBi,jandcomputesblockCi,jofresultmatrix.TocomputesubmatrixCi,j,weneedallsubmatrices,Ai,kand

Bk,j(0

<=k<q).Toacquirealltherequiredblocks,anall-to-allbroadcastofmatrixAi,j's

isperformedineachrowandsimilarlyineachcolumnofmatrixBi,j's.MPIcollectivecommunicationisusedtoperformthisoperations.2023/4/213第十三页,共二十七页,2022年,8月28日传统并行

AfterPi,jacquires,Ai,0,Ai,1,Ai,2

,Ai,q-1andB0,j

,B1,j

,B2,j

,Bq-1,j

,itperformstheserialblockmatrixtomatrixmultiplicationandaccumulatesthepartialblock

matrixCi,jofmatrixC.ToobtaintheresultantproductmatrixC,processeswithrank0gathersalltheblockmatricesbyusingMPI_Gather

collectivecommunicationoperation.2023/4/214第十四页,共二十七页,2022年,8月28日Cannon

pprocessorsarrangedinqxqsquaregridofprocessorsandtheinputmatrices.AandBaredistributedamongtheprocessesincheckerboardfashion.ItresultsinconstructingpblockmatricesofAandB.Itusesonlypoint-to-pointcommunication

forcircularlyshiftingblocksofmatrixAandmatrixBamongpprocesses.

2023/4/215第十五页,共二十七页,2022年,8月28日Cannon-inital

Thealgorithmproceedsinq

stages.ThefirststepinthisalgorithmistoperforminitialalignmentoftheblockmatrixAandblockmatrixB.TheblocksofmatrixAarecircularlyshiftedtothe

i

positionstoleftintherowofthesquaregridofprocesses,wherei

istherow

numberoftheprocessinthemesh.TheblocksofmatrixBarecircularlyshiftedj

positionsupwards,wherejisthecolumn

numberoftheprocessintheprocessesmesh.2023/4/216第十六页,共二十七页,2022年,8月28日Cannon-inital2023/4/217第十七页,共二十七页,2022年,8月28日Cannon-runningThealgorithmperformsthefollowingstepsineachstage:

1.MultiplytheblockofmatrixAandmatrixBandaddtheresultantmatrixtogettheblockmatrixC,whichisinitiallysettozero.

2.CircularlyshifttheblocksofmatrixAtoleftintherowsoftheprocessesandtheblocksofmatrixBupwardsinthecolumnsofthesquaregridofprocessesinawraparoundmanner.

2023/4/218第十八页,共二十七页,2022年,8月28日Cannon-running2023/4/219第十九页,共二十七页,2022年,8月28日Cannon-running2023/4/220第二十页,共二十七页,2022年,8月28日书中Cannon-bug2023/4/221

MPI_SendandMPI_Recvisnotusedforpoint-to-pointcommunicationbecauseifalltheprocessescallMPI_SendorMPI_Recv

indifferentorderthedeadlockedsituationmayarise.

Howtofix?指派一个缓冲区,使用MPI_Irecv/MPI_Isend非阻塞式通讯函数,MPI_wait.MPI_Sendrecv.

第二十一页,共二十七页,2022年,8月28日2023/4/222Cannon-bug

死锁的问题 问题来源于main_shift()这个函数中MPI函数的使用。在Cannon-mpi代码的main_shift()模块中,文献中算法使用的是MPI的阻塞通信函数:MPI_Send/MPI_Recv,这就使得Cannon算法在执行循环左移和循环上移时,矩阵规模超过共享buff的容量时出现循环等待的死锁状况。 在曙光4000集群系统上,该算法的发生死锁的矩阵下限规模是200×200的浮点型矩阵。第二十二页,共二十七页,2022年,8月28日2023/4/223Cannon-bug原始(阻塞式)的main_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,&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);

}第二十三页,共二十七页,2022年,8月28日2023/4/224Cannon-bug改进(非阻塞式)的main_shift模块

c[i*dl+j]+=a[i*dl+k]*b[j*dl+k]; //改进了的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); /*将分块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);第二十四页,共二十七页,2022年,8月28日2023/4/225Cannon-bugMPI_Irecv仅仅初始化接受操作,在与之对应的MPI_Wait函数的调用返回之前,将不能访问bufferMPI_Irecv函数返回时,handle指向一个MPI_Request对象,它代表了一个已近初始化了的通信操作。这个函数并不返回一个指向MPI_Status对象的指针,因为实际的接受操作并未完成。MPI_Wait会一直阻塞,直至参数handle所关联的操作完成,对发送来说,此时就可以向缓冲区写入新的值。而对接收来 说,便可以从缓冲区读取消息,而status所指向的MPI_Status对象包含了所接收消息的信息。新增加buf的目的就是防止在a还未

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论