CN101604306A - 基于fpga的列选主元lu分解方法 - Google Patents

基于fpga的列选主元lu分解方法 Download PDF

Info

Publication number
CN101604306A
CN101604306A CNA2009100435924A CN200910043592A CN101604306A CN 101604306 A CN101604306 A CN 101604306A CN A2009100435924 A CNA2009100435924 A CN A2009100435924A CN 200910043592 A CN200910043592 A CN 200910043592A CN 101604306 A CN101604306 A CN 101604306A
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.)
Granted
Application number
CNA2009100435924A
Other languages
English (en)
Other versions
CN101604306B (zh
Inventor
邬贵明
窦勇
夏飞
姜晶菲
周杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN2009100435924A priority Critical patent/CN101604306B/zh
Publication of CN101604306A publication Critical patent/CN101604306A/zh
Application granted granted Critical
Publication of CN101604306B publication Critical patent/CN101604306B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)
  • Advance Control (AREA)

Abstract

本发明公开了一种基于FPGA的列选主元LU分解方法,要解决的技术问题是降低LU分解的时间复杂度,加快稠密矩阵线性方程组的求解。技术方案是首先构建基于FPGA的由主处理单元和P个从处理单元组成的主从式并行计算系统,由主从式并行计算系统对待分解矩阵进行列选主元LU分解,主处理单元向第一从处理单元发送参数和待分解矩阵,从处理单元按流水方式对矩阵进行处理,处理结果由第P从处理单元传给主处理单元。采用本发明计算精度与不选主元LU分解相比得到很大提高,且运算速度快,其主从式并行计算系统具有可扩展性。

Description

