CN101604306B - 基于fpga的列选主元lu分解方法 - Google Patents
基于fpga的列选主元lu分解方法 Download PDFInfo
- Publication number
- CN101604306B CN101604306B CN2009100435924A CN200910043592A CN101604306B CN 101604306 B CN101604306 B CN 101604306B CN 2009100435924 A CN2009100435924 A CN 2009100435924A CN 200910043592 A CN200910043592 A CN 200910043592A CN 101604306 B CN101604306 B CN 101604306B
- Authority
- CN
- China
- Prior art keywords
- processing unit
- data
- module
- local storage
- result
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Multi Processors (AREA)
- Advance Control (AREA)
Abstract
本发明公开了一种基于FPGA的列选主元LU分解方法,要解决的技术问题是降低LU分解的时间复杂度,加快稠密矩阵线性方程组的求解。技术方案是首先构建基于FPGA的由主处理单元和P个从处理单元组成的主从式并行计算系统,由主从式并行计算系统对待分解矩阵进行列选主元LU分解,主处理单元向第一从处理单元发送参数和待分解矩阵,从处理单元按流水方式对矩阵进行处理,处理结果由第P从处理单元传给主处理单元。采用本发明计算精度与不选主元LU分解相比得到很大提高,且运算速度快,其主从式并行计算系统具有可扩展性。
Description
技术领域
本发明涉及一种矩阵LU(Lower/Upper triangular)分解的方法,具体地说是一种基于FPGA的稠密矩阵(一般为行列相等的方阵)列选主元LU分解方法。
背景技术
求解稠密线性方程组在科学计算和高性能计算领域占有重要的地位,而稠密矩阵LU分解(简称LU分解)是求解稠密线性方程组的重要一步,是影响稠密线性方程组求解性能最关键一步。LU分解的时间复杂度很高,约为(2/3)n3,占线性方程组求解系统绝大部分运行时间。LU分解分为选主元LU分解和不选主元LU分解(选主元LU分解最常见的为列选主元LU分解),其中不选主元LU分解不能保证计算精度和计算正确性,而选主元LU分解却能够克服不选主元LU分解的这些弊病,从而能够得到广泛运用。
给定矩阵A,选主元LU分解表示为PA=LU,其中P为一个置换矩阵,L为一个对角线元素为1的下三角矩阵,U为一个上三角矩阵。L的对角线元素都为1,不需要保存,L的其它元素与U组合在一起形成结果矩阵。采用通用处理器实现列选主元LU分解,由于其运算能力有限,无法取得很高的计算性能,其计算效率(计算功耗比)也相当低。而随着FPGA(现场可编程门阵列)的快速发展,各大公司已经开发出集成大量逻辑单元的高性能、低功耗FPGA芯片。当今FPGA芯片在0.65nm工艺下已经能够实现上千万门级的设计,使FPGA芯片成为实现计算密集型应用的理想的高性能、低功耗计算平台。
然而,国内外从未报道过基于FPGA进行选主元LU分解的方法,仅出现了一些基于FPGA的不选主元的LU分解方法。比如,2003年S.Choi等人提出了基于分块的不选主元LU分解设计,具有低功耗的优点;2004年G.Govindu等人提出了一种基于FPGA的不选主元LU分解的高性能结构,基于一个循环线性阵列来减少计算延迟;2007年T.Hauser等人提出了一种不选主元LU分解的多FPGA计算系统,实现了基于星形拓扑结构的多FPGA平台。不选主元LU分解始终不能 克服其计算精度方面的缺陷,这些基于FPGA的不选主元LU分解在遇到奇异矩阵时往往会导致计算失败。
如何利用FPGA实现选主元LU分解是本领域技术人员关注的重要技术问题。
发明内容
本发明要解决的技术问题是:为避免不选主元LU分解在计算精度方面的缺陷,提出一种基于FPGA的列选主元LU分解方法,降低LU分解的时间复杂度,从而加快稠密矩阵线性方程组的求解。
本发明的技术方案是:
第一步,构建基于FPGA的主从式并行计算系统,主从式并行计算系统由主处理单元和P(P为正整数,P>2)个从处理单元组成。主处理单元与外部存储器、第一从处理单元、第P从处理单元相连,主处理单元由外部存储器控制器、全局状态控制模块、参数发送模块、数据发送模块和数据接收模块组成。外部存储器控制器与外部存储器、数据发送模块、数据接收模块相连,对外部存储器的读写进行控制,将从外部存储器读入的数据送往数据发送模块,将从数据接收模块获得的数据写入外部存储器;全局状态控制模块与数据发送模块、数据接收模块和参数发生模块相连,控制主从式并行计算系统的状态转换;数据发送模块与外部存储器控制器、全局状态控制模块、第一从处理单元相连,在全局状态控制模块的控制下,将从外部存储器控制器传来的数据送到第一从处理单元;参数发送模块与全局状态控制模块、第一从处理单元相连,在全局状态控制模块的控制下,向第一从处理单元发送参数M′,即当前需要处理的矩阵的列数或行数(M′的初始值为矩阵A的行数或列数M,列数=行数);数据接收模块与第P从处理单元、外部存储器控制器相连,从第P从处理单元接收中间结果矩阵和计算结果,并将中间结果矩阵和计算结果发送给外部存储器控制器。
全局状态控制模块由一个状态机和一个比较器组成,状态机通过信号线与比较器相连,由“空闲”、“初始化参数”、“发送参数”、“配置参数”、“发送数据”、“接收中间结果”、“等待运算结束”、“接收运算结果”8个状态组成。状态机在主从式并行计算系统复位之后进入“空闲”状态;当主从式并行计算系统开始运行时,进入“初始化参数”状态,向参数发送模块发参数初始化命令,参数发送 模块置M′=M;然后状态机进入“发送参数”状态,通过参数发送模块对线性计算阵列需要处理的矩阵大小进行配置,即将M′发送给第一从处理单元;参数发送后,状态机进入“发送数据”状态,通知数据发送模块将矩阵发送给线性计算阵列;比较器比较M′和P的大小,如果M′>P,状态机进入“接收中间结果”状态,通知数据接收模块接收中间结果,然后进入“等待运算结束”状态等待线性计算阵列运算结束;如果M′≤P,状态机直接由“发送数据”状态进入“等待运算结束”状态;当运算结束,状态机进入“接收运算结果”状态,通知数据接收模块接收运算结果;数据接收完毕后,如果M′>P,状态机转入“配置参数”状态,向参数发送模块发配置参数命令,参数发送模块置M′=M′-P,然后状态机进入“发送参数”状态;如果M′≤P,转入“空闲”状态,运算结束。
P个从处理单元组成一维线性计算阵列,负责进行列选主元LU分解。每个从处理单元逻辑结构相同,均由参数接收模块、数据通路控制模块、浮点乘加运算模块、浮点除法运算模块、数据选择模块、选主元模块、结果发送模块、4个局部存储器和FIFO组成,局部存储器大小设置为M,FIFO深度大于16,局部存储器和FIFO的位宽与矩阵A的元素一致。
第一从处理单元的参数接收模块与主处理单元的参数发送模块、第二从处理单元的参数接收模块相连,它从主处理单元的参数发送模块接收M′,并发送给第二从处理单元的参数接收模块。第一从处理单元的数据通路控制模块一方面与主处理单元的数据发送模块相连,一方面与第一从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它将从数据发送模块接收的第1列数据送往选主元模块和第一局部存储器,其它奇数列数据送往第三局部存储器,偶数列数据送往第二局部存储器。第二、第三局部存储器具有“接收数据”和“工作”两个状态,只有“接收数据”状态的局部存储器才能接收数据;初始时第二局部存储器为“接收数据”状态,第三局部存储器为“工作”状态;当一个局部存储器处于“工作”时另一个便处于“接收数据”状态,数据接收完毕变为“工作”状态。选主元模块与第一从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块。浮点除法运算模块与第一局部存储器、选主元模块相连,将选 主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置。数据选择模块与第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第一位置的数据,当第二局部存储器处于“工作”状态时,选择第二局部存储器第一位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于“工作”状态时,选择第三局部存储器第一个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第一从处理单元的浮点乘加运算模块与第一从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第一从处理单元的FIFO是一个先入先出缓存器,与第一从处理单元的浮点乘加运算模块和第二从处理单元的数据通路控制模块相连,缓存第一从处理单元的浮点乘加运算模块的运算结果,并将该结果送往第二从处理单元的数据通路控制模块。第一从处理单元的结果发送模块与第一从处理单元的第一局部存储器、第四局部存储器和第二从处理单元的结果发送模块相连,将第一局部存储器和第四局部存储器中的数据送到第二从处理单元的结果发送模块。
第k从处理单元(2≤k≤P-1)的参数接收模块与第k-1从处理单元的参数接收模块和第k+1从处理单元的参数接收模块相连,它从第k-1从处理单元的参数接收模块接收参数M′,并发送给第k+1从处理单元的参数接收模块。第k从处理单元的数据通路控制模块与第k-1从处理单元的FIFO、第k从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第k-1从处理单元的FIFO中的数据,将接收的第1列数据送往第k从处理单元的选主元模块和第一局部存储器,其它奇数列数据送往第k从处理单元的第三局部存储器,偶数列数据送往第k从处理单元的第二局部存储器。第k从处理单元的第二、第三局部存储器具有“接收数据”和“工作”两个状态,只有“接收数据”状态的局部存储器才能接收数据;初始时第二局部存储器为“接收数据”状态,第三局部存储器为“工作”状态;当一个局部存储器处于“工作”时另一个便处于“接收数据”状态,数据接收完毕变为“工作”状态。第k从处理单元的选主元模块与第k从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元 操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块。第k从处理单元的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置。第k从处理单元的数据选择模块与第k从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第k位置的数据,当第二局部存储器处于“工作”状态时,选择第二局部存储器第k位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于“工作”状态时,选择第三局部存储器第k个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第k从处理单元的浮点乘加运算模块与第k从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第k从处理单元的FIFO与第k从处理单元的浮点乘加运算模块和第k+1从处理单元的数据通路控制模块相连,缓存第k从处理单元的浮点乘加运算模块的运算结果,并将结果发送到第k+1从处理单元的数据通路控制模块。第k从处理单元的结果发送模块与第k从处理单元的第一局部存储器、第四局部存储器、第k-1从处理单元的结果发送模块和第k+1从处理单元的结果发送模块相连,一方面将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,一方面将第k从处理单元的第一局部存储器和第四局部存储器中的数据送到第k+1从处理单元的结果发送模块。
第P从处理单元的参数接收模块与第P-1从处理单元的参数接收模块相连,它从第P-1从处理单元的参数接收模块接收参数M′。第P从处理单元的数据通路控制模块与第P-1从处理单元的FIFO、第P从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第P-1从处理单元的FIFO中的数据,将接收的第1列数据送往第P从处理单元的选主元模块和第一局部存储器,其它奇数列数据送往第P从处理单元的第三局部存储器,偶数列数据送往第P从处理单元的第二局部存储器。第P从处理单元的第二、第三局部存储器具有“接收数据”和“工作”两个状态,只有“接收数据”状态的局部存储器才能接收数据;初始时第二局部存储器为“接收数据”状态,第三局 部存储器为“工作”状态;当一个局部存储器处于“工作”时另一个便处于“接收数据”状态,数据接收完毕变为“工作”状态。第P从处理单元的选主元模块与第P从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块。第P从处理单元的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置。第P从处理单元的数据选择模块与第P从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第P位置的数据,当第二局部存储器处于“工作”状态时,选择第二局部存储器第P位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于“工作”状态时,选择第三局部存储器第P个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第P从处理单元的浮点乘加运算模块与第P从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第P从处理单元的FIFO与主处理单元的数据接收模块相连,用于缓存第P从处理单元的浮点乘加运算模块的运算结果,并将结果送往主处理单元的数据接收模块。第P从处理单元的结果发送模块与第P从处理单元的第一局部存储器、第四局部存储器、第P-1从处理单元的结果发送模块和主处理单元的数据接收模块相连,一方面将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,一方面将第P从处理单元的第一局部存储器和第四局部存储器中的数据送到主处理单元的数据接收模块。
第二步,由主从式并行计算系统按以下步骤对矩阵A进行列选主元LU分解:
1.主处理单元的全局状态控制模块根据当前要处理的矩阵大小M初始化参数M′=M。待分解矩阵A′=A。
2.主处理单元的参数发送模块把参数M′发送给第一从处理单元。主处理单元的外部存储器控制器按列从外部存储器中取出待分解的矩阵A′(ai,j,1≤i,j≤M),由数据发送模块发送给第一从处理单元。若M′>P,执行步骤3; 若M′≤P,转步骤4。
3.P个从处理单元按流水方式对矩阵A′进行处理,由主处理单元将中间结果和运算结果存入外部存储器。具体步骤如下:
3.1第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元,第一从处理单元对数据发送模块送来的矩阵A′进行如下操作:
3.1.1第一从处理单元的数据通路控制模块把矩阵A′的第1列数 (ai,1,1≤i≤M′)放置在第一局部存储器,由选主元模块对 进行选主元操作,即找出绝对值最大的数作为该列主元u1,1。若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 (li,1,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
3.1.2第一从处理单元的数据通路控制模块把第2列数 (ai,2,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据 (ai,2,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与a1,2的乘积,结果 (a1 i,2,2≤i≤M′)通过FIFO发送给第二从处理单元。
3.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数 (ai,3,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据 (ai,3,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与a1,3的乘积,结果 (a1 i,3,2≤i≤M′)通过FIFO发送给第二从处理单元。
3.1.4第一从处理单元针对其它列 (ai,j,1≤i ≤M′),其中4≤j≤M′,重复3.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u1,j,其它数据 (ai,j,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与a1,j的乘积,结果 (a1 i,j,2≤i≤M′)通过FIFO发送给第二从处理单元。
3.2第k从处理单元(2≤k≤P-1)的参数接收模块从第k-1从处理单元的参数接收模块接收到参数M′,传递给第k+1从处理单元;当第k-1从处理单元执行到它的数据通路控制模块把第k-2从处理单元(当k=2时,指主处理单元)送来的第3列数放置在第三局部存储器时,第k从处理单元开始对第k-1从处理单元送来的数据进行如下操作:
3.2.1第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第1列数 (ak-1 i,k,k≤i≤M′)放置在第一局部存储器,由选主元模块对 进行选主元操作,找出绝对值最大的数作为该列主元uk,k。若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 (li,k,k+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
3.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数 (ak-1 i,k+1,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为uk,k+1,其它数据 (ak-1 i,k+1,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与ak-1 k,k+1的乘积,结果 (ak i,k+1,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
3.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数 (ak-1 i,k+2,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为uk,k+2,其它数据 (ak-1 i,k+2,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与ak-1 k,k+2的乘积,结果 (ak i,k+2,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
3.2.4第k从处理单元针对其它列 (ak-1 i,j,k≤i≤M′),其中k+3≤j≤M′,重复3.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为uk,j,其它数据 (ak-1 i,j,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与ak-1 k,k+2的乘积,结果 (ak i,j,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
3.3第P从处理单元的参数接收模块从第P-1从处理单元的参数接收模块接收到参数M′;当第P-1从处理单元执行到它的数据通路控制模块把第P-2从处理单元送来的第3列数放置在第三局部存储器中时,第P从处理单元开始对第P-1从处理单元送来的数据进行如下操作:
3.3.1第P从处理单元的数据通路控制模块把第P-1从处理单元送来的第1列数 (aP-1 i,P,P≤i≤M′)放置在第一局部存储器,由选主元模块对 进行选主元操作,找出绝对值最大的数作为该列主元uP,P。若主元不在该列的第P个位置,由选主元模块将主元与该列第P个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 (li,P,P+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
3.3.2第P从处理单元的数据通路控制模块把第P-1从处理单元送来的第2列数 (aP-1 i,P+1,P≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第P位置的数据,第二局部存储器第P位置新的数据送往第四局部存储器 并保存在第P+1个位置,记为uP,P+1,其它数据 (aP-1 i,P+1,P+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与aP-1 P,P+1的乘积,结果 (aP i,P+1,P+1≤i≤M′)通过FIFO发送给主处理单元。
3.3.3第P从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第P-1从处理单元送来的第3列数 (aP-1 i,P+2,P≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第P位置的数据,第三局部存储器第P位置新的数据送往第四局部存储器并保存在第P+2个位置,记为uP,P+2,其它数据 (aP-1 i,P+2,P+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与aP-1 P,P+2的乘积,结果 (aP i,P+2,P+1≤i≤M′)通过FIFO发送给主处理单元。
3.3.4第P从处理单元针对其它列的数 (aP-1 i,j,P≤i≤M′),其中P+3≤j≤M′,重复3.3.3中的操作;对于第j+1-P列,数据选择模块交换局部存储器中的piv值所指位置与第P位置的数据,第P位置新的数据送往第四局部存储器并保存在第j个位置,记为uP,j,其它数据 (aP-1 i,j,P+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与aP-1 P,P+2的乘积,结果 (aP i,j,P+1≤i≤M′)通过FIFO发送给主处理单元。
然后,各个从处理单元的运算结果按如下步骤传递给主处理单元,并由主处理单元的外部存储控制器存储到外部存储器中:
3.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理 单元的第一局部存储器和第四局部存储器中的数据 (li,k,k+1≤i≤M′)、 (uk,j,k≤j≤M′)送到第k+1从处理单元的结果发送模块;
3.4.3第P从处理单元的结果发送模块首先将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,然后将第P从处理单元的第一局部存储器和第四局部存储器中的数据 (li,P,P+1≤i≤M′)、 (uP,j,P≤j≤M′)送到主处理单元的数据接收模块。
3.4.4主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中。
4 M′个从处理单元按流水方式对矩阵A′进行处理,由主处理单元将运算结果存入外部存储器。具体步骤如下:
4.1第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元;第一从处理单元对数据发送模块送来的矩阵A′进行如下操作:
4.1.1第一从处理单元的数据通路控制模块把矩阵A′的第1列数 (ai,1,1≤i≤M′)放置在第一局部存储器,由选主元模块对 进行选主元操作,即找出绝对值最大的数作为该列主元u1,1。若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 (li,1,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
4.1.2第一从处理单元的数据通路控制模块把第2列数 (ai,2,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据 (ai,2,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减 去 与a1,2的乘积,结果 (a1 i,2,2≤i≤M′)通过FIFO发送给第二从处理单元。
4.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数 (ai,3,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据 (ai,3,2≤i≤ M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与a1,3的乘积,结果 (a1 i,3,2≤i≤M′)通过FIFO发送给第二从处理单元。
4.1.4第一从处理单元针对其它列 (ai,j,1≤i≤M′),其中4≤j≤M′,重复4.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u1,j,其它数据 (ai,j,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与a1,j的乘积,结果 (a1 i,j,2≤i≤M′)通过FIFO发送给第二从处理单元。
4.2第k从处理单元(2≤k≤M′-1)的参数接收模块从第k-1从处理单元的参数接收模块接收到参数M′,传递给第k+1从处理单元;当第k-1从处理单元执行到它的数据通路控制模块把第k-2从处理单元(当k=2时,指主处理单元)送来的第3列数放置在第三局部存储器时,第k从处理单元开始对第k-1从处理单元送来的数据进行如下操作:
4.2.1第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第1列数 (ak-1 i,k,k≤i≤M′)放置在第一局部存储器,由选主元模块对 进行选主元操作,找出绝对值最大的数作为该列主元uk,k。若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 (li,k,k+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
4.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数 (ak-1 i,k+1,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为uk,k+1,其它数据 (ak-1 i,k+1,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与ak-1 k,k+1的乘积,结果 (ak i,k+1,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
4.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数 (ak-1 i,k+2,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为uk,k+2,其它数据 (ak-1 i,k+2,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与ak-1 k,k+2的乘积,结果 (ak i,k+2,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
4.2.4第k从处理单元针对其它列 (ak-1 i,j,k≤i≤M′),其中k+3≤j≤M′,重复4.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为uk,j,其它数据 (ak-1 i,j,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 减去 与ak-1 k,k+2的乘积,结果 (ak i,j,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
4.3第M′从处理单元的参数接收模块从第M′-1从处理单元的参数接收模块接收到参数M′;第M′从处理单元将第M′-1从处理单元送来一行一列即aM′-1 M′,M′放置在第一局部存储器,记为uM′,M′。由于矩阵每经过一个从处理单元,规模都会变小,第M′从处理单元已没有结果送出。
4.4线性计算阵列将运算结果传递给主处理单元的数据接收模块,主处理单 元的外部存储控制器将运算结果存储到外部存储器中,最终,运算结果完全存储在外部存储器作为输出,计算结束。具体步骤如下:
4.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据 (li,k,k+1≤i≤M′)、 (uk,j,k≤j≤M′)送到第k+1从处理单元的结果发送模块;
4.4.3第M′从处理单元的结果发送模块首先将第M′-1从处理单元的结果发送模块发送来的数据传递给第M′+1从处理单元的结果发送模块,然后将第M′从处理单元的第一局部存储器的数据uM′,M′送到第M′+1从处理单元的结果发送模块;
4.4.5第h从处理单元(M′+1≤h≤P-1)的结果发送模块将第h-1从处理单元的结果发送模块发送来的数据传递给第h+1从处理单元的结果发送模块;
4.4.6第P从处理单元的结果发送模块将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块;
4.4.7主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中。
采用本发明可以达到以下技术效果:
1.本发明利用基于FPGA的主从式并行计算系统,实现了列选主元LU分解。由于选出的主元作为除数,使计算精度与不选主元LU分解相比得到很大提高。
2.本发明从处理单元采用流水化的并行执行机制,在进行LU分解时,一方面各数据通路控制模块在浮点乘加运算模块进行计算的同时把前一从处理单元送来的数放置在第二或第三局部存储器中,一方面在前一从处理单元执行到第三列数据时,后一从处理单元即开始接收前一单元发送的数据。当从处理器单元个数达到16时,比通用处理器相比执行速度快5倍。从处理器单元个数越多,执行速度比通用处理器越快,在设计主从式并行计算系统时根据要处理的矩阵大小 和FPGA资源约束灵活配置。
3.本发明的主从式并行计算系统采用一维线性阵列的拓扑结构,具有可扩展性,可根据实际FPGA芯片的容量和对计算能力的需求,配置不同的从处理单元个数,并且在保证满足面积和性能需求的同时,能够降低功耗。
附图说明
图1是本发明的总体流程图。
图2是本发明的主从式并行计算系统逻辑结构图。
图3是本发明主处理单元的全局状态控制模块状态转换图。
具体实施方案
图1是本发明的总体流程图。首先构建基于FPGA的主从式并行计算系统,主从式并行计算系统由主处理单元和P个从处理单元组成。然后由主从式并行计算系统按以下步骤对待分解矩阵A(ai,j,1≤i,j≤M,且M是正整数)进行列选主元LU分解:
1.主处理单元的全局状态控制模块根据当前要处理的矩阵大小M初始化参数M′=M。待分解矩阵A′=A。
2.主处理单元的参数发送模块把参数M′发送给第一从处理单元。主处理单元的外部存储器控制器按列从外部存储器中取出待分解的矩阵A′(ai,j,1≤i,j≤M),由数据发送模块发送给第一从处理单元。若M′>P,执行步骤3;否则,转步骤4。
3.首先,由P个从处理单元按流水方式对矩阵A′进行处理:
第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元,……,第k(2≤k≤P-1)从处理单元将参数M′传递给第k+1从处理单元,……,第P从处理单元不再将参数M′进行传递;
第一从处理单元对主处理单元送来的矩阵A′进行选主元、浮点除和浮点乘加等操作,中间结果通过FIFO传递给第二从处理单元,……,第k从处理单元在第k-1从处理单元执行到第k-2从处理单元(当k=2时,指主处理单元)送来的第3列数时开始对第k-1从处理单元送来的数据进行操作,……,第P从处理单元在第P-1从处理单元执行到第P-2从处理单元送来的第3列数时开始对 第P-1从处理单元送来的数据进行操作,中间结果由FIFO发送给主处理单元。
接着,主处理单元的数据接收模块按列接收到第P从处理单元的FIFO发送过来的中间结果 由外部存储控制器存储到外部存储器中。
4.首先,由M′个从处理单元按流水方式对矩阵A′进行处理:
第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元,……,第k从处理单元(2≤k≤M′-1)将参数M′传递给第k从处理单元,……,第M′从处理单元不再将参数M′传递给第M′+1从处理单元;
第一从处理单元对主处理单元送来的矩阵A′进行选主元、浮点除和浮点乘加等操作,中间结果通过FIFO传递给第二从处理单元,……,第k从处理单元在第k-1从处理单元执行到第k-2从处理单元(当k=2时,指主处理单元)送来的第3列数时开始对第k-1从处理单元送来的数据进行操作,……,第M′从处理单元将第M′-1从处理单元送来一行一列数据放置在第一局部存储器,没有中间结果再传递给第M′+1从处理单元或主处理单元。
图2是本发明的主从式并行计算系统逻辑结构图。原始矩阵存储在外部存储器中。主从式并行计算系统由主处理单元和P(P为正整数,P>2)个从处理单元组成。主处理单元与外部存储器、第一从处理单元、第P从处理单元相连,主处理单元由外部存储器控制器、全局状态控制模块、参数发送模块、数据发送模块和数据接收模块组成。外部存储器控制器与外部存储器、数据发送模块、数据接收模块相连,对外部存储器的读写进行控制,将从外部存储器读入的数据送往数据发送模块,将从数据接收模块获得的数据写入外部存储器;全局状态控制 模块与数据发送模块、数据接收模块和参数发生模块相连,控制主从式并行计算系统的状态转换;数据发送模块与外部存储器控制器、全局状态控制模块、第一从处理单元相连,在全局状态控制模块的控制下,将从外部存储器控制器传来的数据送到第一从处理单元;参数发送模块与全局状态控制模块、第一从处理单元相连,在全局状态控制模块的控制下,向第一从处理单元发送参数M′,即当前需要处理的矩阵的列数或行数(M′的初始值为矩阵A的行数或列数M,列数=行数);数据接收模块与第P从处理单元、外部存储器控制器相连,从第P从处理单元接收中间结果矩阵和计算结果,并将中间结果矩阵和计算结果发送给外部存储器控制器。
P个从处理单元组成一维线性计算阵列,负责进行列选主元LU分解。每个从处理单元逻辑结构相同,均由参数接收模块、数据通路控制模块、浮点乘加运算模块、浮点除法运算模块、数据选择模块、选主元模块、结果发送模块、4个局部存储器和FIFO组成,局部存储器大小设置为M,FIFO深度大于16,局部存储器和FIFO的位宽与矩阵A的元素一致。
第一从处理单元的参数接收模块与主处理单元的参数发送模块、第二从处理单元的参数接收模块相连,它从主处理单元的参数发送模块接收M′,并发送给第二从处理单元的参数接收模块。第一从处理单元的数据通路控制模块一方面与主处理单元的数据发送模块相连,一方面与第一从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它将从数据发送模块接收的第1列数据送往选主元模块和第一局部存储器,其它奇数列数据送往第三局部存储器,偶数列数据送往第二局部存储器。第二、第三局部存储器具有“接收数据”和“工作”两个状态,只有“接收数据”状态的局部存储器才能接收数据;初始时第二局部存储器为“接收数据”状态,第三局部存储器为“工作”状态;当一个局部存储器处于“工作”时另一个便处于“接收数据”状态,数据接收完毕变为“工作”状态。选主元模块与第一从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块。浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第 一局部存储器的原来位置。数据选择模块与第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第一位置的数据,当第二局部存储器处于“工作”状态时,选择第二局部存储器第一位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于“工作”状态时,选择第三局部存储器第一个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第一从处理单元的浮点乘加运算模块与第一从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第一从处理单元的FIFO是一个先入先出缓存器,与第一从处理单元的浮点乘加运算模块和第二从处理单元的数据通路控制模块相连,缓存第一从处理单元的浮点乘加运算模块的运算结果,并将该结果送往第二从处理单元的数据通路控制模块。第一从处理单元的结果发送模块与第一从处理单元的第一局部存储器、第四局部存储器和第二从处理单元的结果发送模块相连,将第一局部存储器和第四局部存储器中的数据送到第二从处理单元的结果发送模块。
第k从处理单元(2≤k≤P-1)的参数接收模块与第k-1从处理单元的参数接收模块和第k+1从处理单元的参数接收模块相连,它从第k-1从处理单元的参数接收模块接收参数M′,并发送给第k+1从处理单元的参数接收模块。第k从处理单元的数据通路控制模块与第k-1从处理单元的FIFO、第k从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第k-1从处理单元的FIFO中的数据,将接收的第1列数据送往第k从处理单元的选主元模块和第一局部存储器,其它奇数列数据送往第k从处理单元的第三局部存储器,偶数列数据送往第k从处理单元的第二局部存储器。第k从处理单元的第二、第三局部存储器具有“接收数据”和“工作”两个状态,只有“接收数据”状态的局部存储器才能接收数据;初始时第二局部存储器为“接收数据”状态,第三局部存储器为“工作”状态;当一个局部存储器处于“工作”时另一个便处于“接收数据”状态,数据接收完毕变为“工作”状态。第k从处理单元的选主元模块与第k从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块, 同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块。第k从处理单元的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置。第k从处理单元的数据选择模块与第k从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第k位置的数据,当第二局部存储器处于“工作”状态时,选择第二局部存储器第k位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于“工作”状态时,选择第三局部存储器第k个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第k从处理单元的浮点乘加运算模块与第k从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第k从处理单元的FIFO与第k从处理单元的浮点乘加运算模块和第k+1从处理单元的数据通路控制模块相连,缓存第k从处理单元的浮点乘加运算模块的运算结果,并将结果发送到第k+1从处理单元的数据通路控制模块。第k从处理单元的结果发送模块与第k从处理单元的第一局部存储器、第四局部存储器、第k-1从处理单元的结果发送模块和第k+1从处理单元的结果发送模块相连,一方面将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,一方面将第k从处理单元的第一局部存储器和第四局部存储器中的数据送到第k+1从处理单元的结果发送模块。
第P从处理单元的参数接收模块与第P-1从处理单元的参数接收模块相连,它从第P-1从处理单元的参数接收模块接收参数M′。第P从处理单元的数据通路控制模块与第P-1从处理单元的FIFO、第P从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第P-1从处理单元的FIFO中的数据,将接收的第1列数据送往第P从处理单元的选主元模块和第一局部存储器,其它奇数列数据送往第P从处理单元的第三局部存储器,偶数列数据送往第P从处理单元的第二局部存储器。第P从处理单元的第二、第三局部存储器具有“接收数据”和“工作”两个状态,只有“接收数据”状态的局部存储器才能接收数据;初始时第二局部存储器为“接收数据”状态,第三局部存储器为“工作”状态;当一个局部存储器处于“工作”时另一个便处于“接 收数据”状态,数据接收完毕变为“工作”状态。第P从处理单元的选主元模块与第P从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块。第P从处理单元的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置。第P从处理单元的数据选择模块与第P从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第P位置的数据,当第二局部存储器处于“工作”状态时,选择第二局部存储器第P位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于“工作”状态时,选择第三局部存储器第P个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第P从处理单元的浮点乘加运算模块与第P从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第P从处理单元的FIFO与主处理单元的数据接收模块相连,用于缓存第P从处理单元的浮点乘加运算模块的运算结果,并将结果送往主处理单元的数据接收模块。第P从处理单元的结果发送模块与第P从处理单元的第一局部存储器、第四局部存储器、第P-1从处理单元的结果发送模块和主处理单元的数据接收模块相连,一方面将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,一方面将第P从处理单元的第一局部存储器和第四局部存储器中的数据送到主处理单元的数据接收模块。
图3是本发明主处理单元的全局状态控制模块状态转换图。全局状态控制模块由一个状态机和一个比较器组成,状态机通过信号线与比较器相连,由“空闲”、“初始化参数”、“发送参数”、“配置参数”、“发送数据”、“接收中间结果”、“等待运算结束”、“接收运算结果”8个状态组成。状态机在主从式并行计算系统复位之后进入“空闲”状态;当主从式并行计算系统开始运行时,进入“初始化参数”状态,向参数发送模块发参数初始化命令,参数发送模块置M′=M;然后状态机进入“发送参数”状态,通过参数发送模块对线性计算阵列需要处理的矩 阵大小进行配置,即将M′发送给第一从处理单元;参数发送后,状态机进入“发送数据”状态,通知数据发送模块将矩阵发送给线性计算阵列;比较器比较M′和P的大小,如果M′>P,状态机进入“接收中间结果”状态,通知数据接收模块接收中间结果,然后进入“等待运算结束”状态等待线性计算阵列运算结束;如果M′≤P,状态机直接由“发送数据”状态进入“等待运算结束”状态;当运算结束,状态机进入“接收运算结果”状态,通知数据接收模块接收运算结果;数据接收完毕后,如果M′>P,状态机转入“配置参数”状态,向参数发送模块发配置参数命令,参数发送模块置M′=M′-P,然后状态机进入“发送参数”状态;如果M′≤P,转入“空闲”状态,运算结束。
Claims (4)
1.一种基于FPGA的列选主元LU分解方法,其特征在于包括以下步骤:
第一步,构建基于FPGA的主从式并行计算系统,主从式并行计算系统由主处理单元和P个从处理单元组成,P为正整数且P>2;主处理单元与外部存储器、第一从处理单元、第P从处理单元相连,主处理单元由外部存储器控制器、全局状态控制模块、参数发送模块、数据发送模块和数据接收模块组成;外部存储器控制器与外部存储器、数据发送模块、数据接收模块相连,对外部存储器的读写进行控制,将从外部存储器读入的数据送往数据发送模块,将从数据接收模块获得的数据写入外部存储器;全局状态控制模块与数据发送模块、数据接收模块和参数发送模块相连,控制主从式并行计算系统的状态转换;数据发送模块与外部存储器控制器、全局状态控制模块、第一从处理单元相连,在全局状态控制模块的控制下,将从外部存储器控制器传来的数据送到第一从处理单元;参数发送模块与全局状态控制模块、第一从处理单元相连,在全局状态控制模块的控制下,向第一从处理单元发送参数M′即当前需要处理的矩阵的列数或行数;数据接收模块与第P从处理单元、外部存储器控制器相连,从第P从处理单元接收中间结果矩阵和计算结果,并将中间结果矩阵和计算结果发送给外部存储器控制器;
P个从处理单元组成一维线性计算阵列,负责进行列选主元LU分解,每个从处理单元逻辑结构相同,均由参数接收模块、数据通路控制模块、浮点乘加运算模块、浮点除法运算模块、数据选择模块、选主元模块、结果发送模块、4个局部存储器和FIFO组成;4个局部存储器中的第二、第三局部存储器具有“接收数据”和“工作”两个状态,只有“接收数据”状态的局部存储器才能接收数据;初始时第二局部存储器为“接收数据”状态,第三局部存储器为“工作”状态;当一个局部存储器处于“工作”时另一个便处于“接收数据”状态,数据接收完毕变为“工作”状态;
第二步,由主从式并行计算系统按以下步骤对矩阵A进行列选主元LU分解:
1.主处理单元的全局状态控制模块根据当前要处理的矩阵大小M初始化参数M′=M,M为矩阵A的行数或列数,列数=行数,待分解矩阵A′=A;
2.主处理单元的参数发送模块把参数M′发送给第一从处理单元,主处理单元的外部存储器控制器按列从外部存储器中取出待分解的矩阵A′(ai,j,1≤i,j≤M),由数据发送模块发送给第一从处理单元;若M′>P,执行步骤3;若M′≤P,转步骤4;
3.P个从处理单元按流水方式对矩阵A′进行处理,由主处理单元将中间结果和运算结果存入外部存储器,具体步骤如下:
3.1第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元,第一从处理单元对数据发送模块送来的矩阵A′进行如下操作;
3.1.1第一从处理单元的数据通路控制模块把矩阵A′的第1列数 放置在第一局部存储器,由选主元模块对 进行选主元操作,即找出绝对值最大的数作为该列主元u1,1,若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在寄存器piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 放置在该列所有的数在第一局部存储器的原来位置;
3.1.2第一从处理单元的数据通路控制模块把第2列数 放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与a1,2的乘积,结果 (a1 i,2,2≤i≤M′)通过FIFO发送给第二从处理单元;
3.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数 放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与a1,3的乘积,结果 通过FIFO发送给第二从处理单元;
3.1.4第一从处理单元针对其它列 其中4≤j≤M′,重复3.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u1,j,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与a1,j的乘积,结果 通过FIFO发送给第二从处理单元;
3.2第k从处理单元的参数接收模块从第k-1从处理单元的参数接收模块接收到参数M′,传递给第k+1从处理单元,2≤k≤P-1;当第k-1从处理单元执行到它的数据通路控制模块把第k-2从处理单元送来的第3列数放置在第三局部存储器时,当k=2时,第k-2从处理单元指主处理单元,第k从处理单元开始对第k-1从处理单元送来的数据进行如下操作:
3.2.1第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第1列数 (ak-1 i,k,k≤i≤M′)放置在第一局部存储器,由选主元模块对 进行选主元操作,找出绝对值最大的数作为该列主元uk,k;若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 (li,k,k+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;
3.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数 (ak-1 i,k+1,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为uk,k+1,其它数据 (ak-1 i,k+1,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 减去 与ak-1 k,k+1的乘积,结果 (ak i,k+1,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;
3.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数 (ak-1 i,k+2,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为uk,k+2,其它数据 (ak-1 i,k+2,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 减去 与ak-1 k,k+2的乘积,结果 (ak i,k+2,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;
3.2.4第k从处理单元针对其它列 (ak-1 i,j,k≤i≤M′),其中k+3≤j≤M′,重复3.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为 uk,j,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与ak-1 k,k+2的乘积,结果 通过FIFO发送给第k+1从处理单元;
3.3第P从处理单元的参数接收模块从第P-1从处理单元的参数接收模块接收到参数M′;当第P-1从处理单元执行到它的数据通路控制模块把第P-2从处理单元送来的第3列数放置在第三局部存储器中时,第P从处理单元开始对第P-1从处理单元送来的数据进行如下操作:
3.3.1第P从处理单元的数据通路控制模块把第P-1从处理单元送来的第1列数 放置在第一局部存储器,由选主元模块对 进行选主元操作,找出绝对值最大的数作为该列主元uP,P;若主元不在该列的第P个位置,由选主元模块将主元与该列第P个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 放置在该列所有的数在第一局部存储器的原来位置;
3.3.2第P从处理单元的数据通路控制模块把第P-1从处理单元送来的第2列数 放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第P位置的数据,第二局部存储器第P位置新的数据送往第四局部存储器并保存在第P+1个位置,记为uP,P+1,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与aP-1 P,P+1的乘积,结果 通过FIFO发送给主处理单元;
3.3.3第P从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第P-1从处理单元送来的第3列数 放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第P位置的数据,第三局部存储器第P位置新的数据送往第四局部存储器并保存在第P+2个位置,记为uP,P+2,其它数据 (aP-1 i,P+2,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 减去 与aP-1 P,P+2的乘积,结果 通过FIFO发送给主处理单元;
3.3.4第P从处理单元针对其它列的数 其中P+3≤j≤M′,重复3.3.3中的操作;对于第j+1-P列,数据选择模块交换局部存储器中的piv值所指位置与第P位置的数据,第P位置新的数据送往第四局部存储器并保存在第j个位置,记为uP,j,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与aP-1 P,P+2的乘积,结果 通过FIFO发送给主处理单元;
3.4主处理单元的数据接收模块按列接收第P从处理单元的FIFO发送过来的中间结果 由外部存储控制器存储到外部存储器中,然后,各个从处理单元的运算结果按如下步骤传递给主处理单元,并由主处理单元的外部存储控制器存储到外部存储器中:
3.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据 送到第k+1从处理单元的结果发送模块;
3.4.3第P从处理单元的结果发送模块首先将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,然后将第P从处理单元的第一局部存储器和第四局部存储器中的数据 送到主处理单元的数据接收模块;
3.4.4主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中;
4M′个从处理单元按流水方式对矩阵A′进行处理,由主处理单元将运算结果存入外部存储器,具体步骤如下:
4.1第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从 处理单元,第一从处理单元对数据发送模块送来的矩阵A′进行如下操作:
4.1.1第一从处理单元的数据通路控制模块把矩阵A′的第1列数 放置在第一局部存储器,由选主元模块对 进行选主元操作,即找出绝对值最大的数作为该列主元u1,1;若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 放置在该列所有的数在第一局部存储器的原来位置;
4.1.2第一从处理单元的数据通路控制模块把第2列数 放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与a1,2的乘积,结果 (a1 i,2,2≤i≤M′)通过FIFO发送给第二从处理单元;
4.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数 放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与a1,3的乘积,结果 通过FIFO发送给第二从处理单元;
4.1.4第一从处理单元针对其它列 (ai,j,1≤i≤M′),其中4≤j≤M′,重复4.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u1,j,其它数据 (ai,j,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 减去 与a1,j的乘积,结果 (a1 i,j,2≤i≤M′)通过FIFO发送给第二从处理单元;
4.2第k从处理单元(2≤k≤M′-1)的参数接收模块从第k-1从处理单元的参数接收 模块接收到参数M′,传递给第k+1从处理单元;当第k-1从处理单元执行到它的数据通路控制模块把第k-2从处理单元送来的第3列数放置在第三局部存储器时,当k=2时,第k-2从处理单元指主处理单元,第k从处理单元开始对第k-1从处理单元送来的数据进行如下操作:
4.2.1第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第1列数 放置在第一局部存储器,由选主元模块对 进行选主元操作,找出绝对值最大的数作为该列主元uk,k;若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 放置在该列所有的数在第一局部存储器的原来位置;
4.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数 放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为uk,k+1,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与ak-1 k,k+1的乘积,结果 通过FIFO发送给第k+1从处理单元;
4.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数 放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为uk,k+2,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与ak-1 k,k+2的乘积,结果 通过FIFO发送给第k+1从处理单元;
4.2.4第k从处理单元针对其它列 其中k+3≤j≤M′,重复4.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为 uk,j,其它数据 送往浮点乘加运算模块;浮点乘加运算模块将 减去 与ak-1 k,k+2的乘积,结果 通过FIFO发送给第k+1从处理单元;
4.3第M′从处理单元的参数接收模块从第M′-1从处理单元的参数接收模块接收到参数M′;第M′从处理单元将第M′-1从处理单元送来一行一列即aM′-1 M′,M′放置在第一局部存储器,记为uM′,M′;
4.4线性计算阵列将运算结果传递给主处理单元的数据接收模块,主处理单元的外部存储控制器将运算结果存储到外部存储器中,最终,运算结果完全存储在外部存储器作为输出,计算结束,具体步骤如下:
4.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据 送到第k+1从处理单元的结果发送模块;
4.4.3第M′从处理单元的结果发送模块首先将第M′-1从处理单元的结果发送模块发送来的数据传递给第M′+1从处理单元的结果发送模块,然后将第M′从处理单元的第一局部存储器的数据uM′M′送到第M′+1从处理单元的结果发送模块;
4.4.5第h从处理单元(M′+1≤h≤P-1)的结果发送模块将第h-1从处理单元的结果发送模块发送来的数据传递给第h+1从处理单元的结果发送模块;
4.4.6第P从处理单元的结果发送模块将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块;
4.4.7主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中。
2.如权利要求1所述的基于FPGA的列选主元LU分解方法,其特征在于所述全局状态控制模块由一个状态机和一个比较器组成,状态机通过信号线与比较器相连,状态机由“空闲”、“初始化参数”、“发送参数”、“配置参数”、“发送数据”、“接收中间结果”、“等待运算结束”、“接收运算结果”8个状态组成;状态机在主从式并行计算系统复 位之后进入“空闲”状态;当主从式并行计算系统开始运行时,进入“初始化参数”状态,向参数发送模块发参数初始化命令,参数发送模块置M′=M;然后状态机进入“发送参数”状态,通过参数发送模块对线性计算阵列需要处理的矩阵大小进行配置,即将M′发送给第一从处理单元;参数发送后,状态机进入“发送数据”状态,通知数据发送模块将矩阵发送给线性计算阵列;比较器比较M′和P的大小,如果M′>P,状态机进入“接收中间结果”状态,通知数据接收模块接收中间结果,然后进入“等待运算结束”状态等待线性计算阵列运算结束;如果M′≤P,状态机直接由“发送数据”状态进入“等待运算结束”状态;当运算结束,状态机进入“接收运算结果”状态,通知数据接收模块接收运算结果;数据接收完毕后,如果M′>P,状态机转入“配置参数”状态,向参数发送模块发配置参数命令,参数发送模块置M′=M′-P,然后状态机进入“发送参数”状态;如果M′≤P,转入“空闲”状态,运算结束。
3.如权利要求1所述的基于FPGA的列选主元LU分解方法,其特征在于所述所有从处理单元的4个局部存储器大小设置为M,FIFO深度大于16,局部存储器和FIFO的位宽与矩阵A的元素一致。
4.如权利要求1所述的基于FPGA的列选主元LU分解方法,其特征在于所述第一从处理单元的参数接收模块与主处理单元的参数发送模块、第二从处理单元的参数接收模块相连,它从主处理单元的参数发送模块接收M′,并发送给第二从处理单元的参数接收模块;第一从处理单元的数据通路控制模块一方面与主处理单元的数据发送模块相连,一方面与第一从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它将从数据发送模块接收的第1列数据送往选主元模块和第一局部存储器,其它奇数列数据送往第三局部存储器,偶数列数据送往第二局部存储器;选主元模块与第一从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块;浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置;数据选择模块与第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第 一位置的数据,当第二局部存储器处于“工作”状态时,选择第二局部存储器第一位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于“工作”状态时,选择第三局部存储器第一个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块;第一从处理单元的浮点乘加运算模块与第一从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存;第一从处理单元的FIFO是一个先入先出缓存器,与第一从处理单元的浮点乘加运算模块和第二从处理单元的数据通路控制模块相连,缓存第一从处理单元的浮点乘加运算模块的运算结果,并将该结果送往第二从处理单元的数据通路控制模块;第一从处理单元的结果发送模块与第一从处理单元的第一局部存储器、第四局部存储器和第二从处理单元的结果发送模块相连,将第一局部存储器和第四局部存储器中的数据送到第二从处理单元的结果发送模块;第k从处理单元的参数接收模块与第k-1从处理单元的参数接收模块和第k+1从处理单元的参数接收模块相连,2≤k≤P-1,它从第k-1从处理单元的参数接收模块接收参数M′,并发送给第k+1从处理单元的参数接收模块;第k从处理单元的数据通路控制模块与第k-1从处理单元的FIFO、第k从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第k-1从处理单元的FIFO中的数据,将接收的第1列数据送往第k从处理单元的选主元模块和第一局部存储器,其它奇数列数据送往第k从处理单元的第三局部存储器,偶数列数据送往第k从处理单元的第二局部存储器;第k从处理单元的选主元模块与第k从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块;第k从处理单元的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置;第k从处理单元的数据选择模块与第k从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第k位置的数据,当第二局部存储器处于“工作”状态时,选择第二局部存储器第k位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于“工作”状态时,选择第三局部存储器第k个位置的 数据送往第四局部存储器,其它数据送往浮点乘加运算模块;第k从处理单元的浮点乘加运算模块与第k从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存;第k从处理单元的FIFO与第k从处理单元的浮点乘加运算模块和第k+1从处理单元的数据通路控制模块相连,缓存第k从处理单元的浮点乘加运算模块的运算结果,并将结果发送到第k+1从处理单元的数据通路控制模块;第k从处理单元的结果发送模块与第k从处理单元的第一局部存储器、第四局部存储器、第k-1从处理单元的结果发送模块和第k+1从处理单元的结果发送模块相连,一方面将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,一方面将第k从处理单元的第一局部存储器和第四局部存储器中的数据送到第k+1从处理单元的结果发送模块;第P从处理单元的参数接收模块与第P-1从处理单元的参数接收模块相连,它从第P-1从处理单元的参数接收模块接收参数M′;第P从处理单元的数据通路控制模块与第P-1从处理单元的FIFO、第P从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第P-1从处理单元的FIFO中的数据,将接收的第1列数据送往第P从处理单元的选主元模块和第一局部存储器,其它奇数列数据送往第P从处理单元的第三局部存储器,偶数列数据送往第P从处理单元的第二局部存储器;第P从处理单元的选主元模块与第P从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块;第P从处理单元的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置;第P从处理单元的数据选择模块与第P从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第P位置的数据,当第二局部存储器处于“工作”状态时,选择第二局部存储器第P位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于“工作”状态时,选择第三局部存储器第P个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块;第P从处理单元的浮点乘加运算模块与第P从处理单元的数据选择模块、第一局部存储器和FIFO相连,对 数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存;第P从处理单元的FIFO与主处理单元的数据接收模块相连,用于缓存第P从处理单元的浮点乘加运算模块的运算结果,并将结果送往主处理单元的数据接收模块;第P从处理单元的结果发送模块与第P从处理单元的第一局部存储器、第四局部存储器、第P-1从处理单元的结果发送模块和主处理单元的数据接收模块相连,一方面将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,一方面将第P从处理单元的第一局部存储器和第四局部存储器中的数据送到主处理单元的数据接收模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100435924A CN101604306B (zh) | 2009-06-03 | 2009-06-03 | 基于fpga的列选主元lu分解方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100435924A CN101604306B (zh) | 2009-06-03 | 2009-06-03 | 基于fpga的列选主元lu分解方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101604306A CN101604306A (zh) | 2009-12-16 |
CN101604306B true CN101604306B (zh) | 2011-01-19 |
Family
ID=41470041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100435924A Expired - Fee Related CN101604306B (zh) | 2009-06-03 | 2009-06-03 | 基于fpga的列选主元lu分解方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101604306B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770585B (zh) * | 2010-01-07 | 2011-09-28 | 浙江大学 | 基于FPGA的矩阵数据按bit旋转的装置及方法 |
CN102486727B (zh) * | 2010-12-03 | 2014-10-22 | 同济大学 | 基于线程构造块的超大规模矩阵多核并行克劳特分解方法 |
CN102117264B (zh) * | 2010-12-29 | 2014-02-12 | 中国船舶重工集团公司第七一五研究所 | 基于fpga的快速沃尔什变换的实现方法 |
CN104636315B (zh) * | 2015-02-06 | 2017-12-22 | 中国人民解放军国防科学技术大学 | 面向gpdsp的矩阵lu分解向量化计算的方法 |
CN105373517A (zh) * | 2015-11-09 | 2016-03-02 | 南京大学 | 基于Spark的分布式稠密矩阵求逆并行化运算方法 |
CN105577232B (zh) * | 2015-12-22 | 2018-12-25 | 中国船舶重工集团公司第七一五研究所 | 基于fpga的复合序列fwt快速相关检测方法 |
CN105426345A (zh) * | 2015-12-25 | 2016-03-23 | 南京大学 | 一种矩阵求逆运算方法 |
CN108763653B (zh) * | 2018-04-30 | 2022-04-22 | 南京大学 | 基于fpga的可重构线性方程组求解加速器 |
CN111222092B (zh) * | 2018-11-26 | 2023-06-13 | 北京华航无线电测量研究所 | 一种基于fpga的矩阵特征分解方法 |
-
2009
- 2009-06-03 CN CN2009100435924A patent/CN101604306B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101604306A (zh) | 2009-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101604306B (zh) | 基于fpga的列选主元lu分解方法 | |
CN111291859B (zh) | 通用矩阵-矩阵乘法数据流加速器半导体电路 | |
CN108171317A (zh) | 一种基于soc的数据复用卷积神经网络加速器 | |
CN104572011B (zh) | 基于fpga的通用矩阵定点乘法器及其计算方法 | |
CN104899182B (zh) | 一种支持可变分块的矩阵乘加速方法 | |
CN107301455B (zh) | 用于卷积神经网络的混合立方体存储系统及加速计算方法 | |
CN100449522C (zh) | 基于多fpga的矩阵乘法并行计算系统 | |
US8478964B2 (en) | Stall propagation in a processing system with interspersed processors and communicaton elements | |
CN107807819A (zh) | 一种支持离散数据表示的用于执行人工神经网络正向运算的装置及方法 | |
CN107689948A (zh) | 应用于神经网络硬件加速系统的高效数据访存管理装置 | |
CN108537331A (zh) | 一种基于异步逻辑的可重构卷积神经网络加速电路 | |
CN110210615B (zh) | 一种用于执行神经网络计算的脉动阵列系统 | |
CN108733348A (zh) | 融合向量乘法器和使用其进行运算的方法 | |
CN101533387A (zh) | 基于fpga的边角块稀疏矩阵并行lu分解器 | |
EP4318275A1 (en) | Matrix multiplier and method for controlling matrix multiplier | |
CN102214158B (zh) | 一种全互联路由结构动态可重构处理器 | |
CN109952559A (zh) | 具有单独可选元素及成组复制的流式传输引擎 | |
CN102402415B (zh) | 一种动态可重构阵列内数据缓存的装置及方法 | |
CN102508803A (zh) | 一种矩阵转置存储控制器 | |
CN109670581B (zh) | 一种计算装置及板卡 | |
CN109472734A (zh) | 一种基于fpga的目标检测网络及其实现方法 | |
CN114385972A (zh) | 一种直接求解结构化三角稀疏线性方程组的并行计算方法 | |
CN117234720A (zh) | 动态可配置的存算融合数据缓存结构、处理器及电子设备 | |
CN115907005B (zh) | 一种基于片上网络的大规模全连接伊辛模型退火处理电路 | |
US20230161480A1 (en) | Reconfigurable on-chip memory bank, reconfigurable on-chip memory, system-on-chip having same mounted thereon, and method for using reconfigurable on-chip memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110119 Termination date: 20120603 |