CN101561797A - 在处理系统上对矩阵进行奇异值、特征值分解的方法和装置 - Google Patents
在处理系统上对矩阵进行奇异值、特征值分解的方法和装置 Download PDFInfo
- Publication number
- CN101561797A CN101561797A CNA2008100916898A CN200810091689A CN101561797A CN 101561797 A CN101561797 A CN 101561797A CN A2008100916898 A CNA2008100916898 A CN A2008100916898A CN 200810091689 A CN200810091689 A CN 200810091689A CN 101561797 A CN101561797 A CN 101561797A
- Authority
- CN
- China
- Prior art keywords
- matrix
- mentioned
- givens rotation
- rotation parameter
- givens
- 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
Abstract
本发明提供了一种在处理系统上对矩阵进行奇异值、特征值分解的方法和装置。该奇异值分解的方法包括:将上述矩阵转换为双对角矩阵,同时得到将要转换为奇异向量矩阵的中间矩阵;迭代地找出并转换该双对角矩阵中、副对角线上的元素不为0的子矩阵,以使该双对角矩阵收敛为对角矩阵,并将中间矩阵转换为奇异向量矩阵;在每一次迭代中:将在子矩阵的QR迭代过程中所生成的Givens旋转参数组以及中间矩阵中要应用该Givens旋转参数组的相应子矩阵的左右边界位置累积在存储器中;在所累积的Givens旋转参数组的个数达到指定阈值时,利用这多个Givens旋转参数组对中间矩阵进行Givens旋转,其中上述指定阈值是大于等于2的整数。
Description
技术领域
本发明涉及数据处理领域,具体地,涉及在处理系统上对矩阵进行奇异值分解的方法和装置以及对矩阵进行特征值分解的方法和装置。
背景技术
LAPACK(Linear Algebra PACKage,线性代数包)是Oak Ridge国家实验室、加州大学Davis分校和Illinois大学等联合开发的非常有效、强大且广泛使用的线性代数函数库,用于在不同高性能计算环境上高效求解数值线性代数问题,其已经有效地为HPC(High Performance Computing,高性能计算)和计算科学组织工作了20多年的时间。关于LAPACK的详细内容,可参见http://netlib.amss.ac.cn/lapack/index.html。
作为专业的线性代数库,LAPACK提供了各种线性代数的子程序,其中包括实现矩阵的奇异值分解的例程和实现矩阵的特征值分解的例程。
矩阵的奇异值分解的含义是:对于给定的矩阵A,找出分解
A=UA*S*VA T,
其中,UA是正交矩阵,其是A的左奇异向量矩阵;S是对角矩阵,其是A的奇异值矩阵,其对角线上的元素就是A的奇异值;VA是正交矩阵,其是A的右奇异向量矩阵。
矩阵的特征值分解的含义是:对于给定的矩阵A,找出分解
A=UA*Z*UA T,
其中,UA是正交矩阵,其是A的特征向量矩阵;Z是对角矩阵,其是A的特征值矩阵,其对角线上的元素就是A的特征值。
现有的LAPACK中的奇异值分解过程是:对于给定的矩阵A,首先将其转换为双对角矩阵B,同时得到中间矩阵U和V,以满足下面的公式:
B=UTAV。
然后,迭代地找出并转换该双对角矩阵B中、副对角线上的元素不为0的子矩阵,使该双对角矩阵B逐渐收敛为对角矩阵S;其中,在每一次迭代中都会在当前副对角线上的元素不为0的子矩阵的QR迭代过程中生成两个Givens旋转参数组,并且利用这两个Givens旋转参数组分别对中间矩阵U和V进行Givens旋转,以使中间矩阵U和V最终分别被转换为矩阵A的左奇异向量矩阵UA和右奇异向量矩阵VA。
图1示出了上述现有的奇异值分解过程的详细流程。如图1所示,首先,在步骤105,对于给定的矩阵A,将其双对角化,即将矩阵A转换为如图2(a)或2(b)所示的形式的双对角矩阵B,同时得到中间矩阵U和V。其中在该双对角矩阵B中,除主对角线以及副对角线之外的所有元素均为零。
接着,迭代地执行以下的步骤110~130,以使双对角矩阵B逐渐收敛为对角矩阵S,并且分别将中间矩阵U和V转换为矩阵A的左奇异向量矩阵UA和右奇异向量矩阵VA。
具体地,在步骤110,判断当前的双对角矩阵B是否已经收敛为对角矩阵。如果是,则该过程结束,否则,前进到步骤115。
在步骤115,从双对角矩阵B中找出当前其副对角线上的元素均不为0的子矩阵B1,而在该子矩阵B1之前的对角线上的元素均已收敛为0。
在步骤120,对所找出的子矩阵B1进行QR迭代。
在该步骤中,对于子矩阵B1进行QR迭代的迭代步数是该子矩阵B1的阶数n减去1。其中,在每一步迭代中都会生成一个如图3(a)所示的形式的Givens旋转矩阵Qk,{k=1,...,n-1}和一个如图3(b)所示的形式的Givens旋转矩阵Pk,{k=1,...,n-1}。如图3(a)和3(b)所示,Givens旋转矩阵Qk,{k=1,...,n-1}和Pk,{k=1,...,n-1}中分别包括一对Givens旋转参数c和s。并且,在每一步迭代之后,都会利用所生成的Qk,{k=1,...,n-1}和Pk,{k=1,...,n-1}按照如下公式更新双对角矩阵B:
从而,在对子矩阵B1进行n-1步迭代之后,便会生成n-1个Givens旋转矩阵Qk,{k=1,...,n-1}和n-1个Givens旋转矩阵Pk,{k=1,...,n-1}。在此,用Cu、Su对来表示所生成的这n-1个Givens旋转矩阵Qk,{k=1,...,n-1},其中Cu=(c1,c2,...cn-1),Su=(s1,s2,...sn-1)。该Cu、Su对便称作对应于Qk,{k=1,...,n-1}的一个Givens旋转参数组。同理,n-1个Givens旋转矩阵Pk,{k=1,...,n-1}也存在着一个对应的Givens旋转参数组,即Cv、Sv对。
并且,在该步骤中,与对应于Qk,{k=1,...,n-1}的Cu、Su对和对应于Pk,{k=1,...,n-1}的Cv、Sv对一起,将子矩阵B1的左右边界位置记录下来,该边界位置在矩阵U和V上所界定的U的子矩阵和V的子矩阵将分别根据Cu、Su和Cv、Sv更新。
在步骤125,利用对应于Qk,{k=1,...,n-1}的Cu、Su对及其相应子矩阵的左右边界位置,对中间矩阵U进行Givens旋转。
具体地,根据U=UQT、Q=Q1Q2Q3...Qn-1或Q=Qn-1Qn-2Qn-3...Q1以及ui,j=ui,jcj+ui,j+1sj和ui,j+1=ui,j+1cj-ui,jsj,对中间矩阵U中相应子矩阵的元素ui,j进行Givens旋转计算,即对中间矩阵U进行n-1次Givens旋转,从而利用该Cu、Su对更新中间矩阵U。
在步骤130,利用对应于Pk,{k=1,...,n-1}的Cv、Sv对及其相应子矩阵的左右边界位置,对中间矩阵V进行Givens旋转。
具体地,根据VT=PVT、P=P1P2P3...Pn-1或P=Pn-1Pn-2Pn-3...P1以及vi+1,j=vi+1,jci-vi,jsi和vi,j=vi+1,jsi+vi,jci,对中间矩阵V中相应子矩阵的元素vi,j进行Givens旋转计算,即对中间矩阵V进行n-1次Givens旋转,从而利用该Cv、Sv对更新中间矩阵V。
然后,该过程返回到步骤110,直到双对角矩阵B完全收敛为对角矩阵S,即副对角线上的元素均收敛为0。并且,在B完全收敛为对角矩阵时,中间矩阵U也转换为矩阵A的左奇异向量矩阵UA,而中间矩阵V则转换为矩阵A的右奇异向量矩阵VA。
此外,现有的LAPACK中的特征值分解过程是:对于给定的矩阵A,首先将其转换为三对角矩阵B,同时得到一个中间矩阵U;然后,迭代地找出并转换该三对角矩阵B中、两条副对角线上的元素不为0的子矩阵,使该三对角矩阵B逐渐收敛为对角矩阵Z;其中,在每一次迭代中都会在当前两条副对角线上的元素不为0的子矩阵的QR迭代过程中生成一个Givens旋转参数组,并且利用该Givens旋转参数组对中间矩阵U进行Givens旋转,以使该中间矩阵U最终被转换为矩阵A的特征向量矩阵UA。
图4示出了上述现有的特征值分解过程的详细流程。如图4所示,首先,在步骤405,对于给定的矩阵A,将其三对角化,即将矩阵A转换为如图5所示的形式的三对角矩阵B,同时得到一个中间矩阵U。其中在该三对角矩阵B中,除主对角线以及上下两条副对角线之外的所有元素均为零,并且两条副对角线上的元素是对称的。
接着,迭代地执行以下的步骤410~425,以使三对角矩阵B逐渐收敛为对角矩阵Z,并且将中间矩阵U转换为矩阵A的特征向量矩阵UA。
具体地,在步骤410,判断当前的三对角矩阵B是否已经收敛为对角矩阵。如果是,则该过程结束,否则,该过程前进到步骤415。
在步骤415,从三对角矩阵B中找出当前其两条副对角线上的元素均不为0的子矩阵B1,而在该子矩阵B1之前的两条副对角线上的元素均已收敛为0。
在步骤420,对所找出的子矩阵B1进行QR迭代。
在该步骤中,对于子矩阵B1进行QR迭代的迭代步数是该子矩阵B1的阶数n减去1。其中,在每一步迭代中都会生成一个如图3(a)所示的形式的Givens旋转矩阵Qk,{k=1,...,n-1}。并且,在每一步迭代之后,都会利用所生成的Qk,{k=1,...,n-1}按照如下公式更新三对角矩阵B:
从而,在对子矩阵B1进行n-1步迭代之后,便会生成n-1个Givens旋转矩阵Qk,{k=1,...,n-1}。同样,可用一个Givens旋转参数组、即C、S对来表示所生成的这n-1个Givens旋转矩阵Qk,{k=1,...,n-1},其中C=(c1,c2,...cn-1),S=(s1,s2,...sn-1)。
并且,在该步骤中,与该C、S对一起,将子矩阵B1的左右边界位置记录下来,作为中间矩阵U中要应用该C、S对进行更新的相应子矩阵的左右边界位置。
在步骤425,利用该C、S对及其相应子矩阵的左右边界位置,对中间矩阵U进行Givens旋转。
具体地,根据U=UQT、Q=Q1Q2Q3...Qn-1或Q=Qn-1Qn-2Qn-3...Q1以及ui,j=ui,jcj+ui,j+1sj和ui,j+1=ui,j+1cj-ui,jsj,对中间矩阵U中相应子矩阵的元素ui,j进行Givens旋转计算,即对中间矩阵U进行n-1次Givens旋转,从而利用该C、S对更新中间矩阵U。
然后,该过程返回到步骤410,直到三对角矩阵B完全收敛为对角矩阵Z,即两条副对角线上的元素均收敛为0。并且,在B完全收敛为对角矩阵时,中间矩阵U也转换为矩阵A的特征向量矩阵UA。
LAPACK中根据上述图1和图4的过程所设计的奇异值分解例程和特征值分解例程,会存在大量的矩阵运算操作,对于这样的例程而言,性能是非常关键的。
Cell宽频引擎(Cell Broadband Engine,CBE)是一种单芯片多处理器系统。如图6所示,CBE系统具有在一个共享的、相干的存储器上进行操作的9个处理器,其中包括一个主处理器(Power Processing Unit,PPU)和8个协处理器(Synergistic Processing unit,SPU)。在这样的系统结构下,CBE能够提供杰出的计算能力。具体来说,Cell处理器在时钟频率3.2GHz的情况下能够达到204G浮点运算数/秒。具有这样高的计算能力,对于高计算任务量的矩阵奇异值分解和特征值分解来说,CBE显然是一个理想的执行平台。
但是,如果将上述图1和图4的方案直接应用在CBE上,则会存在因存储器带宽限制而导致的计算性能降低的问题。
因为,由于在每一次迭代中都会利用在QR迭代过程中所生成的Givens旋转参数组对中间矩阵进行Givens旋转,所以,在每一次迭代中都需要将中间矩阵中相应子矩阵的数据传输到SPU的本地存储区中,并在SPU对其完成Givens旋转计算之后,再将该子矩阵数据传回到主存储器中。
具体来说,假设要传输的子矩阵的大小是n×n,则在双精度矩阵的情况下,就需要从主存储器传输n2个双精度数据到SPU的本地存储区中。并且,根据ui,j=ui,jcj+ui,j+1sj和ui,j+1=ui,j+1cj-ui,jsj可知,为了对一个数据进行更新,SPU需要进行6次浮点运算,从而,对于n2个双精度数据共要进行6n2次浮点运算。并且,在SPU完成6n2次浮点运算之后,还需要将这些数据传回到主存储器中。从而,由于每一个双精度数据占用8字节,所以此时的计算传输比将为:6n2/(2n2*8)=3/8。而对于CBE来说,由于其最大存储器带宽是25.6GB/秒,所以在计算传输比为3/8的情况下,该存储器带宽仅能够维持SPU在每秒内进行9.6G次浮点运算,这样的计算性能远远低于CBE所能够达到的最大204G浮点运算数/秒的计算能力。这导致了CBE的计算性能的急剧降低。
可以看出,对于CBE这样具有存储器带宽限制的处理系统而言,如果采用图1和图4的方案,则每次迭代中的Givens旋转计算便成为导致计算性能降低的主要因素。
因此,需要设计出一种适合于具有存储器带宽限制的处理系统的奇异值分解方案和特征值分解方案。
发明内容
鉴于上述问题,本发明提供了一种在处理系统上对矩阵进行奇异值分解的方法和装置以及对矩阵进行特征值分解的方法和装置,以解决由于该处理系统中的存储器带宽限制而导致的计算性能下降问题。
根据本发明的一个方面,提供了一种在处理系统上对矩阵进行奇异值分解的方法,包括:将上述矩阵双对角化,以将该矩阵转换为双对角矩阵,同时得到将要转换为该矩阵的奇异向量矩阵的中间矩阵;以及迭代地找出并转换上述双对角矩阵中、副对角线上的元素不为0的子矩阵,以使该双对角矩阵逐渐收敛为对角矩阵,并将上述中间矩阵转换为上述矩阵的奇异向量矩阵;其中,在每一次迭代中包括:将在上述双对角矩阵的、当前副对角线上的元素不为0的子矩阵的QR迭代过程中所生成的Givens旋转参数组以及上述中间矩阵中要应用该Givens旋转参数组的相应子矩阵的左右边界位置累积在存储器中;以及在所累积的上述Givens旋转参数组的个数达到指定阈值时,利用这多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对上述中间矩阵进行Givens旋转,其中上述指定阈值是大于等于2的整数。
附图说明
相信通过以下结合附图对本发明具体实施方式的说明,能够使人们更好地了解本发明上述的特点、优点和目的。
图1是现有的奇异值分解过程的流程图;
图2是双对角矩阵的图示说明;
图3是Givens旋转矩阵的图示说明;
图4是现有的特征值分解过程的流程图;
图5是三对角矩阵的图示说明;
图6是CBE的系统框图;
图7是根据本发明实施例的在处理系统上对矩阵进行奇异值分解的方法的流程图;
图8是根据本发明实施例的在处理系统上对矩阵进行特征值分解的方法的流程图;
图9是根据本发明实施例的图7和图8的方法中Givens旋转步骤的详细流程图;
图10是图9中的Givens旋转过程的图示说明;
图11是根据本发明实施例的在处理系统中对矩阵进行奇异值分解的装置的方框图;
图12是根据本发明实施例的在处理系统中对矩阵进行特征值分解的装置的方框图;以及
图13是图11和图12的装置中Givens旋转模块的详细方框图。
具体实施方式
本发明的总体构思是,在奇异值分解和特征值分解这样包括矩阵的Givens旋转的矩阵分解过程中,不是在每次迭代中均利用所生成的Givens旋转参数组对中间矩阵进行Givens旋转,而是将该Givens旋转参数组累积在存储器中,并且在所累积的Givens旋转参数组的个数达到指定阈值时,才利用这多个Givens旋转参数组集中地对中间矩阵进行Givens旋转。
下面就结合附图对本发明的各个优选实施例进行详细说明。
图7是根据本发明实施例的在处理系统上对矩阵进行奇异值分解的方法的流程图。如图7所示,首先,在步骤705,对于给定的矩阵A,将其双对角化,即将矩阵A转换为图2(a)或2(b)所示的形式的双对角矩阵B,同时得到中间矩阵U和V,以满足:B=UTAV。
接着,迭代地执行以下的步骤710~740,以使双对角矩阵B逐渐收敛为对角矩阵,从而成为矩阵A的奇异值矩阵S,并且分别将中间矩阵U和V转换为矩阵A的左奇异向量矩阵UA和右奇异向量矩阵VA。
具体地,在步骤710,判断当前的双对角矩阵B是否已经收敛为对角矩阵。如果是,则该过程转到步骤745,否则,前进到步骤715。
在步骤715,从双对角矩阵B中找出当前其副对角线上的元素均不为0的子矩阵B1,而在该子矩阵B1之前的对角线上的元素均已收敛为0。
在步骤720,对所找出的子矩阵B1进行QR迭代。在该步骤中,与前面图1中的步骤120相同,除了对双对角矩阵B进行更新之外,还会生成一个要应用于中间矩阵U的Givens旋转参数组、即Cu、Su对和一个要应用于中间矩阵V的Givens旋转参数组、即Cv、Sv对,并且,将子矩阵B1的左右边界位置记录下来,作为中间矩阵U中要应用Cu、Su对进行更新的相应子矩阵的左右边界位置以及中间矩阵V中要应用Cv、Sv对进行更新的相应子矩阵的左右边界位置。
在步骤725,将在步骤720中生成的矩阵U和矩阵V对应的两组Givens旋转参数组和边界位置累积在存储器中。
在步骤730,判断所累积的、要应用于中间矩阵U的Givens旋转参数组的个数和要应用于中间矩阵V的Givens旋转参数组的个数是否分别达到指定阈值。其中,该指定阈值是大于等于2的整数,并且其具体数值是根据该处理系统中处理器的本地存储区大小而设定的。在CBE的情况下,考虑到各SPU的本地存储区大小存在256K的限制,可以将该指定阈值设定为16。但是,并不限于此,如果处理器的本地存储区能够存储更多的Givens旋转参数组,也可以将该指定阈值设定为更大的值。也就是说,如果处理器的本地存储区的空间允许,则指定阈值设定得越大,所得到的性能提升效果就会越显著。
在该步骤中,如果判断为所累积的、要应用于中间矩阵U的Givens旋转参数组的个数和要应用于中间矩阵V的Givens旋转参数组的个数分别达到了指定阈值,则该过程前进到步骤735,否则返回到步骤710重复上述过程。
在步骤735,利用所累积的、要应用于中间矩阵U的多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对中间矩阵U进行Givens旋转。
具体地,对于该多个Givens旋转参数组的每一个,都根据U=UQT、Q=Q1Q2Q3....Qn-1或Q=Qn-1Qn-2Qn-3...Q1以及ui,j=ui,jcj+ui,j+1sj和ui,j+1=ui,j+1cj-ui,jsj,对中间矩阵U进行n-1次Givens旋转,以利用该Givens旋转参数组更新中间矩阵U。
在步骤740,利用所累积的、要应用于中间矩阵V的多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对中间矩阵V进行Givens旋转。
具体地,对于该多个Givens旋转参数组的每一个,都根据VT=PVT、P=P1P2P3...Pn-1或P=Pn-1Pn-2Pn-3...P1以及vi+1,j=vi+1,jci-vi,jsi和vi,j=vi+1,jsi+vi,jci,对中间矩阵V进行n-1次Givens旋转,以利用该Givens旋转参数组更新中间矩阵V。
然后,该过程返回到步骤710,直到双对角矩阵B完全收敛为对角矩阵S,即副对角线上的元素均收敛为0。
在步骤745,在双对角矩阵B完全收敛为对角矩阵S之后,判断在处理器的本地存储区中是否还存在所累积的剩余Givens旋转参数组未应用到中间矩阵U或V上。如果存在,则该过程前进到步骤750,否则该过程结束。
在该步骤中,之所以在迭代过程结束之后判断在处理器的本地存储区中是否还存在所累积的剩余Givens旋转参数组,是基于这样的考虑:在使双对角矩阵B收敛为对角矩阵的最后一次迭代中,可能所累积的、要应用于中间矩阵U的Givens旋转参数组的个数以及要应用于中间矩阵V的Givens旋转参数组的个数未达到指定阈值,从而在此次迭代中未对中间矩阵U和V进行Givens旋转。
接着,在步骤750,利用处理器的本地存储区中所累积的、要应用于中间矩阵U的剩余Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对中间矩阵U进行Givens旋转。该步骤可参照前面的步骤735来实现。
在步骤755,利用处理器的本地存储区中所累积的、要应用于中间矩阵V的剩余Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对中间矩阵V进行Givens旋转。该步骤可参照前面的步骤740来实现。此后,该过程结束。
在上述图7的过程结束时,中间矩阵U便转换为矩阵A的左奇异向量矩阵UA,而中间矩阵V则转换为矩阵A的右奇异向量矩阵VA。
图8是根据本发明实施例的在处理系统上对矩阵进行特征值分解的方法的流程图。如图8所示,首先,在步骤805,对于给定的矩阵A,将其三对角化,即将矩阵A转换为如图5所示的形式的三对角矩阵B,同时得到中间矩阵U。
接着,迭代地执行以下的步骤810~835,以使三对角矩阵B逐渐收敛为对角矩阵,从而成为矩阵A的特征值矩阵Z,并且将中间矩阵U转换为矩阵A的特征向量矩阵UA。
具体地,在步骤810,判断当前的三对角矩阵B是否已经收敛为对角矩阵。如果是,则该过程转到步骤840,否则,前进到步骤815。
在步骤815,从三对角矩阵B中找出当前其两条副对角线上的元素均不为0的子矩阵B1,而在该子矩阵B1之前的两条副对角线上的元素均已收敛为0。
在步骤820,对所找出的子矩阵B1进行QR迭代。在该步骤中,与前面图4中的步骤420相同,除了对三对角矩阵B进行更新之外,还会生成一个Givens旋转参数组、即C、S对,并且,将子矩阵B1的左右边界位置记录下来,作为中间矩阵U中要应用该C、S对进行更新的相应子矩阵的左右边界位置。
在步骤825,将在步骤820中生成的上述Givens旋转参数组以及中间矩阵U中要应用该C、S对进行更新的相应子矩阵的左右边界位置累积在存储器中。
在步骤830,判断所累积的Givens旋转参数组的个数是否达到指定阈值。关于该指定阈值,可参照在前面图7的步骤730中所说明的内容。并且,同样,在本实施例中,该指定阈值是大于等于2的整数,并且对于CBE来说,该指定阈值可以设定为16。
在该步骤中,如果判断为所累积的Givens旋转参数组的个数达到指定阈值,则该过程前进到步骤835,否则返回到步骤810重复上述过程。
在步骤835,利用所累积的多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对中间矩阵U进行Givens旋转。
具体地,对于该多个Givens旋转参数组的每一个,都根据U=UQT、Q=Q1Q2Q3...Qn-1或Q=Qn-1Qn-2Qn-3...Q1以及ui,j=ui,jcj+ui,j+1sj和ui,j+1=ui,j+1cj-ui,jsj,对中间矩阵U进行n-1次Givens旋转,以利用该Givens旋转参数组更新中间矩阵U。
然后,该过程返回到步骤810,直到三对角矩阵B完全收敛为对角矩阵Z,即两条副对角线上的元素均收敛为0。
在步骤840,在三对角矩阵B完全收敛为对角矩阵Z之后,判断在处理器的本地存储区中是否还存在所累积的剩余Givens旋转参数组未应用到中间矩阵U上。如果存在,则该过程前进到步骤845,否则该过程结束。
在步骤845,利用处理器的本地存储区中所累积的剩余Givens旋转参数组的每一个及其相应子矩阵的左右边界位置对中间矩阵U进行Givens旋转。该步骤可参照前面的步骤835来实现。此后,该过程结束。
在上述图8的过程结束时,中间矩阵U便转换为矩阵A的特征向量矩阵UA。
此外,在上面图7或图8的方法中,由于是在累积了多个Givens旋转参数组之后集中地在步骤735、740或步骤835对中间矩阵进行Givens旋转,所以该Givens旋转的实现过程与现有的实现方式是不相同的。下面以中间矩阵U为例,来详细描述图7中的步骤735、740或图8中的步骤835的Givens旋转过程。
图9是根据本发明实施例的图7和图8的方法中的Givens旋转步骤的详细流程图。如图9所示,首先在步骤905,根据所累积的多个Givens旋转参数组的每一个的相应子矩阵的左右边界位置,在中间矩阵U中确定包括这每一个相应子矩阵的并集矩阵U1。
在步骤910,按照预定的块大小,将并集矩阵U1划分为多个块。其中,该预定的块大小是根据处理器的本地存储区大小而设定的,并且该预定的块大小中的列数是上述指定阈值的整数倍。在如前所述针对CBE将上述指定阈值设定为16的情况下,该预定的块大小可以设定为256×16。
接着,在CBE那样具有至少一个核心处理器以及多个加速器(accelerator)的多处理器系统的情况下,执行下面的步骤915。而在单处理器系统的情况下,则跳过该步骤915。
在步骤915,如图10(a)所示,将上述并集矩阵U1中按块划分成的各行分配给多个加速器,其中每一个加速器被分配一行或多行。并且,被分配给一个加速器的多行可以是相互连续的。
在步骤920,使处理器对于每一行(在上述多处理器系统的情况下使多个加速器的每一个对于分配给其的每一行),初始从该处理系统的主存储器中、从该行的开始部分取出两个相邻的块、即块i和块i+1到该处理器(或加速器)的本地存储区中。
在步骤925,对于上述多个Givens旋转参数组的每一个,根据其相应子矩阵的左右边界位置,确定块i和块i+1中处于该左右边界位置之间的元素,并且对于这些元素利用该Givens旋转参数组进行Givens旋转计算,同时记录块i+1中未应用该Givens旋转参数组进行完全更新的列的位置。
以16个Givens旋转参数组、256×16的块大小的情况为例来进行说明。如图10(b)所示,在步骤925的每一次执行中,由于处理器的本地存储区中存储有两个块,所以共有32列、256行数据。
由前述的公式ui,j=ui,jcj+ui,j+1sj和ui,j+1=ui,j+1cj-ui,jsj可知,在利用一个Givens旋转参数组对块i和块i+1进行Givens旋转计算时,块i和块i+1中的每个元素都要被更新两次。在此,将经过两次更新的元素称为完全更新。而且可知,欲完全更新元素ui,j,需要有元素ui,j和ui,j+1的值。从而,在处理器的本地存储区中有32列、256行数据的情况下,如图10(b)所示,在第一个Givens旋转参数组的更新T1中,由于未存储第32列的下一列数据的值,使得针对该第32列的元素不能完成ui,j=ui,jcj+ui,j+1sj部分的计算、从而不能完全更新该第32列的元素,所以仅第1列到第31列的元素得到完全更新。从而,连锁地,在第二个Givens旋转参数组的更新T2中,仅能够完全更新第1列到第30列的元素,而这时第31列的数据还没有经过完全更新。与此类推,到第16个Givens旋转参数组的更新T16中,仅能够完全更新前16列、第i块的元素。如图10(b)所示,在各次更新中,经过完全更新的元素变为下一个字母,而经过部分更新的元素则用方框来表示,其中Tk表示第k个Givens旋转参数组的更新。
从而,如图10(b)所示,在应用了所有16个Givens旋转参数组之后,块i中的全部数据都经过了完全更新,可以写回到主存储器中。块i+1中的部分数据经过了完全更新、而部分数据则仅经过了部分更新,从而,需要记录块i+1中未进行完全更新的列的位置,以便在取入下一个块之后、利用该下一个块的数据将其完全更新。
在步骤930,将利用上述多个Givens旋转参数组进行了完全更新后的块i写回到主存储器中。
在步骤935,判断该行是否结束。如果是,则该过程结束,否则前进到步骤940。
在步骤940,从主存储器中获取该行中的下一个块i+2(新的块i+1)到本地存储区中,从而与上一个未返回到主存储器中的块i+1(新的块i)构成新的两个相邻块。
在步骤945,对于上述多个Givens旋转参数组的每一个,根据其相应子矩阵的左右边界位置,确定上述新的块i和新的块i+1中处于该左右边界位置之间的元素,并且利用该Givens旋转参数组对于这些元素、从所记录的块i+1(新的块i)中未应用该Givens旋转参数组进行完全更新的列的位置处开始进行Givens旋转计算,同时记录新的块i+1中未应用该Givens旋转参数组进行完全更新的列的位置。然后,该过程返回到步骤930。
需要说明的是,在步骤945中,对于所记录的块i+1(新的块i)中未应用相应的Givens旋转参数组进行完全更新的列的Givens旋转计算,仅是应用该相应的Givens旋转参数组完成在上一循环中未完成的部分的Givens旋转计算。
以上就是对本实施例的在处理系统上对矩阵进行奇异值分解的方法和对矩阵进行特征值分解的方法的详细描述。在本实施例中,在奇异值分解和特征值分解的过程中,不是在每次一得到Givens旋转参数组后便利用其对中间矩阵进行Givens旋转,而是在积累了多组Givens旋转参数组后,集中地进行Givens旋转计算。这样,可以极大地减少处理系统中的主存储器与处理器的本地存储区之间的数据传输量,能够提高计算传输比,从而极大地改善计算性能。
具体来说,如果采用本实施例,则在双精度矩阵的情况下,计算传输比将从3/8上升到3/(8/m’+8/k),其中k是指定阈值,m’是块中的行数。以指定阈值为16、块大小为256×16的情况为例,计算传输比将是5.6。
可以理解,上述图7~10的方法不仅适用于双精度矩阵,而且对于单精度矩阵和复数矩阵来说,也都是适用的。
此外,还可以理解,本实施例不仅在类似于CBE这样具有存储器带宽限制的体系结构中具有实际意义,即使在通用处理器体系(包括单核或多核)下,由于缓存的存在,也会大大提升计算性能。
在同一发明构思下,本发明提供一种在处理系统中对矩阵进行奇异值分解的装置和对矩阵进行特征值分解的装置。下面结合附图对其进行描述。
图11是根据本发明实施例的在处理系统中对矩阵进行奇异值分解的装置的方框图。如图11所示,本实施例的在处理系统中对矩阵进行奇异值分解的装置10包括:双对角化单元11和奇异值分解单元12。
双对角化单元11用于将给定的矩阵A双对角化,以将该矩阵转换为双对角矩阵B,同时得到中间矩阵U和V。
奇异值分解单元12用于迭代地找出并转换上述双对角矩阵B中、副对角线上的元素不为0的子矩阵B1,以使该双对角矩阵B逐渐收敛为对角矩阵,从而成为矩阵A的奇异值矩阵S,并将中间矩阵U和V分别转换为矩阵A的左奇异向量矩阵UA和右奇异向量矩阵VA。
如图11所示,该奇异值分解单元12可以进一步包括:子矩阵确定单元121、QR迭代单元122、参数累积单元123、判断单元124和Givens旋转模块30。
子矩阵确定单元121用于在每一次迭代中,从双对角矩阵B中找出其当前副对角线上的元素均不为0的子矩阵B1。
QR迭代单元122用于在每一次迭代中,对子矩阵确定单元121所确定的子矩阵B1进行QR迭代。其中,在QR迭代过程中,QR迭代单元122除了对双对角矩阵B进行更新之外,还生成一个要应用于中间矩阵U的Givens旋转参数组和一个要应用于中间矩阵V的Givens旋转参数组,并且记录子矩阵B1的左右边界位置,作为中间矩阵U中要应用其相应的Givens旋转参数组进行更新的相应子矩阵的左右边界位置以及中间矩阵V中要应用其相应的Givens旋转参数组进行更新的相应子矩阵的左右边界位置。
参数累积单元123用于在每一次迭代中,将QR迭代单元122所生成的要应用于中间矩阵U的Givens旋转参数组、要应用于中间矩阵V的Givens旋转参数组以及中间矩阵U和V中要应该其相应的Givens旋转参数组进行更新的相应子矩阵的左右边界位置累积在存储器中。
判断单元124用于在每一次迭代中,判断所累积的、要应用于中间矩阵U的Givens旋转参数组的个数和要应用于中间矩阵V的Givens旋转参数组的个数是否分别达到指定阈值。如果达到,则针对所累积的、要应用于中间矩阵U的多个Givens旋转参数组启用Givens旋转模块30以对中间矩阵U进行Givens旋转,并针对所累积的、要应用于中间矩阵V的多个Givens旋转参数组启用Givens旋转模块30以对中间矩阵V进行Givens旋转。并且,在双对角矩阵B收敛为对角矩阵S之后,判断单元124还判断是否还存在所累积的剩余Givens旋转参数组未应用到中间矩阵U或V上。如果存在,则针对要应用于中间矩阵U的剩余Givens旋转参数组启用Givens旋转模块30以对中间矩阵U进行Givens旋转,并针对要应用于中间矩阵V的剩余Givens旋转参数组启用Givens旋转模块30以对中间矩阵V进行Givens旋转。
Givens旋转模块30用于利用所累积的多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对中间矩阵进行Givens旋转。
图12是根据本发明实施例的在处理系统中对矩阵进行特征值分解的装置的方框图。如图12所示,本实施例的在处理系统中对矩阵进行特征值分解的装置20包括:三对角化单元21和特征值分解单元22。
三对角化单元21用于将给定的矩阵A三对角化,以将该矩阵转换为三对角矩阵B,同时得到中间矩阵U。
特征值分解单元22用于迭代地找出并转换三对角矩阵B中、两条副对角线上的元素均不为0的子矩阵B1,以使该三对角矩阵B逐渐收敛为对角矩阵,从而成为矩阵A的特征值矩阵Z,并将中间矩阵U转换为矩阵A的特征向量矩阵UA。
如图12所示,特征值分解单元22可以进一步包括:子矩阵确定单元221、QR迭代单元222、参数累积单元223、判断单元224和Givens旋转模块30。
子矩阵确定单元221用于在每一次迭代中,从三对角矩阵B中找出其当前两条副对角线上的元素均不为0的子矩阵B1。
QR迭代单元222用于在每一次迭代中,对子矩阵确定单元221所确定的子矩阵B1进行QR迭代。其中,在QR迭代过程中,QR迭代单元222除了对三对角矩阵B进行更新之外,还生成一个Givens旋转参数组,并且记录子矩阵B1的左右边界位置,作为中间矩阵U中要应用该Givens旋转参数组进行更新的相应子矩阵的左右边界位置。
参数累积单元223用于在每一次迭代中,将QR迭代单元222所生成的Givens旋转参数组以及中间矩阵U中要应该Givens旋转参数组进行更新的相应子矩阵的左右边界位置累积在存储器中。
判断单元224用于在每一次迭代中,判断所累积的Givens旋转参数组的个数是否达到指定阈值。如果达到,则针对所累积的这些Givens旋转参数组启用Givens旋转模块30以对中间矩阵U进行Givens旋转。并且,在三对角矩阵B收敛为对角矩阵Z之后,判断单元224还判断是否还存在所累积的剩余Givens旋转参数组未应用到中间矩阵U上。如果存在,则针对这些剩余Givens旋转参数组启用Givens旋转模块30以对中间矩阵U进行Givens旋转。
Givens旋转模块30用于利用所累积的多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对中间矩阵进行Givens旋转。
图13示出了根据本发明实施例的图11和图12的装置中的Givens旋转模块30的详细方框图。如图13所示,Givens旋转模块30包括:并集矩阵确定单元31、矩阵划分单元32和Givens旋转单元33。
并集矩阵确定单元31用于根据所累积的多个Givens旋转参数组的每一个的相应子矩阵的左右边界位置,在中间矩阵U中确定包括该每一个相应子矩阵的并集矩阵U1。
矩阵划分单元32用于按照预定的块大小,将上述并集矩阵U1划分为多个块。在包括至少一个核心处理器以及多个加速器的多处理器系统(诸如CBE)的情况下,矩阵划分单元32还将并集矩阵U1中按块划分成的各行分配给该多个加速器,其中每一个加速器被分配一行或多行。
Givens旋转单元33用于使处理器对于上述并集矩阵U1中按块划分成的每一行(在上述多处理器系统的情况下使多个加速器的每一个对于分配给其的每一行),以初始多个相邻块、后续依次用未计算的相邻块替换前面已计算完成的块的方式,从该处理系统的主存储器中获取该行中的多个块到其本地存储区中,并利用上述多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对该多个块中相应位置的元素进行Givens旋转计算。
如图13所示,Givens旋转单元33可以进一步包括:块传输单元331和Givens旋转计算单元332。
块传输单元331用于为上述处理器(或多个加速器的每一个)实现其本地存储区与该处理系统的主存储器之间的块传输。
Givens旋转计算单元332用于使上述处理器(或多个加速器的每一个)利用上述所累积的多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对其本地存储区中的块进行Givens旋转计算。
其中,在上述处理器对于每一行(或多个加速器的每一个对于分配给其的每一行)进行Givens旋转计算时:
块传输单元331使该处理器(或加速器)初始从主存储器中、从该行的开始部分取出两个相邻的块到其本地存储区中;
Givens旋转计算单元332使该处理器(或加速器)对于上述多个Givens旋转参数组的每一个:根据其相应子矩阵的左右边界位置,确定上述两个相邻块中处于该左右边界位置之间的元素,并且对于这些元素利用该Givens旋转参数组进行Givens旋转计算,同时记录这两个相邻块中的后一块中未应用该Givens旋转参数组进行完全更新的列的位置;
块传输单元331将上述两个相邻块中进行了完全更新后的前一块写回到上述主存储器中,并且从该主存储器中获取上述行中的下一个相邻块到该处理器(或加速器)的本地存储区中;
Givens旋转计算单元332对新的相邻块重复上述计算过程。其中,在此次重复计算过程中,Givens旋转计算单元332使该处理器(或加速器)对于上述多个Givens旋转参数组的每一个,从上一次所记录的两个相邻块中的后一块(当前两个相邻块中的前一块)中未应用该Givens旋转参数组进行完全更新的列的位置处开始对当前的两个相邻块进行Givens旋转计算;
块传输单元331和Givens旋转计算单元332重复上述过程直到该行结束。
以上就是对本实施例的在处理系统中对矩阵进行奇异值分解的装置和对矩阵进行特征值分解的装置的详细描述。其中,该装置10和20及其各个组成部分,可以由专用的电路或芯片构成,也可以通过计算机(处理器)执行相应的程序来实现。
以上虽然通过一些示例性的实施例对本发明的在处理系统上对矩阵进行奇异值分解的方法和装置以及对矩阵进行特征值分解的方法和装置进行了详细的描述,但是以上这些实施例并不是穷举的,本领域技术人员可以在本发明的精神和范围内实现各种变化和修改。因此,本发明并不限于这些实施例,本发明的范围仅以所附权利要求为准。
Claims (14)
1.一种在处理系统上对矩阵进行奇异值分解的方法,包括:
将上述矩阵双对角化,以将该矩阵转换为双对角矩阵,同时得到将要转换为该矩阵的奇异向量矩阵的中间矩阵;以及
迭代地找出并转换上述双对角矩阵中、副对角线上的元素不为0的子矩阵,以使该双对角矩阵逐渐收敛为对角矩阵,并将上述中间矩阵转换为上述矩阵的奇异向量矩阵;
其中,在每一次迭代中包括:
将在上述双对角矩阵的、当前副对角线上的元素不为0的子矩阵的QR迭代过程中所生成的Givens旋转参数组以及上述中间矩阵中要应用该Givens旋转参数组的相应子矩阵的左右边界位置累积在存储器中;以及
在所累积的上述Givens旋转参数组的个数达到指定阈值时,利用这多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对上述中间矩阵进行Givens旋转,其中上述指定阈值是大于等于2的整数。
2.一种在处理系统上对矩阵进行特征值分解的方法,包括:
将上述矩阵三对角化,以将该矩阵转换为三对角矩阵,同时得到将要转换为该矩阵的特征向量矩阵的中间矩阵;以及
迭代地找出并转换上述三对角矩阵中、两条副对角线上的元素不为0的子矩阵,以使该三对角矩阵逐渐收敛为对角矩阵,并将上述中间矩阵转换为上述矩阵的特征向量矩阵;
其中,在每一次迭代中包括:
将在上述三对角矩阵的、当前两条副对角线上的元素不为0的子矩阵的QR迭代过程中所生成的Givens旋转参数组以及上述中间矩阵中要应用该Givens旋转参数组的相应子矩阵的左右边界位置累积在存储器中;以及
在所累积的上述Givens旋转参数组的个数达到指定阈值时,利用这多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对上述中间矩阵进行Givens旋转,其中上述指定阈值是大于等于2的整数。
3.根据权利要求1或2所述的方法,其中上述指定阈值是根据上述处理系统中处理器的本地存储区大小而确定的。
4.根据权利要求1或2所述的方法,其中上述利用这多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对上述中间矩阵进行Givens旋转的步骤进一步包括:
根据上述多个Givens旋转参数组的每一个的相应子矩阵的左右边界位置,在上述中间矩阵中确定包括该多个Givens旋转参数组的每一个的相应子矩阵的并集矩阵;
按照预定的块大小,将上述并集矩阵划分为多个块;以及
对于上述并集矩阵中按块划分成的每一行,以初始多个相邻块、后续依次用未计算的相邻块替换前面已计算完成的块的方式,使上述处理系统中的处理器依次从该处理系统的主存储器中获取该行中的多个块到其本地存储区中,并利用上述多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对该多个块中相应位置的元素进行Givens旋转计算。
5.根据权利要求4所述的方法,其中上述处理系统是包括至少一个核心处理器以及多个加速器(accelerator)的多处理器系统;
在上述按照预定的块大小,将上述并集矩阵划分为多个块的步骤之后进一步包括:
将上述并集矩阵中按块划分成的各行分配给上述多个加速器,其中每一个加速器被分配一行或多行。
6.根据权利要求4所述的方法,其中使上述处理系统中的处理器依次从该处理系统的主存储器中获取该行中的多个块到其本地存储区中,并利用上述多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对该多个块中相应位置的元素进行Givens旋转计算的步骤进一步包括:
使上述处理器对于每一行:
初始从上述主存储器中、从该行的开始部分取出两个相邻的块到该加速器的本地存储区中;
利用上述多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对上述两个相邻块中相应位置的元素进行Givens旋转计算,并对于上述多个Givens旋转参数组的每一个记录这两个相邻块中的后一块中未应用该Givens旋转参数组进行完全更新的列的位置;
将上述两个相邻块中的前一块写回到上述主存储器中;以及
从上述主存储器中获取上述行中的下一个相邻块到本地存储区中;
重复上述过程直到该行结束,其中,在对于该行的每一次重复过程中,对于上述多个Givens旋转参数组的每一个,从上一次所记录的两个相邻块中的后一块中未应用该Givens旋转参数组进行完全更新的列的位置处开始对本地存储区中当前的两个相邻块进行Givens旋转计算。
7.根据权利要求6所述的方法,其中对上述两个相邻块中相应位置的元素进行Givens旋转计算的步骤进一步包括:
对于上述多个Givens旋转参数组的每一个:
根据该Givens旋转参数组的相应子矩阵的左右边界位置,确定上述两个相邻块中处于该左右边界位置之间的元素;以及
对于处于上述左右边界位置之间的元素,利用该Givens旋转参数组进行Givens旋转计算。
8.根据权利要求4所述的方法,其中上述预定的块大小是根据上述处理系统中处理器的本地存储区大小而确定的,并且该预定的块大小中的列数是上述指定阈值的整数倍。
9.一种在处理系统中对矩阵进行奇异值分解的装置,包括:
双对角化单元,用于将上述矩阵双对角化,以将该矩阵转换为双对角矩阵,同时得到将要转换为该矩阵的奇异向量矩阵的中间矩阵;以及
奇异值分解单元,用于迭代地找出并转换上述双对角矩阵中、副对角线上的元素不为0的子矩阵,以使该双对角矩阵逐渐收敛为对角矩阵,并将上述中间矩阵转换为上述矩阵的奇异向量矩阵;
该奇异值分解单元进一步包括:
参数累积单元,用于在每一次迭代中,将在上述双对角矩阵的、当前副对角线上的元素不为0的子矩阵的QR迭代过程中所生成的Givens旋转参数组以及上述中间矩阵中要应用该Givens旋转参数组的相应子矩阵的左右边界位置累积在存储器中;以及
Givens旋转模块,用于利用所累积的多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对上述中间矩阵进行Givens旋转;
其中,在所累积的上述多个Givens旋转参数组的个数达到指定阈值时,启用上述Givens旋转模块,该指定阈值是大于等于2的整数。
10.一种在处理系统中对矩阵进行特征值分解的装置,包括:
三对角化单元,用于将上述矩阵三对角化,以将该矩阵转换为三对角矩阵,同时得到将要转换为该矩阵的特征向量矩阵的中间矩阵;以及
特征值分解单元,用于迭代地找出并转换上述三对角矩阵中、两条副对角线上的元素不为0的子矩阵,以使该三对角矩阵逐渐收敛为对角矩阵,并将上述中间矩阵转换为上述矩阵的特征向量矩阵;
该特征值分解单元进一步包括:
参数累积单元,用于在每一次迭代中,将在上述三对角矩阵的、当前两条副对角线上的元素不为0的子矩阵的QR迭代过程中所生成的Givens旋转参数组以及上述中间矩阵中要应用该Givens旋转参数组的相应子矩阵的左右边界位置累积在存储器中;
Givens旋转模块,用于利用所累积的多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对上述中间矩阵进行Givens旋转;
其中,在所累积的上述多个Givens旋转参数组的个数达到指定阈值时,启用上述Givens旋转模块,该指定阈值是大于等于2的整数。
11.根据权利要求9或10所述的装置,其中上述指定阈值是根据上述处理系统中处理器的本地存储区大小而确定的。
12.根据权利要求9或10所述的装置,其中上述Givens旋转模块进一步包括:
并集矩阵确定单元,用于根据上述多个Givens旋转参数组的每一个的相应子矩阵的左右边界位置,在上述中间矩阵中确定包括该多个Givens旋转参数组的每一个的相应子矩阵的并集矩阵;
矩阵划分单元,用于按照预定的块大小,将上述并集矩阵划分为多个块;以及
Givens旋转单元,用于对于上述并集矩阵中按块划分成的每一行,以初始多个相邻块、后续依次用未计算的相邻块替换前面已计算完成的块的方式,使上述处理系统中的处理器依次从该处理系统的主存储器中获取该行中的多个块到其本地存储区中,并利用上述多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对该多个块中相应位置的元素进行Givens旋转计算。
13.根据权利要求12所述的装置,其中上述处理系统是包括至少一个核心处理器以及多个加速器的多处理器系统;其中
上述矩阵划分单元将上述并集矩阵中按块划分成的各行分配给上述多个加速器,其中每一个加速器被分配一行或多行。
14.根据权利要求12所述的装置,其中上述Givens旋转单元进一步包括:
块传输单元,用于为上述处理器实现其本地存储区与该处理系统的主存储器之间的块传输;
Givens旋转计算单元,用于使上述处理器利用上述多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对其本地存储区中的块进行Givens旋转计算;
其中,在上述处理器对于每一行进行Givens旋转计算时:
上述块传输单元使该处理器初始从上述主存储器中、从该行的开始部分取出两个相邻的块到其本地存储区中;
上述Givens旋转计算单元使该处理器利用上述多个Givens旋转参数组的每一个及其相应子矩阵的左右边界位置,对上述两个相邻块中相应位置的元素进行Givens旋转计算,并对于上述多个Givens旋转参数组的每一个记录这两个相邻块中的后一块中未应用该Givens旋转参数组进行完全更新的列的位置;
在上述Givens旋转计算单元完成计算后,上述块传输单元使该处理器将上述两个相邻块中的前一块写回到上述主存储器中,并且从该主存储器中获取上述行中的下一个相邻块到本地存储区中;
上述Givens旋转计算单元对本地存储区中当前的两个相邻块重复上述计算过程,其中,在该重复过程中,使该处理器对于上述多个Givens旋转参数组的每一个,从上一次所记录的两个相邻块中的后一块中未应用该Givens旋转参数组进行完全更新的列的位置处开始对上述当前的两个相邻块进行Givens旋转计算;
上述块传输单元和上述Givens旋转计算单元重复上述过程直到该行结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100916898A CN101561797A (zh) | 2008-04-14 | 2008-04-14 | 在处理系统上对矩阵进行奇异值、特征值分解的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100916898A CN101561797A (zh) | 2008-04-14 | 2008-04-14 | 在处理系统上对矩阵进行奇异值、特征值分解的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101561797A true CN101561797A (zh) | 2009-10-21 |
Family
ID=41220605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008100916898A Pending CN101561797A (zh) | 2008-04-14 | 2008-04-14 | 在处理系统上对矩阵进行奇异值、特征值分解的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101561797A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104809059A (zh) * | 2015-04-01 | 2015-07-29 | 百度在线网络技术(北京)有限公司 | 应用上线指标的检测方法及装置 |
CN105871503A (zh) * | 2015-01-22 | 2016-08-17 | 华邦电子股份有限公司 | 多输入多输出无线通信系统及其通道分解方法 |
WO2017068463A1 (en) * | 2015-10-22 | 2017-04-27 | International Business Machines Corporation | Parallelizing matrix factorization across hardware accelerators |
CN113704691A (zh) * | 2021-08-26 | 2021-11-26 | 中国科学院软件研究所 | 一种申威众核处理器的小规模对称矩阵并行三对角化方法 |
CN113821764A (zh) * | 2021-11-22 | 2021-12-21 | 华控清交信息科技(北京)有限公司 | 一种数据处理方法、装置和用于数据处理的装置 |
CN115952391A (zh) * | 2022-12-12 | 2023-04-11 | 海光信息技术股份有限公司 | 数据处理方法及装置、电子设备与存储介质 |
-
2008
- 2008-04-14 CN CNA2008100916898A patent/CN101561797A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105871503A (zh) * | 2015-01-22 | 2016-08-17 | 华邦电子股份有限公司 | 多输入多输出无线通信系统及其通道分解方法 |
CN105871503B (zh) * | 2015-01-22 | 2019-03-12 | 华邦电子股份有限公司 | 多输入多输出无线通信系统及其通道分解方法 |
CN104809059A (zh) * | 2015-04-01 | 2015-07-29 | 百度在线网络技术(北京)有限公司 | 应用上线指标的检测方法及装置 |
CN104809059B (zh) * | 2015-04-01 | 2018-02-02 | 百度在线网络技术(北京)有限公司 | 应用上线指标的检测方法及装置 |
WO2017068463A1 (en) * | 2015-10-22 | 2017-04-27 | International Business Machines Corporation | Parallelizing matrix factorization across hardware accelerators |
CN113704691A (zh) * | 2021-08-26 | 2021-11-26 | 中国科学院软件研究所 | 一种申威众核处理器的小规模对称矩阵并行三对角化方法 |
CN113704691B (zh) * | 2021-08-26 | 2023-04-25 | 中国科学院软件研究所 | 一种申威众核处理器的小规模对称矩阵并行三对角化方法 |
CN113821764A (zh) * | 2021-11-22 | 2021-12-21 | 华控清交信息科技(北京)有限公司 | 一种数据处理方法、装置和用于数据处理的装置 |
CN115952391A (zh) * | 2022-12-12 | 2023-04-11 | 海光信息技术股份有限公司 | 数据处理方法及装置、电子设备与存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102316670B1 (ko) | 연산 가속기 | |
US8250130B2 (en) | Reducing bandwidth requirements for matrix multiplication | |
US8554820B2 (en) | Optimized corner turns for local storage and bandwidth reduction | |
US7979673B2 (en) | Method and apparatus for matrix decompositions in programmable logic devices | |
CN110415157B (zh) | 一种矩阵乘法的计算方法及装置 | |
CN103970720B (zh) | 基于大规模粗粒度嵌入式可重构系统及其处理方法 | |
CN101561797A (zh) | 在处理系统上对矩阵进行奇异值、特征值分解的方法和装置 | |
CN110162742B (zh) | 实数矩阵求逆的浮点运算电路实现方法 | |
KR101843243B1 (ko) | 제로값을 피연산자로 갖는 연산자에 대한 연산을 스킵하는 연산 방법 및 연산 장치 | |
Sun et al. | An I/O bandwidth-sensitive sparse matrix-vector multiplication engine on FPGAs | |
Ziantz et al. | Run-time optimization of sparse matrix-vector multiplication on SIMD machines | |
CN104615516B (zh) | 面向GPDSP的大规模高性能Linpack测试基准实现的方法 | |
Mohanty et al. | Design and performance analysis of fixed-point jacobi svd algorithm on reconfigurable system | |
Menard et al. | High-level synthesis under fixed-point accuracy constraint | |
CN111859277A (zh) | 一种稀疏矩阵向量乘法向量化实现方法 | |
Benner et al. | Solving linear-quadratic optimal control problems on parallel computers | |
US11886347B2 (en) | Large-scale data processing computer architecture | |
Bosner et al. | Efficient generalized Hessenberg form and applications | |
Petrou et al. | Optimization of a parallel permutation testing function for the SPRINT R package | |
CN113642722A (zh) | 用于卷积计算的芯片及其控制方法、电子装置 | |
Liu et al. | The implementation and optimization of parallel linpack on multi-core vector accelerator | |
Chen et al. | Edge FPGA-based Onsite Neural Network Training | |
US20230267313A1 (en) | Electronic device for performing convolution calculation and operation method therefor | |
Demmel et al. | Implementing communication-optimal parallel and sequential qr factorizations | |
CN112230884B (zh) | 目标检测硬件加速器及加速方法 |
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: 20091021 |
|
C20 | Patent right or utility model deemed to be abandoned or is abandoned |