基于FPGA的列选主元LU分解方法
技术领域
本发明涉及一种矩阵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列数
Figure G2009100435924D00071
(ai,1,1≤i≤M′)放置在第一局部存储器,由选主元模块对
Figure G2009100435924D00072
进行选主元操作,即找出绝对值最大的数作为该列主元u1,1。若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果
Figure G2009100435924D00073
(li,1,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
3.1.2第一从处理单元的数据通路控制模块把第2列数
Figure G2009100435924D00074
(ai,2,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据
Figure G2009100435924D00075
(ai,2,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D00076
减去与a1,2的乘积,结果
Figure G2009100435924D00078
(a1 i,2,2≤i≤M′)通过FIFO发送给第二从处理单元。
3.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数
Figure G2009100435924D00079
(ai,3,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据
Figure G2009100435924D000710
(ai,3,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D000711
减去
Figure G2009100435924D000712
与a1,3的乘积,结果
Figure G2009100435924D000713
(a1 i,3,2≤i≤M′)通过FIFO发送给第二从处理单元。
3.1.4第一从处理单元针对其它列
Figure G2009100435924D00081
(ai,j,1≤i≤M′),其中4≤j≤M′,重复3.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u1,j,其它数据
Figure G2009100435924D00082
(ai,j,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D00083
减去
Figure G2009100435924D00084
与a1,j的乘积,结果
Figure G2009100435924D00085
(a1 i,j,2≤i≤M′)通过FIFO发送给第二从处理单元。
3.2第k从处理单元的参数接收模块从第k-1从处理单元的参数接收模块接收到参数M′,传递给第k+1从处理单元;当第k-1从处理单元执行到它的数据通路控制模块把第k-2从处理单元(当k=2时,指主处理单元)送来的第3列数放置在第三局部存储器时,第k从处理单元开始对第k-1从处理单元送来的数据进行如下操作:
3.2.1第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第1列数
Figure G2009100435924D00086
(ak-1 i,k,k≤i≤M′)放置在第一局部存储器,由选主元模块对
Figure G2009100435924D00087
进行选主元操作,找出绝对值最大的数作为该列主元uk,k。若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果(li,k,k+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
3.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数
Figure G2009100435924D00089
(ak-1 i,k+1,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为uk,k+1,其它数据
Figure G2009100435924D000810
(ak-1 i,k+1,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D000811
减去
Figure G2009100435924D000812
与ak-1 k,k+1的乘积,结果
Figure G2009100435924D000813
(ak i,k+1,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
3.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数
Figure G2009100435924D000814
(ak-1 i,k+2,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为uk,k+2,其它数据
Figure G2009100435924D00091
(ak-1 i,k+2,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D00092
减去
Figure G2009100435924D00093
与ak-1 k,k+2的乘积,结果
Figure G2009100435924D00094
(ak i,k+2,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
3.2.4第k从处理单元针对其它列
Figure G2009100435924D00095
(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′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D00097
减去
Figure G2009100435924D00098
与ak-1 k,k+2的乘积,结果
Figure G2009100435924D00099
(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列数
Figure G2009100435924D000910
(aP-1 i,P,P≤i≤M′)放置在第一局部存储器,由选主元模块对
Figure G2009100435924D000911
进行选主元操作,找出绝对值最大的数作为该列主元uP,P。若主元不在该列的第P个位置,由选主元模块将主元与该列第P个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果
Figure G2009100435924D000912
(li,P,P+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
3.3.2第P从处理单元的数据通路控制模块把第P-1从处理单元送来的第2列数
Figure G2009100435924D000913
(aP-1 i,P+1,P≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第P位置的数据,第二局部存储器第P位置新的数据送往第四局部存储器并保存在第P+1个位置,记为uP,P+1,其它数据
Figure G2009100435924D00101
(aP-1 i,P+1,P+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D00102
减去
Figure G2009100435924D00103
与aP-1 P,P+1的乘积,结果
Figure G2009100435924D00104
(aP i,P+1,P+1≤i≤M′)通过FIFO发送给主处理单元。
3.3.3第P从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第P-1从处理单元送来的第3列数
Figure G2009100435924D00105
(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′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D00107
减去
Figure G2009100435924D00108
与aP-1 P,P+2的乘积,结果(aP i,P+2,P+1≤i≤M′)通过FIFO发送给主处理单元。
3.3.4第P从处理单元针对其它列的数
Figure G2009100435924D001010
(aP-1 i,j,P≤i≤M′),其中P+3≤j≤M′,重复3.3.3中的操作;对于第j+1-P列,数据选择模块交换局部存储器中的piv值所指位置与第P位置的数据,第P位置新的数据送往第四局部存储器并保存在第j个位置,记为uP,j,其它数据
Figure G2009100435924D001011
(aP-1 i,j,P+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D001012
减去
Figure G2009100435924D001013
与aP-1 P,P+2的乘积,结果
Figure G2009100435924D001014
(aP i,j,P+1≤i≤M′)通过FIFO发送给主处理单元。
3.4主处理单元的数据接收模块按列接收第P从处理单元的FIFO发送过来的中间结果
Figure G2009100435924D001015
由外部存储控制器存储到外部存储器中。
然后,各个从处理单元的运算结果按如下步骤传递给主处理单元,并由主处理单元的外部存储控制器存储到外部存储器中:
3.4.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器和第四局部存储器中的数据
Figure G2009100435924D001016
(li,1,2≤i≤M′)、
Figure G2009100435924D001017
(u1,j,1≤j≤M′)送到第二从处理单元的结果发送模块;
3.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据
Figure G2009100435924D00111
(li,k,k+1≤i≤M′)、
Figure G2009100435924D00112
(uk,j,k≤j≤M′)送到第k+1从处理单元的结果发送模块;
3.4.3第P从处理单元的结果发送模块首先将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,然后将第P从处理单元的第一局部存储器和第四局部存储器中的数据
Figure G2009100435924D00113
(li,P,P+1≤i≤M′)、
Figure G2009100435924D00114
(uP,j,P≤j≤M′)送到主处理单元的数据接收模块。
3.4.4主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中。
3.5主处理单元的全局状态控制模块控制参数发送模块置M′=M′-P。
Figure G2009100435924D00116
转步骤2。
4 M′个从处理单元按流水方式对矩阵A′进行处理,由主处理单元将运算结果存入外部存储器。具体步骤如下:
4.1第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元;第一从处理单元对数据发送模块送来的矩阵A′进行如下操作:
4.1.1第一从处理单元的数据通路控制模块把矩阵A′的第1列数(ai,1,1≤i≤M′)放置在第一局部存储器,由选主元模块对
Figure G2009100435924D00118
进行选主元操作,即找出绝对值最大的数作为该列主元u1,1。若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果
Figure G2009100435924D00119
(li,1,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
4.1.2第一从处理单元的数据通路控制模块把第2列数
Figure G2009100435924D001110
(ai,2,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据
Figure G2009100435924D001111
(ai,2,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将减去
Figure G2009100435924D00121
与a1,2的乘积,结果
Figure G2009100435924D00122
(a1 i,2,2≤i≤M′)通过FIFO发送给第二从处理单元。
4.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数
Figure G2009100435924D00123
(ai,3,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据
Figure G2009100435924D00124
(ai,3,2≤i≤ M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D00125
减去
Figure G2009100435924D00126
与a1,3的乘积,结果
Figure G2009100435924D00127
(a1 i,3,2≤i≤M′)通过FIFO发送给第二从处理单元。
4.1.4第一从处理单元针对其它列
Figure G2009100435924D00128
(ai,j,1≤i≤M′),其中4≤j≤M′,重复4.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u1,j,其它数据(ai,j,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D001210
减去
Figure G2009100435924D001211
与a1,j的乘积,结果
Figure G2009100435924D001212
(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′)放置在第一局部存储器,由选主元模块对
Figure G2009100435924D001214
进行选主元操作,找出绝对值最大的数作为该列主元uk,k。若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果
Figure G2009100435924D001215
(li,k,k+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置。
4.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数
Figure G2009100435924D00131
(ak-1 i,k+1,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为uk,k+1,其它数据
Figure G2009100435924D00132
(ak-1 i,k+1,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D00133
减去
Figure G2009100435924D00134
与ak-1 k,k+1的乘积,结果
Figure G2009100435924D00135
(ak i,k+1,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
4.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数
Figure G2009100435924D00136
(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′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D00138
减去
Figure G2009100435924D00139
与ak-1 k,k+2的乘积,结果(ak i,k+2,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元。
4.2.4第k从处理单元针对其它列
Figure G2009100435924D001311
(ak-1 i,j,k≤i≤M′),其中k+3≤j≤M′,重复4.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为uk,j,其它数据
Figure G2009100435924D001312
(ak-1 i,j,k+1≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure G2009100435924D001313
减去
Figure G2009100435924D001314
与ak-1 k,k+2的乘积,结果
Figure G2009100435924D001315
(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.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器和第四局部存储器中的数据(li,1,2≤i≤M′)、
Figure G2009100435924D00142
(u1,j,1≤j≤M′)送到第二从处理单元的结果发送模块;
4.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据
Figure G2009100435924D00143
(li,k,k+1≤i≤M′)、
Figure G2009100435924D00144
(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发送过来的中间结果
Figure G2009100435924D00161
由外部存储控制器存储到外部存储器中。
然后,主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果
Figure G2009100435924D00162
Figure G2009100435924D00163
由外部存储控制器存储到外部存储器中。
最后,主处理单元的全局状态控制模块控制参数发送模块置M′=M-P。
Figure G2009100435924D00164
转步骤2。
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从处理单元或主处理单元。
然后,主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果
Figure G2009100435924D00165
uM′,M′,由外部存储控制器存储到外部存储器中。计算结束。
图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列数(ai,1,1≤i≤M′)放置在第一局部存储器,由选主元模块对
Figure A2009100435920003C2
进行选主元操作,即找出绝对值最大的数作为该列主元u1,1,若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在寄存器piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果
Figure A2009100435920003C3
(li,1,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;
3.1.2第一从处理单元的数据通路控制模块把第2列数(ai,2,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据
Figure A2009100435920003C5
(ai,2,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920003C6
减去
Figure A2009100435920003C7
与a1,2的乘积,结果
Figure A2009100435920003C8
(a1 i,2,2≤i≤M′)通过FIFO发送给第二从处理单元;
3.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数
Figure A2009100435920003C9
(ai,3,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据
Figure A2009100435920003C10
(ai,3,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将减去
Figure A2009100435920003C12
与a1,3的乘积,结果
Figure A2009100435920003C13
(a1 i,3,2≤i≤M′)通过FIFO发送给第二从处理单元;
3.1.4第一从处理单元针对其它列
Figure A2009100435920003C14
(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的乘积,结果
Figure A2009100435920003C18
(a1 i,j,2≤i≤M′)通过FIFO发送给第二从处理单元;
3.2第k从处理单元的参数接收模块从第k-1从处理单元的参数接收模块接收到参数M′,传递给第k+1从处理单元;当第k-1从处理单元执行到它的数据通路控制模块把第k-2从处理单元送来的第3列数放置在第三局部存储器时,当k=2时,第k-2从处理单元指主处理单元,第k从处理单元开始对第k-1从处理单元送来的数据进行如下操作:
3.2.1第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第1列数
Figure A2009100435920004C1
(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列数
Figure A2009100435920004C4
(ak-1 i,k+1,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为uk,k+1,其它数据
Figure A2009100435920004C5
(ak-1 i,k+1,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920004C6
减去
Figure A2009100435920004C7
与ak-1 k,k+1的乘积,结果
Figure A2009100435920004C8
(ak i,k+1,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;
3.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数
Figure A2009100435920004C9
(ak-1 i,k+2,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为uk,k+2,其它数据
Figure A2009100435920004C10
(ak-1 i,k+2,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920004C11
减去
Figure A2009100435920004C12
与ak-1 k,k+2的乘积,结果
Figure A2009100435920004C13
(ak i,k+2,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;
3.2.4第k从处理单元针对其它列
Figure A2009100435920004C14
(ak-1 i,j,k≤i≤M′),其中k+3≤j≤M′,重复3.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为uk,j,其它数据
Figure A2009100435920005C1
(ak-1 i,j,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920005C2
减去
Figure A2009100435920005C3
与ak-1 k,k+2的乘积,结果
Figure A2009100435920005C4
(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列数
Figure A2009100435920005C5
(aP-1 i,P,P≤i≤M′)放置在第一局部存储器,由选主元模块对
Figure A2009100435920005C6
进行选主元操作,找出绝对值最大的数作为该列主元uP,P;若主元不在该列的第P个位置,由选主元模块将主元与该列第P个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果
Figure A2009100435920005C7
(li,P,P+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;
3.3.2第P从处理单元的数据通路控制模块把第P-1从处理单元送来的第2列数
Figure A2009100435920005C8
(aP-1 i,P+1,P≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第P位置的数据,第二局部存储器第P位置新的数据送往第四局部存储器并保存在第P+1个位置,记为uP,P+1,其它数据
Figure A2009100435920005C9
(aP-1 i,P+1,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920005C10
减去
Figure A2009100435920005C11
与aP-1 P,P+1的乘积,结果
Figure A2009100435920005C12
(aP i,P+1,P+1≤i≤M′)通过FIFO发送给主处理单元;
3.3.3第P从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第P-1从处理单元送来的第3列数
Figure A2009100435920005C13
(aP-1 i,P+2,P≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第P位置的数据,第三局部存储器第P位置新的数据送往第四局部存储器并保存在第P+2个位置,记为uP,P+2,其它数据
Figure A2009100435920005C14
(aP-1 i,P+2,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920005C15
减去
Figure A2009100435920005C16
与aP-1 P,P+2的乘积,结果
Figure A2009100435920005C17
(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,其它数据
Figure A2009100435920006C2
(aP-1 i,j,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920006C3
减去
Figure A2009100435920006C4
与aP-1 P,P+2的乘积,结果
Figure A2009100435920006C5
(aP i,j,P+1≤i≤M′)通过FIFO发送给主处理单元;
3.4主处理单元的数据接收模块按列接收第P从处理单元的FIFO发送过来的中间结果
Figure A2009100435920006C6
由外部存储控制器存储到外部存储器中,然后,各个从处理单元的运算结果按如下步骤传递给主处理单元,并由主处理单元的外部存储控制器存储到外部存储器中:
3.4.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器和第四局部存储器中的数据(li,1,2≤i≤M′)、(u1,j,1≤j≤M′)送到第二从处理单元的结果发送模块;
3.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据
Figure A2009100435920006C9
(li,k,k+1≤i≤M′)、
Figure A2009100435920006C10
(uk,j,k≤j≤M′)送到第k+1从处理单元的结果发送模块;
3.4.3第P从处理单元的结果发送模块首先将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,然后将第P从处理单元的第一局部存储器和第四局部存储器中的数据(li,P,P+1≤i≤M′)、
Figure A2009100435920006C12
(uP,j,P≤j≤M′)送到主处理单元的数据接收模块;
3.4.4主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中;
3.5主处理单元的全局状态控制模块控制参数发送模块置M′=M′-P,A′=由列向量
Figure A2009100435920006C13
组成的中间结果矩阵,转步骤2;
4M′个从处理单元按流水方式对矩阵A′进行处理,由主处理单元将运算结果存入外部存储器,具体步骤如下:
4.1第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元,第一从处理单元对数据发送模块送来的矩阵A′进行如下操作:
4.1.1第一从处理单元的数据通路控制模块把矩阵A′的第1列数
Figure A2009100435920007C1
(ai,1,1≤i≤M′)放置在第一局部存储器,由选主元模块对
Figure A2009100435920007C2
进行选主元操作,即找出绝对值最大的数作为该列主元u1,1;若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果
Figure A2009100435920007C3
(li,1,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;
4.1.2第一从处理单元的数据通路控制模块把第2列数
Figure A2009100435920007C4
(ai,2,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据
Figure A2009100435920007C5
(ai,2,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920007C6
减去
Figure A2009100435920007C7
与a1,2的乘积,结果(a1 i,2,2≤i≤M′)通过FIFO发送给第二从处理单元;
4.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数
Figure A2009100435920007C9
(ai,3,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据
Figure A2009100435920007C10
(ai,3,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920007C11
减去与a1,3的乘积,结果
Figure A2009100435920007C13
(a1 i,3,2≤i≤M′)通过FIFO发送给第二从处理单元;
4.1.4第一从处理单元针对其它列
Figure A2009100435920007C14
(ai,j,1≤i≤M′),其中4≤j≤M′,重复4.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u1,j,其它数据
Figure A2009100435920007C15
(ai,j,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将
Figure A2009100435920007C16
减去
Figure A2009100435920007C17
与a1,j的乘积,结果
Figure A2009100435920007C18
(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列数
Figure A2009100435920008C1
(ak-1 i,k,k≤i≤M′)放置在第一局部存储器,由选主元模块对进行选主元操作,找出绝对值最大的数作为该列主元uk,k;若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果
Figure A2009100435920008C3
(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,其它数据
Figure A2009100435920008C5
(ak-1 i,k+1,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将减去
Figure A2009100435920008C7
与ak-1 k,k+1的乘积,结果
Figure A2009100435920008C8
(ak i,k+1,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;
4.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数
Figure A2009100435920008C9
(ak-1 i,k+2,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为uk,k+2,其它数据
Figure A2009100435920008C10
(ak-1 i,k+2,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920008C11
减去与ak-1 k,k+2的乘积,结果
Figure A2009100435920008C13
(ak i,k+2,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;
4.2.4第k从处理单元针对其它列
Figure A2009100435920008C14
(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′)送往浮点乘加运算模块;浮点乘加运算模块将
Figure A2009100435920009C2
减去与ak-1 k,k+2的乘积,结果
Figure A2009100435920009C4
(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′
4.4线性计算阵列将运算结果传递给主处理单元的数据接收模块,主处理单元的外部存储控制器将运算结果存储到外部存储器中,最终,运算结果完全存储在外部存储器作为输出,计算结束,具体步骤如下:
4.4.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器和第四局部存储器中的数据(li,1,2≤i≤M′)、
Figure A2009100435920009C6
(u1,j,1≤j≤M′)送到第二从处理单元的结果发送模块;
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从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中。
2.如权利要求1所述的基于FPGA的列选主元LU分解方法,其特征在于所述全局状态控制模块由一个状态机和一个比较器组成,状态机通过信号线与比较器相连,状态机由“空闲”、“初始化参数”、“发送参数”、“配置参数”、“发送数据”、“接收中间结果”、“等待运算结束”、“接收运算结果”8个状态组成;状态机在主从式并行计算系统复位之后进入“空闲”状态;当主从式并行计算系统开始运行时,进入“初始化参数”状态,向参数发送模块发参数初始化命令,参数发送模块置M′=M;然后状态机进入“发送参数”状态,通过参数发送模块对线性计算阵列需要处理的矩阵大小进行配置,即将M′发送给第一从处理单元;参数发送后,状态机进入“发送数据”状态,通知数据发送模块将矩阵发送给线性计算阵列;比较器比较M′和P的大小,如果M′>P,状态机进入“接收中间结果”状态,通知数据接收模块接收中间结果,然后进入“等待运算结束”状态等待线性计算阵列运算结束;如果M′≤P,状态机直接由“发送数据”状态进入“等待运算结束”状态;当运算结束,状态机进入“接收运算结果”状态,通知数据接收模块接收运算结果;数据接收完毕后,如果M′>P,状态机转入“配置参数”状态,向参数发送模块发配置参数命令,参数发送模块置′=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从处理单元的第一局部存储器和第四局部存储器中的数据送到主处理单元的数据接收模块。
CN2009100435924A 2009-06-03 2009-06-03 基于fpga的列选主元lu分解方法 Expired - Fee Related CN101604306B (zh)

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 true CN101604306A (zh) 2009-12-16
CN101604306B 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)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102117264A (zh) * 2010-12-29 2011-07-06 中国船舶重工集团公司第七一五研究所 基于fpga的快速沃尔什变换的实现方法
CN101770585B (zh) * 2010-01-07 2011-09-28 浙江大学 基于FPGA的矩阵数据按bit旋转的装置及方法
CN102486727A (zh) * 2010-12-03 2012-06-06 同济大学 基于线程构造块的超大规模矩阵多核并行克劳特分解方法
CN104636315A (zh) * 2015-02-06 2015-05-20 中国人民解放军国防科学技术大学 面向gpdsp的矩阵lu分解向量化计算的方法
CN105373517A (zh) * 2015-11-09 2016-03-02 南京大学 基于Spark的分布式稠密矩阵求逆并行化运算方法
CN105426345A (zh) * 2015-12-25 2016-03-23 南京大学 一种矩阵求逆运算方法
CN105577232A (zh) * 2015-12-22 2016-05-11 中国船舶重工集团公司第七一五研究所 基于fpga的复合序列fwt快速相关检测方法
CN108763653A (zh) * 2018-04-30 2018-11-06 南京大学 基于fpga的可重构线性方程组求解加速器
CN111222092A (zh) * 2018-11-26 2020-06-02 北京华航无线电测量研究所 一种基于fpga的矩阵特征分解方法

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101770585B (zh) * 2010-01-07 2011-09-28 浙江大学 基于FPGA的矩阵数据按bit旋转的装置及方法
CN102486727A (zh) * 2010-12-03 2012-06-06 同济大学 基于线程构造块的超大规模矩阵多核并行克劳特分解方法
CN102486727B (zh) * 2010-12-03 2014-10-22 同济大学 基于线程构造块的超大规模矩阵多核并行克劳特分解方法
CN102117264A (zh) * 2010-12-29 2011-07-06 中国船舶重工集团公司第七一五研究所 基于fpga的快速沃尔什变换的实现方法
CN102117264B (zh) * 2010-12-29 2014-02-12 中国船舶重工集团公司第七一五研究所 基于fpga的快速沃尔什变换的实现方法
CN104636315B (zh) * 2015-02-06 2017-12-22 中国人民解放军国防科学技术大学 面向gpdsp的矩阵lu分解向量化计算的方法
CN104636315A (zh) * 2015-02-06 2015-05-20 中国人民解放军国防科学技术大学 面向gpdsp的矩阵lu分解向量化计算的方法
CN105373517A (zh) * 2015-11-09 2016-03-02 南京大学 基于Spark的分布式稠密矩阵求逆并行化运算方法
CN105577232A (zh) * 2015-12-22 2016-05-11 中国船舶重工集团公司第七一五研究所 基于fpga的复合序列fwt快速相关检测方法
CN105577232B (zh) * 2015-12-22 2018-12-25 中国船舶重工集团公司第七一五研究所 基于fpga的复合序列fwt快速相关检测方法
CN105426345A (zh) * 2015-12-25 2016-03-23 南京大学 一种矩阵求逆运算方法
CN108763653A (zh) * 2018-04-30 2018-11-06 南京大学 基于fpga的可重构线性方程组求解加速器
CN108763653B (zh) * 2018-04-30 2022-04-22 南京大学 基于fpga的可重构线性方程组求解加速器
CN111222092A (zh) * 2018-11-26 2020-06-02 北京华航无线电测量研究所 一种基于fpga的矩阵特征分解方法
CN111222092B (zh) * 2018-11-26 2023-06-13 北京华航无线电测量研究所 一种基于fpga的矩阵特征分解方法

Also Published As

Publication number Publication date
CN101604306B (zh) 2011-01-19

Similar Documents

Publication Publication Date Title
CN101604306B (zh) 基于fpga的列选主元lu分解方法
CN108171317A (zh) 一种基于soc的数据复用卷积神经网络加速器
CN104899182B (zh) 一种支持可变分块的矩阵乘加速方法
CN104572011B (zh) 基于fpga的通用矩阵定点乘法器及其计算方法
CN101399553B (zh) 一种可在线编程的准循环ldpc码编码器装置
CN100449522C (zh) 基于多fpga的矩阵乘法并行计算系统
CN107301455B (zh) 用于卷积神经网络的混合立方体存储系统及加速计算方法
CN107832082A (zh) 一种用于执行人工神经网络正向运算的装置和方法
CN102541809B (zh) 一种动态可重构处理器
CN108537331A (zh) 一种基于异步逻辑的可重构卷积神经网络加速电路
CN112463719A (zh) 一种基于粗粒度可重构阵列实现的存内计算方法
CN101533387A (zh) 基于fpga的边角块稀疏矩阵并行lu分解器
CN103677739A (zh) 一种可配置的乘累加运算单元及其构成的乘累加运算阵列
CN107590085A (zh) 一种具有多级缓存的动态可重构阵列数据通路及其控制方法
EP4318275A1 (en) Matrix multiplier and method for controlling matrix multiplier
CN113811859A (zh) 控制流屏障以及可重构数据处理器
CN109952559A (zh) 具有单独可选元素及成组复制的流式传输引擎
CN102508803A (zh) 一种矩阵转置存储控制器
CN102306141B (zh) 一种描述动态可重构阵列配置信息的方法
CN102402415A (zh) 一种动态可重构阵列内数据缓存的装置及方法
CN109472734A (zh) 一种基于fpga的目标检测网络及其实现方法
CN101847093A (zh) 具有可重构低功耗数据交织网络的数字信号处理器
CN114385972A (zh) 一种直接求解结构化三角稀疏线性方程组的并行计算方法
CN210295181U (zh) 一种用于执行神经网络计算的脉动阵列系统及处理设备
CN113157638A (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
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