CN101661457A - 多处理器系统的三角线性方程组求解的方法和装置 - Google Patents
多处理器系统的三角线性方程组求解的方法和装置 Download PDFInfo
- Publication number
- CN101661457A CN101661457A CN200810212524A CN200810212524A CN101661457A CN 101661457 A CN101661457 A CN 101661457A CN 200810212524 A CN200810212524 A CN 200810212524A CN 200810212524 A CN200810212524 A CN 200810212524A CN 101661457 A CN101661457 A CN 101661457A
- Authority
- CN
- China
- Prior art keywords
- submatrix
- mentioned
- index
- accelerator
- accelerators
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种多处理器系统的三角线性方程组求解的方法和装置。其中该多处理器系统包括至少一个核心处理器以及多个加速器。该方法包括:按照预定的子矩阵大小,将要进行三角线性方程组求解的矩阵划分为多个子矩阵;迭代地对该多个子矩阵进行计算更新;其中,在每一次迭代中包括:从该多个子矩阵中还未进行计算更新的子矩阵开始,按照行方向并且按照为上述多个加速器预先确定的先后顺序,向该多个加速器各分配一个子矩阵;使该多个加速器并行地对各自的子矩阵进行计算更新。本发明通过逐个子矩阵地分配要进行求解的矩阵,能够使多个加速器的负载达到平衡,从而充分利用这多个加速器的计算能力来达到计算更新的峰值性能。
Description
技术领域
本发明涉及数据处理领域,具体地,涉及多处理器系统的三角线性方程组求解的方法和装置。
背景技术
LAPACK(Linear Algebra PACKage,线性代数包)是Oak Ridge国家实验室、加州大学Davis分校和Illinois大学等联合开发的非常有效、强大且广泛使用的线性代数函数库,用于在不同高性能计算环境上高效求解数值线性代数问题,其已经有效地为HPC(High Performance Computing,高性能计算)和计算科学组织工作了20多年的时间。关于LAPACK的详细内容,可参见http://netlib.amss.ac.cn/lapack/index.html。
作为专业的线性代数库,LAPACK提供了各种线性代数的子程序,其中包括按照下述矩阵方程(1)、(2)、(3)或(4)进行三角线性方程组求解的例程(LAPACK代数库中,该三角线性方程组求解的函数名为TRSM):
A*X=alpha*B (1)
X*A=alpha*B (2)
AT*X=alpha*B (3)
X*AT=alpha*B (4)
其中,alpha是标量;X和B是m×n矩阵;A是单位或非单位的上三角或下三角矩阵。
图1是以A是下三角矩阵、alpha=1,即上述矩阵方程(1)成为A*X=B的情况为例对TRSM函数的三角线性方程组求解的含义的图示说明。
从图1可以看出,按照上述矩阵方程(1)或(2)使用TRSM函数进行三角线性方程组求解的例程,对于给定的m×n矩阵B,在给定的标量alpha以及单位或非单位的上三角或下三角矩阵A下,求解出m×n矩阵X,并且,所求解出的矩阵X被复写在矩阵B上。
Cell宽频引擎(Cell Broadband Engine,CBE)是一种单芯片多处理器系统。如图2所示,CBE系统具有在一个共享的、相干的存储器上进行操作的9个处理器,其中包括一个主处理器(Power Processing Unit,PPU)和8个协处理器(Synergistic Processing unit,SPU)。在这样的系统结构下,CBE能够提供杰出的计算能力。具体来说,Cell处理器在时钟频率3.2GHz的情况下能够达到204G浮点运算数/秒。在这样高的计算能力的支持下,对于具有高计算任务量的LAPACK中的例程来说,CBE是一个理想的执行平台。
但是,如果要在CBE这样的多处理器系统上执行LAPACK中的例程,则由于多个处理器的存在,需要进行例程的并行性设计。
上述用于使用TRSM函数实现三角线性方程组求解的例程针对CBE这样的多处理器系统的一种现有的并行性实现方案是,首先将给定矩阵B划分为多个64×64大小的子矩阵;然后按列将子矩阵分配给多个处理器,使多个处理器并行地对其各自分配到的列的子矩阵进行计算更新。
也就是说,由于对于一个子矩阵的计算更新仅依赖于该子矩阵上方的子矩阵更新后的数据,处于一列上的子矩阵需要按照顺序进行处理,而在各列之间是可以并行地进行计算更新的,所以上述并行性实现方案通过按列分配子矩阵,使每一个处理器负责对分配给它的那一列的子矩阵依次进行计算更新,来实现多个处理器的并行性。
图3是上述现有的并行性实现方案的示例性图示说明,其示出的是多处理器系统使用5个SPU对被划分为8行×6列个子矩阵的矩阵B使用TRSM函数进行三角线性方程组求解的情况。
从图3可以看出,在该示例性情况下,在根据上述并行性实现方案的求解过程中,首先对5个SPU、即SPU0-SPU4按顺序各分配一列的子矩阵,使SPU0-SPU4并行地对各自的列的子矩阵依次进行计算更新;然后,在SPU0-SPU4完成其各自的第一列的子矩阵的计算更新之后,由于矩阵B中还有最后一列子矩阵未处理,所以仅继续采用SPU0来完成该最后一列子矩阵的计算更新,而其余的SPU1-SPU4则成为空闲状态。这样,在所有6列的子矩阵的计算更新均完成时,SPU0共处理了两列、16个子矩阵,而SPU1-SPU4则各仅处理了一列、8个子矩阵。这样,在整个求解过程中,SPU0-SPU4的负载是不平衡的。可以想象,如果矩阵B的行数远远大于列数,则负载不平衡的状况将加剧。
这样,在上述并行性实现方案中,由于按列分配给定矩阵中的子矩阵,而存在着因列的数量与处理器的数量不匹配而导致多个处理器所分配到的负载不平衡的可能性。从而,由于多个处理器的负载不平衡,所以在负载高的处理器进行工作时,负载低的处理器必然在一段时间内是空闲的,这样,这多个处理器的计算能力就不能得到同时充分地利用来达到峰值性能。
发明内容
鉴于上述问题,本发明提供了一种在多处理器系统上进行三角线性方程组求解的方法和装置,以确保在求解过程中向多个处理器分配的负载达到平衡,从而充分利用这多个处理器的计算能力来达到峰值性能。
根据本发明的一个方面,提供了一种在多处理器系统上进行三角线性方程组求解的方法,其中该多处理器系统包括至少一个核心处理器以及多个加速器(accelerator),该方法包括:按照预定的子矩阵大小,将要进行三角线性方程组求解的矩阵划分为多个子矩阵;以及迭代地对上述多个子矩阵进行计算更新;其中,在每一次迭代中包括:从上述多个子矩阵中还未进行计算更新的子矩阵开始,按照行方向并且按照为上述多个加速器预先确定的先后顺序,向该多个加速器各分配一个子矩阵;以及使上述多个加速器并行地对各自的子矩阵进行计算更新。
根据本发明的另一个方面,提供了一种在多处理器系统中进行三角线性方程组求解的装置,其中该多处理器系统包括至少一个核心处理器以及多个加速器,该装置使上述多个加速器迭代地对要进行三角线性方程组求解的矩阵进行计算更新,其包括:矩阵划分单元,用于按照预定的子矩阵大小,将要进行三角线性方程组求解的矩阵划分为多个子矩阵;以及子矩阵分配单元,用于在每一次迭代中,从上述多个子矩阵中还未进行计算更新的子矩阵开始,按照行方向并且按照为上述多个加速器预先确定的先后顺序,向该多个加速器各分配一个子矩阵;以及计算更新模块,用于在每一次迭代中,使上述多个加速器并行地对各自的子矩阵进行计算更新。
附图说明
相信通过以下结合附图对本发明具体实施方式的说明,能够使人们更好地了解本发明上述的特点、优点和目的。
图1是以A是下三角矩阵、alpha=1的情况为例使用TRSM函数的三角线性方程组求解的图示说明;
图2是CBE的系统框图;
图3是现有的使用TRSM函数的三角线性方程组求解的并行性实现方案的示例性图示说明;
图4是根据本发明实施例的在多处理器系统上进行三角线性方程组求解的方法的流程图;
图5是图4的方法的示例性图示说明;
图6是以一个加速器为例、图4的方法中多个加速器并行地对各自分配到的子矩阵进行计算更新的步骤的详细流程图;
图7是图6的过程的示例性图示说明;
图8是根据本发明实施例的在多处理器系统中进行三角线性方程组求解的装置的方框图;以及
图9是图8的装置中计算更新模块的详细方框图。
具体实施方式
下面就结合附图对本发明的各个优选实施例进行详细说明。
图4是根据本发明实施例的在多处理器系统上进行三角线性方程组求解的方法的流程图。其中,该多处理器系统具有至少一个核心处理器以及多个加速器(accelerator)。具体地,该多处理器系统例如可以是前述具有一个PPU(核心处理器)和8个SPU(加速器)的CBE。
本实施例的在多处理器系统上进行三角线性方程组求解的方法,与前述现有的并行性实现方案同样,首先将给定的m×n矩阵B划分为多个子矩阵,然后将多个子矩阵分配给多个加速器,使多个加速器并行地对其各自分配到的子矩阵进行计算更新。但是,不同的是,在本实施例中,不是按列向多个加速器分配子矩阵,而是逐个子矩阵地来进行分配。
具体地,如图4所示,本实施例的在多处理器系统上进行三角线性方程组求解的方法,首先在步骤405,按照预定的子矩阵大小,将主存储器中要进行三角线性方程组求解的给定矩阵B划分为多个子矩阵。例如,在一个实施例,该子矩阵大小是64×64。
在步骤410,在该多处理器系统的核心处理器的本地存储区中,设置用于为上述多个加速器存储子矩阵索引的索引存储区。该索引存储区用于为上述多个加速器的每一个存储该加速器已经完成计算更新的子矩阵的行、列索引,以便在各个加速器之间交换工作状态的信息。本领域技术人员可以知道,设置索引存储区只是在各个加速器之间交换工作状态的信息的一种方式,本领域技术人员也可以采用其它方式,例如在PPU中采用数组、哈西表等方式。
并且,在本步骤中,初始将该索引存储区全部赋值为-1,这里-1只是一个示意性的值,本领域技术人员可以知道,该值可以设为任何不影响后续计算的值。
在一个实施例中,在本步骤中,在核心处理器(在CBE的情况下是PPU)的原子区域中设置128字节的空间来作为索引存储区。但是,并不限于此,也可以设置更大或更小的空间作为索引存储区。
并且,本领域技术人员可以理解,核心处理器中的原子区域是存储速度相对较快的区域,利用该区域作为上述多个加速器的求解过程中的索引存储区,能够提升各个加速器的索引读取速度。
在步骤415,从上述矩阵B中还未经过计算更新的子矩阵开始,按照行方向并且按照为上述多个加速器预先确定的先后顺序,向该多个加速器的每一个各分配一个子矩阵。其中,该预先确定的先后顺序是该多个加速器被分配子矩阵的先后顺序,其可以通过预先为上述多个加速器设定编号来确定。
在步骤420,上述多个加速器并行地对各自分配到的子矩阵进行计算更新,并且将更新后的子矩阵写回到主存储器中。
在步骤425,对于上述多个加速器的每一个,在该加速器完成其分配到的子矩阵的计算更新后,为该加速器更新上述索引存储区。
在本实施例中,在上述索引存储区中,为上述多个加速器的每一个均分配一个索引区,用于存储由该加速器完成计算更新的子矩阵的行、列索引。并且,在一个实施例中,上述多个加速器的每一个的索引区仅存储该加速器最近完成计算更新的那一个子矩阵的行、列索引。并且,该行、列索引表示子矩阵在上述矩阵B中所处的、按照子矩阵计数的行、列位置,以表明该子矩阵是矩阵B中第几行、第几列的位置上的子矩阵。
从而,在本步骤中,为上述多个加速器的每一个更新上述索引存储区的过程包括:确定该加速器刚刚完成计算更新的子矩阵在上述矩阵B中的行、列位置;将该行、列位置存储到上述索引存储区中与该加速器对应的索引区中。
此外,在进一步的实施例中,设定上述多个加速器的每一个的索引区的大小是32位、即4字节,其中高16位用于存储子矩阵的行索引,低16位用于存储子矩阵的列索引。从而,在行、列索引是32位长整型的情况下,在向索引区中存储该行、列索引时,需要进行移位存储操作,即将行索引存储到该索引区中,并使其向左移位16位,成为高16位,然后将列索引存储到低16位中。
在步骤430,判断上述矩阵B中是否还有未经过计算更新的子矩阵,若有,则该过程返回到步骤415,继续对剩余的子矩阵进行计算更新,否则,该过程结束。
图5是图4的上述过程的示例性图示说明,与图3同样,其示出的也是多处理器系统使用5个SPU对被划分为8行×6列个子矩阵的矩阵B进行三角线性方程组求解的情况。
从图5可以看出,在该示例性情况下,在根据本实施例的求解过程中,从第一行子矩阵开始按照顺序依次对SPU0-SPU4各分配一个子矩阵,使SPU0-SPU4并行地对各自的子矩阵进行计算更新,并且,在SPU0-SPU4完成其各自的子矩阵的计算更新之后,接着上一次分配的位置继续在行方向上依次对SPU0-SPU4各分配一个子矩阵,并在一行分配结束时继续分配下一行的子矩阵,依此重复。
从而,在所有子矩阵的计算更新均完成时,SPU0-SPU2的每一个均处理了10个子矩阵,SPU3-SPU4的每一个均处理了9个子矩阵。与图3相对照,可以看出,本实施例的进行三角线性方程组求解的方案,与上述现有的并行性实现方案相比,能够获得更好的负载平衡效果。并且,可以想象,在矩阵的列数与加速器的数量不匹配并且矩阵的行数远远大于列数的情况下,与上述现有的并行性实现方案相比,本实施例的方案所得到的负载平衡效果将更加显著,因为在此情况下如果采用上述现有的并行性实现方案,则被用来额外进行剩余列的子矩阵的计算更新的加速器将在其它加速器空闲的状态下处理更多的子矩阵,从而计算任务量与其它空闲加速器相比要大很多,导致加速器的负载极其不平衡。
下面,以一个加速器为例,详细描述上面的步骤420中上述多个加速器并行地对各自分配到的子矩阵进行计算更新的过程。图6是该过程的详细流程图。
如图6所示,首先在步骤605,确定当前加速器所分配到的当前子矩阵在上述矩阵B中的行、列位置。在此,将该当前子矩阵表示为Bi,j(i,j=1,2.....)。
在步骤610,判断该当前子矩阵Bi,j(i,j=1,2......)是否是上述矩阵B中第一行的子矩阵。如果是,则转到步骤660,否则前进到步骤615。
在步骤615,在上述子矩阵Bi,j(i,j=1,2......)不是上述矩阵B中第一行的子矩阵的情况下,使k=1,即从矩阵B中的第一行开始,对于与该子矩阵Bi,j(i,j=1,2......)同一列的、上方的子矩阵Xk,j(k=1,2,......i-1,j=1,2......),依次执行下面的步骤620-655。
在步骤620,对于上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......),确定被分配来对其进行计算更新的相应加速器。
在本步骤中,可以根据上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的行、列位置确定到该上方子矩阵为止的总子矩阵数,然后对该总子矩阵数与上述多个加速器的数量进行取模运算,所得到的结果便是与上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)对应的加速器的编号,以此来确定对该子矩阵进行计算更新的加速器。
在步骤625,读取上述索引存储区中与所确定的相应加速器对应的索引区,以获得该加速器最近完成计算更新的那一个子矩阵的行、列位置。
在步骤630,根据所获得的上述行、列位置,判断上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)是否已经完成计算更新。
这可以通过比较上述行、列位置和上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的位置的前后关系来实现。如果上述行、列位置在该上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的位置之前,则由于上述行、列位置处的子矩阵是上述所确定的相应加速器最后一个完成计算更新的子矩阵,所以表明在后的上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)还未被该加速器更新。反之,如果上述行、列位置在该子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的位置之后,则表明在前的上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)已经被该加速器更新。
并且,在本步骤中如果判断为上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)已经完成计算更新,则前进到步骤640,否则在步骤635等待,直到该上方子矩阵完成计算更新为止。
在步骤640,从主存储器获取该上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的数据到当前加速器的本地存储区中。
在步骤645,使当前加速器根据上述矩阵方程(1)、(2)、(3)或(4),利用所获取的上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的数据,对当前子矩阵Bi,j(i,j=1,2......)进行计算更新。
例如,如图1所示,在给定下三角矩阵A并且alpha=1,即上述矩阵方程(1)的情况下,对当前子矩阵Bi,j(i,j=1,2......)进行Bi,j=Bi,j-Ai,kXk,j的计算更新。
在步骤650,使k=k+1,继续下一行。
在步骤655,判断k≤i-1是否成立,即判断该下一行是否仍是上述当前子矩阵Bi,j(i,j=1,2......)的上方的行。如果是,则返回到步骤620,针对该行继续上述过程,否则前进到步骤660。
在步骤660,使上述加速器根据上述矩阵方程(1)或(2),直接对当前子矩阵Bi,j(i,j=1,2......)进行计算更新。例如,如图1所示,在给定下三角矩阵A并且op(A)=A、alpha=1,即上述矩阵方程(1)成为A*X=B的情况下,对当前子矩阵Bi,j(i,j=1,2......)进行的计算更新。然后,该过程结束。
以上就是对图4中上述多个加速器并行地对各自分配到的子矩阵进行计算更新的步骤420的详细描述。
需要说明的是,在上面图6的过程中,虽然对于与当前要计算更新的子矩阵Bi,j(i,j=1,2......)同一列的、上方的每一个子矩阵Xk,j(k=1,2,......i-1,j=1,2......)均通过读取索引存储区来确定其是否已经完成计算更新,但这仅是示例性的。在优选实施例中,可以不必为每一个上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)均判断是否已经被计算更新,而是首先判断当前的子矩阵Bi,j(i,j=1,2......)上方的子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的数量是否大于等于加速器的数量,并且在大于等于加速器的数量时,仅对该当前子矩阵Bi,j(i,j=1,2......)上方[加速器的数量-1]行的子矩阵判断计算更新与否即可,即仅对该当前子矩阵Bi,j(i,j=1,2......)的上方并且当前加速器上一次在该当前子矩阵Bi,j(i,j=1,2......)的列上计算更新的子矩阵的下方的所有子矩阵判断计算更新与否即可。
举例来说明。如图7所示,仍以上述多处理器系统使用5个SPU对被划分为8行×6列个子矩阵的矩阵B进行三角线性方程组求解的情况为例,假设分配给SPU2的当前子矩阵Bi,j(i,j=1,2......)是该矩阵B中第6行、第3列的子矩阵6,则由于子矩阵6的上方的子矩阵的数量5等于SPU的数量5,所以仅需对子矩阵6上方[SPU的数量-1=4]行的子矩阵判断计算更新与否,即仅对子矩阵6的上方、SPU2上一次在该列上计算更新的子矩阵1的下方的子矩阵2-5来判断计算更新与否即可。而对于子矩阵1,则可以直接读取其数据并利用该数据对子矩阵6进行计算更新,因为显然SPU2在对子矩阵6进行计算更新时应该已经完成了前面的子矩阵1的计算更新。
以上就是对本实施例的在多处理器系统上进行三角线性方程组求解的方法的详细描述。在本实施例中,通过按照行方向逐个子矩阵地来分配要进行三角线性方程组求解的给定矩阵,与上述现有的并行性实现方案相比,在矩阵的列数与加速器的数量不匹配的情况下,能够获得更好的加速器负载的平衡效果。进而,在矩阵的行数远远大于列数的情况下,与上述现有的并行性实现方案相比,所得到的加速器负载平衡效果更加显著,从而能够充分利用这多个加速器的计算能力来达到求解计算的峰值性能。
需要说明的是,在本实施例中,虽然所说明的是将子矩阵大小设定为64×64的情况,但这仅是示例性的,本领域技术人员可以理解,在具体实现中根据具体情况将子矩阵大小设定为32×32、128×128等的情况下,本实施例的方法也是同样适用的。
在同一发明构思下,本发明提供一种在多处理器系统中进行三角线性方程组求解的装置。下面结合附图对其进行描述。
图8是根据本发明实施例的在多处理器系统中进行三角线性方程组求解的装置的方框图。其中,该多处理器系统具有至少一个核心处理器以及多个加速器。具体地,该多处理器系统例如可以是前述具有一个PPU(核心处理器)和8个SPU(加速器)的CBE。
本实施例的装置使上述多个加速器迭代地对要进行三角线性方程组求解的矩阵进行计算更新。
具体地,如图8所示,本实施例的在多处理器系统中进行三角线性方程组求解的装置8包括:矩阵划分单元81、索引存储区设置单元82、子矩阵分配单元83、计算更新模块84以及索引存储区更新单元85。
矩阵划分单元81按照预定的子矩阵大小、例如64×64,将要进行三角线性方程组求解的给定矩阵B划分为多个子矩阵。
索引存储区设置单元82在上述多处理器系统的核心处理器(例如CBE的PPU)的本地存储区中,设置用于为上述多个加速器的每一个存储其已经完成计算更新的子矩阵的索引的索引存储区。
在一个优选实施例中,索引存储区设置单元82在核心处理器的原子区域中设置索引存储区。
子矩阵分配单元83在每一次迭代中,从上述多个子矩阵中还未进行计算更新的子矩阵开始,按照行方向并且按照预先为上述多个加速器确定的先后顺序,向该多个加速器各分配一个子矩阵。
计算更新模块84在每一次迭代中,使上述多个加速器并行地对其各自的子矩阵进行计算更新。
索引存储区更新单元85在每一次迭代中,对于上述多个加速器的每一个,在其完成所分配的子矩阵的计算更新之后,为该加速器更新上述索引存储区。
在一个实施例中,在上述索引存储区中,仅存储上述多个加速器的每一个最近完成计算更新的那一个子矩阵的索引。
图9示出了根据一个实施例的、图8中的计算更新模块84的详细方框图。如图9所示,本实施例的计算更新模块84包括:首行确定单元841、单行计算更新单元842以及多行计算更新单元843。
首行确定单元841在每一次迭代中,为上述多个加速器的每一个,确定其当前子矩阵Bi,j(i,j=1,2......)是否是上述矩阵B中第一行的子矩阵。
单行计算更新单元842在每一次迭代中,使上述多个加速器的每一个,在其当前子矩阵Bi,j(i,j=1,2......)是上述矩阵B中第一行的子矩阵时,根据上述矩阵方程(1)或(2),直接对该子矩阵进行计算更新。例如,如图1所示,在给定下三角矩阵A并且alpha=1,即上述矩阵方程(1)的情况下,对子矩阵Bi,j(i,j=1,2......)进行的计算更新。
多行计算更新单元843在每一次迭代中,使上述多个加速器的每一个,在其当前子矩阵Bi,j(i,j=1,2......)不是上述矩阵B中第一行的子矩阵时,利用上述索引存储区中所存储的索引,为该当前子矩阵的同一列的上方子矩阵确定其是否完成了计算更新,并据此进行该当前子矩阵的计算更新。
如图9所示,多行计算更新单元843进一步包括:加速器确定单元8431、索引获取单元8432、索引比较单元8433以及计算更新单元8434。
在每一次迭代中,为上述多个加速器的每一个,对于其当前子矩阵Bi,j(i,j=1,2......)的同一列的上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......):
加速器确定单元8431根据该上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的行、列位置以及上述多个加速器的数量,确定被分配对该上方子矩阵进行计算更新的相应加速器
索引获取单元8432从上述索引存储区中获取加速器确定单元8431所确定的相应加速器最近完成计算更新的子矩阵的索引;
索引比较单元8433通过将所获取的索引与上述上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的行、列位置进行比较,确定其前后关系,从而确定该上方子矩阵是否已经被完成计算更新;
计算更新单元8434使当前加速器,在索引比较单元8433确定为上述上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)已经被完成计算更新时,直接利用该上方子矩阵的数据对当前子矩阵Bi,j(i,j=1,2......)进行计算更新,在确定为该上方子矩阵未完成计算更新时,等待到该上方子矩阵完成计算更新时,才利用该上方子矩阵的数据对当前子矩阵Bi,j(i,j=1,2......)进行计算更新。
在优选实施例中,对于上述多个加速器的每一个,在首行确定单元841确定其当前子矩阵Bi,j(i,j=1,2......)不是上述矩阵B中第一行的子矩阵的情况下,进而判断当前子矩阵Bi,j(i,j=1,2......)的上方子矩阵Xk,j(k=1,2,......i-1,j=1,2......)的数量是否大于等于上述多个加速器的数量,并且在大于等于上述多个加速器的数量时,仅对于该当前子矩阵Bi,j(i,j=1,2......)上方且该加速器上一次在该列上计算更新的子矩阵的下方的所有子矩阵,启用多行计算更新单元843中的加速器确定单元8431、索引获取单元8432和索引比较单元8433。
以上就是对本实施例的在多处理器系统中进行三角线性方程组求解的装置的详细描述。其中,该装置8及其各个组成部分,可以由专用的电路或芯片构成,也可以通过计算机(处理器)执行相应的程序来实现。
以上虽然通过一些示例性的实施例对本发明的在多处理器系统上进行三角线性方程组求解的方法和装置进行了详细的描述,但是以上这些实施例并不是穷举的,本领域技术人员可以在本发明的精神和范围内实现各种变化和修改。因此,本发明并不限于这些实施例,本发明的范围仅以所附权利要求为准。
Claims (17)
1.一种多处理器系统的三角线性方程组求解的方法,其中该多处理器系统包括至少一个核心处理器以及多个加速器(accelerator),该方法包括:
按照预定的子矩阵大小,将要进行三角线性方程组求解的矩阵划分为多个子矩阵;以及
迭代地对上述多个子矩阵进行计算更新;
其中,在每一次迭代中包括:
从上述多个子矩阵中还未进行计算更新的子矩阵开始,按照行方向并且按照为上述多个加速器预先确定的先后顺序,向该多个加速器各分配一个子矩阵;以及
使上述多个加速器并行地对各自的子矩阵进行计算更新。
2.根据权利要求1所述的方法,其中在迭代地对上述多个子矩阵进行计算更新的步骤之前还包括:
在上述核心处理器的本地存储区中,设置用于为上述多个加速器的每一个存储其已经完成计算更新的子矩阵的索引的索引存储区。
3.根据权利要求2所述的方法,其中在每一次迭代中还包括:
对于上述多个加速器的每一个,在其完成所分配的子矩阵的计算更新之后,为该加速器更新上述索引存储区。
4.根据权利要求3所述的方法,其中上述为该加速器更新上述索引存储区的步骤进一步包括:
确定由该加速器完成了计算更新的上述子矩阵在上述矩阵中的行、列位置;以及
将上述行、列位置存储到上述索引存储区中与该加速器对应的索引区。
5.根据权利要求4所述的方法,其中上述行、列位置是按子矩阵计数的行、列位置。
6.根据权利要求4或5所述的方法,其中在上述索引存储区中,上述多个加速器的每一个所对应的索引区包含32位;并且
将上述行、列位置存储到上述索引存储区中与该加速器对应的索引区的步骤进一步包括:
将上述行位置存储到与该加速器对应的索引区并使之移位到高16位;以及
将上述列位置存储到上述索引区的低16位。
7.根据权利要求2所述的方法,其中使上述多个加速器并行地对各自的子矩阵进行计算更新的步骤进一步包括:
使上述多个加速器的每一个:
确定其当前子矩阵是否是上述矩阵中第一行的子矩阵;
在其当前子矩阵是上述矩阵中第一行的子矩阵时,直接对该子矩阵进行计算更新;
在其当前子矩阵不是上述矩阵中第一行的子矩阵时,为该当前子矩阵的同一列的上方子矩阵,利用上述索引存储区中所存储的索引确定是否完成了计算更新,并据此进行该当前子矩阵的计算更新。
8.根据权利要求7所述的方法,其中为该当前子矩阵的同一列的上方子矩阵,利用上述索引存储区中所存储的索引确定是否完成了计算更新,并据此进行该当前子矩阵的计算更新的步骤进一步包括:
确定该当前子矩阵的同一列的上方子矩阵的数量;
如果上述上方子矩阵的数量小于上述多个加速器的数量,则对于该当前子矩阵的同一列的上方子矩阵,利用上述索引存储区中所存储的索引确定其是否完成了计算更新,并据此进行该当前子矩阵的计算更新;
如果上述上方子矩阵的数量大于等于上述多个加速器的数量,则:
确定与该当前子矩阵对应的加速器上一次在该列上计算更新的子矩阵;
对于所确定的上述子矩阵及其上方的所有子矩阵,直接利用其数据进行上述当前子矩阵的计算更新;以及
对于所确定的上述子矩阵的下方且上述当前子矩阵上方的所有子矩阵,利用上述索引存储区中所存储的索引确定其是否完成了计算更新,并据此进行该当前子矩阵的计算更新。
9.根据权利要求7或8所述的方法,其中利用上述索引存储区中所存储的索引确定其是否完成了计算更新,并据此进行该当前子矩阵的计算更新的步骤进一步包括:
根据该上方子矩阵的行、列位置以及上述多个加速器的数量,确定被分配对该上方子矩阵进行计算更新的相应加速器;
从上述索引存储区中获取所确定的相应加速器最近完成计算更新的子矩阵的索引;
通过将所获取的索引与上述上方子矩阵的行、列位置进行比较,确定该上方子矩阵是否已经完成计算更新;
在上述上方子矩阵已经完成计算更新时,直接利用该上方子矩阵的数据对上述当前子矩阵进行计算更新;以及
在上述上方子矩阵未完成计算更新时,等待到该上方子矩阵完成计算更新时,才利用该上方子矩阵的数据对上述当前子矩阵进行计算更新。
10.根据权利要求2所述的方法,其中在上述索引存储区中,仅存储上述多个加速器的每一个最近完成计算更新的那一个子矩阵的索引。
11.根据权利要求2所述的方法,其中上述索引存储区设置在上述核心处理器的原子区域中。
12.一种多处理器系统的三角线性方程组求解的装置,其中该多处理器系统包括至少一个核心处理器以及多个加速器,该装置使上述多个加速器迭代地对要进行三角线性方程组求解的矩阵进行计算更新,其包括:
矩阵划分单元,用于按照预定的子矩阵大小,将要进行三角线性方程组求解的矩阵划分为多个子矩阵;以及
子矩阵分配单元,用于在每一次迭代中,从上述多个子矩阵中还未进行计算更新的子矩阵开始,按照行方向并且按照为上述多个加速器预先确定的先后顺序,向该多个加速器各分配一个子矩阵;以及
计算更新模块,用于在每一次迭代中,使上述多个加速器并行地对各自的子矩阵进行计算更新。
13.根据权利要求12所述的装置,还包括:
索引存储区设置单元,用于在上述核心处理器的本地存储区中,设置用于为上述多个加速器的每一个存储其已经完成计算更新的子矩阵的索引的索引存储区;以及
索引存储区更新单元,用于在每一次迭代中,对于上述多个加速器的每一个,在其完成所分配的子矩阵的计算更新之后,为该加速器更新上述索引存储区。
14.根据权利要求13所述的装置,其中在上述索引存储区中,仅存储上述多个加速器的每一个最近完成计算更新的那一个子矩阵的索引。
15.根据权利要求13所述的装置,其中上述计算更新模块进一步包括:
首行确定单元,用于为上述多个加速器的每一个,确定其当前子矩阵是否是上述矩阵中第一行的子矩阵;
单行计算更新单元,用于使上述多个加速器的每一个,在其当前子矩阵是上述矩阵中第一行的子矩阵时,直接对该子矩阵进行计算更新;以及
多行计算更新单元,用于使上述多个加速器的每一个,在其当前子矩阵不是上述矩阵中第一行的子矩阵时,对于该当前子矩阵的同一列的上方子矩阵,利用上述索引存储区中所存储的索引确定其是否完成了计算更新,并据此进行该当前子矩阵的计算更新。
16.根据权利要求15所述的装置,其中上述多行计算更新单元进一步包括:加速器确定单元、索引获取单元、索引比较单元以及计算更新单元,其中,在每一次迭代中,为上述多个加速器的每一个,对于其当前子矩阵的同一列的上方子矩阵的每一个:
上述加速器确定单元根据该上方子矩阵的行、列位置以及上述多个加速器的数量,确定被分配对该上方子矩阵进行计算更新的相应加速器;
上述索引获取单元从上述索引存储区中获取上述加速器确定单元所确定的相应加速器最近完成计算更新的子矩阵的索引;
上述索引比较单元通过将所获取的索引与上述上方子矩阵的行、列位置进行比较,确定该上方子矩阵是否已经完成计算更新;以及
上述计算更新单元使上述加速器,在上述上方子矩阵已经完成计算更新时,直接利用该上方子矩阵的数据对上述当前子矩阵进行计算更新,在上述上方子矩阵未完成计算更新时,等待到该上方子矩阵完成计算更新时,才利用该上方子矩阵的数据对上述当前子矩阵进行计算更新。
17.根据权利要求16所述的装置,其中对于上述多个加速器的每一个,在其当前子矩阵的上方子矩阵的数量大于等于上述多个加速器的数量时,仅对于该加速器上一次在该当前子矩阵的列上计算更新的子矩阵的下方且上述当前子矩阵的上方的所有子矩阵,启用上述加速器确定单元、索引获取单元和索引比较单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810212524A CN101661457A (zh) | 2008-08-29 | 2008-08-29 | 多处理器系统的三角线性方程组求解的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810212524A CN101661457A (zh) | 2008-08-29 | 2008-08-29 | 多处理器系统的三角线性方程组求解的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101661457A true CN101661457A (zh) | 2010-03-03 |
Family
ID=41789492
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810212524A Pending CN101661457A (zh) | 2008-08-29 | 2008-08-29 | 多处理器系统的三角线性方程组求解的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101661457A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184093A (zh) * | 2011-06-14 | 2011-09-14 | 复旦大学 | 多cell处理器构建的并行计算阵列架构 |
CN102609393A (zh) * | 2012-02-08 | 2012-07-25 | 浪潮(北京)电子信息产业有限公司 | 一种线性方程组的数据处理方法及装置 |
CN103678252A (zh) * | 2013-12-16 | 2014-03-26 | 合肥优软信息技术有限公司 | 一种基于龙芯3a的线性方程求解函数的并行化处理方法 |
CN107341133A (zh) * | 2017-06-24 | 2017-11-10 | 中国人民解放军信息工程大学 | 基于任意维数矩阵lu分解的可重构计算结构的调度方法 |
CN107529638A (zh) * | 2017-08-18 | 2018-01-02 | 浙江远算云计算有限公司 | 线性求解器的加速方法、存储数据库及gpu系统 |
CN108139887A (zh) * | 2015-10-22 | 2018-06-08 | 国际商业机器公司 | 跨硬件加速器并行化矩阵分解 |
-
2008
- 2008-08-29 CN CN200810212524A patent/CN101661457A/zh active Pending
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184093A (zh) * | 2011-06-14 | 2011-09-14 | 复旦大学 | 多cell处理器构建的并行计算阵列架构 |
CN102609393A (zh) * | 2012-02-08 | 2012-07-25 | 浪潮(北京)电子信息产业有限公司 | 一种线性方程组的数据处理方法及装置 |
CN102609393B (zh) * | 2012-02-08 | 2015-07-22 | 浪潮(北京)电子信息产业有限公司 | 一种线性方程组的数据处理方法及装置 |
CN103678252A (zh) * | 2013-12-16 | 2014-03-26 | 合肥优软信息技术有限公司 | 一种基于龙芯3a的线性方程求解函数的并行化处理方法 |
CN103678252B (zh) * | 2013-12-16 | 2016-06-01 | 合肥康捷信息科技有限公司 | 一种基于龙芯3a的线性方程求解函数的并行化处理方法 |
CN108139887A (zh) * | 2015-10-22 | 2018-06-08 | 国际商业机器公司 | 跨硬件加速器并行化矩阵分解 |
CN108139887B (zh) * | 2015-10-22 | 2022-09-13 | 国际商业机器公司 | 跨硬件加速器并行化矩阵分解的方法和系统 |
CN107341133A (zh) * | 2017-06-24 | 2017-11-10 | 中国人民解放军信息工程大学 | 基于任意维数矩阵lu分解的可重构计算结构的调度方法 |
CN107341133B (zh) * | 2017-06-24 | 2021-01-22 | 中国人民解放军信息工程大学 | 基于任意维数矩阵lu分解的可重构计算结构的调度方法 |
CN107529638A (zh) * | 2017-08-18 | 2018-01-02 | 浙江远算云计算有限公司 | 线性求解器的加速方法、存储数据库及gpu系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Govindaraju et al. | High performance discrete Fourier transforms on graphics processors | |
CN110415157B (zh) | 一种矩阵乘法的计算方法及装置 | |
Dang et al. | CUDA-enabled Sparse Matrix–Vector Multiplication on GPUs using atomic operations | |
KR101120398B1 (ko) | 스레드 최적화된 멀티프로세서 구조 | |
US11275741B2 (en) | Merge join system and method | |
CN101661457A (zh) | 多处理器系统的三角线性方程组求解的方法和装置 | |
CN105426344A (zh) | 基于Spark的分布式大规模矩阵乘法的矩阵计算方法 | |
US20150324441A1 (en) | System and method for high performance k-means clustering on gpu with smart kernels | |
US20100106758A1 (en) | Computing discrete fourier transforms | |
US20170102942A1 (en) | Variable Length Execution Pipeline | |
US11074214B2 (en) | Data processing | |
Ploskas et al. | GPU accelerated pivoting rules for the simplex algorithm | |
Chen et al. | Optimizing partitioned CSR-based SpGEMM on the Sunway TaihuLight | |
CN113987414B (zh) | 基于ARMv8多核处理器的小型和不规则矩阵乘优化方法 | |
CN101533386A (zh) | 在多处理器系统上对矩阵进行qr分解的方法和装置 | |
CN102722472B (zh) | 一种复数矩阵的优化方法 | |
Jiang et al. | Optimizing small channel 3D convolution on GPU with tensor core | |
Schieffer et al. | Accelerating drug discovery in AutoDock-GPU with tensor cores | |
Tang et al. | Optimizing and auto-tuning iterative stencil loops for GPUs with the in-plane method | |
US8539207B1 (en) | Lattice-based computations on a parallel processor | |
Li et al. | HOM4PS-2.0 para: Parallelization of HOM4PS-2.0 for solving polynomial systems | |
Wu et al. | Optimizing dynamic programming on graphics processing units via data reuse and data prefetch with inter-block barrier synchronization | |
Luan et al. | Accelerating group-by and aggregation on heterogeneous CPU-GPU platforms | |
US9582473B1 (en) | Instruction set to enable efficient implementation of fixed point fast fourier transform (FFT) algorithms | |
Xia et al. | Fine-grained parallel RNAalifold algorithm for RNA secondary structure prediction on FPGA |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20100303 |
|
C20 | Patent right or utility model deemed to be abandoned or is abandoned |