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

文档序号:6482202阅读:625来源:国知局
专利名称:基于fpga的列选主元lu分解方法
技术领域
本发明涉及一种矩阵LU (Lower/Upper triangular)分解的方法,具体地 说是一种基于FPGA的稠密矩阵(一般为行列相等的方阵)列选主元LU分解方法。
背景技术
求解稠密线性方程组在科学计算和高性能计算领域占有重要的地位,而稠密 矩阵LU分解(简称LU分解)是求解稠密线性方程组的重要一步,是影响稠密线 性方程组求解性能最关键一步。LU分解的时间复杂度很高,约为(2/3)w3,占线 性方程组求解系统绝大部分运行时间。LU分解分为选主元LU分解和不选主元LU 分解(选主元LU分解最常见的为列选主元LU分解),其中不选主元LU分解不能 保证计算精度和计算正确性,而选主元LU分解却能够克服不选主元LU分解的这 些弊病,从而能够得到广泛运用。
给定矩阵^,选主元LU分解表示为iM-Z^,其中P为一个置换矩阵,丄为 一个对角线元素为1的下三角矩阵,C/为一个上三角矩阵。丄的对角线元素都为 1,不需要保存,Z的其它元素与t/组合在一起形成结果矩阵。采用通用处理器 实现列选主元LU分解,由于其运算能力有限,无法取得很高的计算性能,其计 算效率(计算功耗比)也相当低。而随着FPGA (现场可编程门阵列)的快速发 展,各大公司已经开发出集成大量逻辑单元的高性能、低功耗FPGA芯片。当今 FPGA芯片在0.65nrn工艺下已经能够实现上千万门级的设计,使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分解是本领域技术人员关注的重要技术问题。

发明内容
本发明要解决的技术问题是为避免不选主元Lll分解在计算精度方面的缺
陷,提出一种基于FPGA的列选主元LU分解方法,降低LU分解的时间复杂度, 从而加快稠密矩阵线性方程组的求解。 本发明的技术方案是
第一步,构建基于FPGA的主从式并行计算系统,主从式并行计算系统由主 处理单元和P (P为正整数,户>2)个从处理单元组成。主处理单元与外部存 储器、第一从处理单元、第P从处理单元相连,主处理单元由外部存储器控制器、 全局状态控制模块、参数发送模块、数据发送模块和数据接收模块组成。外部存 储器控制器与外部存储器、数据发送模块、数据接收模块相连,对外部存储器的 读写进行控制,将从外部存储器读入的数据送往数据发送模块,将从数据接收模 块获得的数据写入外部存储器;全局状态控制模块与数据发送模块、数据接收模 块和参数发生模块相连,控制主从式并行计算系统的状态转换;数据发送模块与 外部存储器控制器、全局状态控制模块、第一从处理单元相连,在全局状态控制 模块的控制下,将从外部存储器控制器传来的数据送到第一从处理单元;参数发 送模块与全局状态控制模块、第一从处理单元相连,在全局状态控制模块的控制 下,向第一从处理单元发送参数M',即当前需要处理的矩阵的列数或行数(M' 的初始值为矩阵^的行数或列数M,列数=行数);数据接收模块与第P从处理 单元、外部存储器控制器相连,从第户从处理单元接收中间结果矩阵和计算结果, 并将中间结果矩阵和计算结果发送给外部存储器控制器。
全局状态控制模块由一个状态机和一个比较器组成,状态机通过信号线与比 较器相连,由"空闲"、"初始化参数"、"发送参数"、"配置参数"、"发送数据"、 "接收中间结果"、"等待运算结束"、"接收运算结果"8个状态组成。状态机在 主从式并行计算系统复位之后进入"空闲"状态;当主从式并行计算系统开始运 行时,进入"初始化参数"状态,向参数发送模块发参数初始化命令,参数发送模块置M'-M;然后状态机进入"发送参数"状态,通过参数发送模块对线性 计算阵列需要处理的矩阵大小进行配置,即将M'发送给第一从处理单元;参数 发送后,状态机进入"发送数据"状态,通知数据发送模块将矩阵发送给线性计 算阵列;比较器比较M'和P的大小,如果M、尸,状态机进入"接收中间结果" 状态,通知数据接收模块接收中间结果,然后进入"等待运算结束"状态等待线 性计算阵列运算结束;如果MSP,状态机直接由"发送数据"状态进入"等 待运算结束"状态;当运算结束,状态机进入"接收运算结果"状态,通知数据 接收模块接收运算结果;数据接收完毕后,如果M、P,状态机转入"配置参数" 状态,向参数发送模块发配置参数命令,参数发送模块置M'-M'-P,然后状态 机进入"发送参数"状态;如果MSP,转入"空闲"状态,运算结束。
尸个从处理单元组成一维线性计算阵列,负责进行列选主元LU分解。每个 从处理单元逻辑结构相同,均由参数接收模块、数据通路控制模块、浮点乘加运 算模块、浮点除法运算模块、数据选择模块、选主元模块、结果发送模块、4个 局部存储器和FIFO组成,局部存储器大小设置为M, FIF0深度大于16,局部 存储器和FIFO的位宽与矩阵^的元素一致。
第一从处理单元的参数接收模块与主处理单元的参数发送模块、第二从处理 单元的参数接收模块相连,它从主处理单元的参数发送模块接收M',并发送给 第二从处理单元的参数接收模块。第一从处理单元的数据通路控制模块一方面与 主处理单元的数据发送模块相连, 一方面与第一从处理单元中的选主元模块、第 一局部存储器、第二局部存储器和第三局部存储器相连,它将从数据发送模块接 收的第1列数据送往选主元模块和第一局部存储器,其它奇数列数据送往第三局 部存储器,偶数列数据送往第二局部存储器。第二、第三局部存储器具有"接收 数据"和"工作"两个状态,只有"接收数据"状态的局部存储器才能接收数据; 初始时第二局部存储器为"接收数据"状态,第三局部存储器为"工作"状态; 当一个局部存储器处于"工作"时另一个便处于"接收数据"状态,数据接收完 毕变为"工作"状态。选主元模块与第一从处理单元的数据通路控制模块、第一 局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送 来的数据执行选主元操作,将主元记录在寄存器Pivot中并将pivot的值发送给 浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送 给数据选择模块。浮点除法运算模块与第一局部存储器、选主元模块相连,将选元以外的所有的数,结果放置在第 一局部存储器的原来位置。数据选择模块与第二局部存储器、第三局部存储器、 第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来 的piv值交换第二或第三局部存储器中的piv值所指位置与第一位置的数据,当 第二局部存储器处于"工作"状态时,选择第二局部存储器第一位置的数据送往 第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于"工 作"状态时,选择第三局部存储器第一个位置的数据送往第四局部存储器,其它 数据送往浮点乘加运算模块。第一从处理单元的浮点乘加运算模块与第一从处理 单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数 据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第一从处理单 元的FIFO是一个先入先出缓存器,与第一从处理单元的浮点乘加运算模块和第 二从处理单元的数据通路控制模块相连,缓存第一从处理单元的浮点乘加运算模 块的运算结果,并将该结果送往第二从处理单元的数据通路控制模块。第一从处 理单元的结果发送模块与第一从处理单元的第一局部存储器、第四局部存储器和 第二从处理单元的结果发送模块相连,将第一局部存储器和第四局部存储器中的 数据送到第二从处理单元的结果发送模块。
第丸从处理单元(2S P-1 )的参数接收模块与第it — 1从处理单元的参数 接收模块和第A +1从处理单元的参数接收模块相连,它从第& -1从处理单元的 参数接收模块接收参数M',并发送给第6 +1从处理单元的参数接收模块。第/b从 处理单元的数据通路控制模块与第A:-1从处理单元的FIF0、第fc从处理单元中 的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接 收第A-1从处理单元的FIFO中的数据,将接收的第1列数据送往第A:从处理单 元的选主元模块和第一局部存储器,其它奇数列数据送往第A:从处理单元的第三 局部存储器,偶数列数据送往第A从处理单元的第二局部存储器。第A从处理单 元的第二、第三局部存储器具有"接收数据"和"工作"两个状态,只有"接收 数据"状态的局部存储器才能接收数据;初始时第二局部存储器为"接收数据" 状态,第三局部存储器为"工作"状态;当一个局部存储器处于"工作"时另一 个便处于"接收数据"状态,数据接收完毕变为"工作"状态。第&从处理单元 的选主元模块与第A:从处理单元的数据通路控制模块、第一局部存储器、浮点除 法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块, 同时将主元所在位置记录在寄存器Piv中并将piv的值发送给数据选择模块。第 A:从处理单元的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主 元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一 局部存储器的原来位置。第A从处理单元的数据选择模块与第A:从处理单元的第 二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元 模块相连,它根据选主元模块送来的Piv值交换第二或第三局部存储器中的Piv 值所指位置与第A:位置的数据,当第二局部存储器处于"工作"状态时,选择第 二局部存储器第A位置的数据送往第四局部存储器,其它数据送往浮点乘加运算 模块,当第三局部存储器处于"工作"状态时,选择第三局部存储器第A:个位置 的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第A从处理单元 的浮点乘加运算模块与第A从处理单元的数据选择模块、第一局部存储器和FIFO 相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送 到FIFO中缓存。第A:从处理单元的FIFO与第it从处理单元的浮点乘加运算模块 和第A: +1从处理单元的数据通路控制模块相连,缓存第A从处理单元的浮点乘加 运算模块的运算结果,并将结果发送到第A + 1从处理单元的数据通路控制模块。 第A从处理单元的结果发送模块与第A:从处理单元的第一局部存储器、第四局部 存储器、第/c-1从处理单元的结果发送模块和第A+1从处理单元的结果发送模 块相连, 一方面将第^-l从处理单元的结果发送模块发送来的数据传递给第 A +1从处理单元的结果发送模块, 一方面将第/t从处理单元的第一局部存储器和 第四局部存储器中的数据送到第it +1从处理单元的结果发送模块。
第P从处理单元的参数接收模块与第尸-l从处理单元的参数接收模块相 连,它从第户-1从处理单元的参数接收模块接收参数M'。第尸从处理单元的数 据通路控制模块与第户-1从处理单元的FIF0、第/>从处理单元中的选主元模块、 第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第P-l从处 理单元的FIFO中的数据,将接收的第1列数据送往第尸从处理单元的选主元模 块和第一局部存储器,其它奇数列数据送往第i 从处理单元的第三局部存储器, 偶数列数据送往第P从处理单元的第二局部存储器。第P从处理单元的第二、第 三局部存储器具有"接收数据"和"工作"两个状态,只有"接收数据"状态的 局部存储器才能接收数据;初始时第二局部存储器为"接收数据"状态,第三局部存储器为"工作"状态;当一个局部存储器处于"工作"时另一个便处于"接 收数据"状态,数据接收完毕变为"工作"状态。第P从处理单元的选主元模块 与第P从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和 数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元 记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所 在位置记录在寄存器piv中并将piv的值发送给数据选择模块。第P从处理单元 的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的 主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的 原来位置。第P从处理单元的数据选择模块与第i5从处理单元的第二局部存储 器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连, 它根据选主元模块送来的piv值交换第二或第三局部存储器中的pi v值所指位置 与第iM立置的数据,当第二局部存储器处于"工作"状态时,选择第二局部存储 器第/M立置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第 三局部存储器处于"工作"状态时,选择第三局部存储器第P个位置的数据送往 第四局部存储器,其它数据送往浮点乘加运算模块。第P从处理单元的浮点乘加 运算模块与第尸从处理单元的数据选择模块、第一局部存储器和FIFO相连,对 数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO 中缓存。第P从处理单元的FIFO与主处理单元的数据接收模块相连,用于缓存 第尸从处理单元的浮点乘加运算模块的运算结果,并将结果送往主处理单元的数 据接收模块。第P从处理单元的结果发送模块与第户从处理单元的第一局部存储 器、第四局部存储器、第P-1从处理单元的结果发送模块和主处理单元的数据 接收模块相连, 一方面将第P-l从处理单元的结果发送模块发送来的数据传递 给主处理单元的数据接收模块,一方面将第户从处理单元的第一局部存储器和第 四局部存储器中的数据送到主处理单元的数据接收模块。
第二步,由主从式并行计算系统按以下步骤对矩阵j进行列选主元LU分解:
1. 主处理单元的全局状态控制模块根据当前要处理的矩阵大小M初始化参 数M'-M。待分解矩阵^'=」。
2. 主处理单元的参数发送模块把参数M'发送给第一从处理单元。主处理单 元的外部存储器控制器按列从外部存储器中取出待分解的矩阵,(fl,,,
1《^《M),由数据发送模块发送给第一从处理单元。若Af、户,执行步骤3;若M'S尸,转步骤4。
3.尸个从处理单元按流水方式对矩阵J'进行处理,由主处理单元将中间结
果和运算结果存入外部存储器。具体步骤如下-
3.1第一从处理单元的参数接收模块从参数发送模块接收到参数M',传递 给第二从处理单元,第一从处理单元对数据发送模块送来的矩阵l进行如下操

3.1.1第一从处理单元的数据通路控制模块把矩阵^'的第1列数叾
(气,,1S/《M')放置在第一局部存储器,由选主元模块对^进行选主元操作,
即找出绝对值最大的数作为该列主元Mu。若主元不在该列的第1个位置,由选
主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在 piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结
果5 (G,2Sz^M')放置在该列所有的数在第一局部存储器的原来位置。
3.1.2第一从处理单元的数据通路控制模块把第2列数^ (a,2,lS/SM')
放置在第二局部存储器中,第二局部存储器接收完毕后为"工作"状态,由数据 选择模块交换第二局部存储器的Piv值所指位置与第1位置的数据,第二局部存 储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为"12,其
它数据写(a,2,2^/^M')送往浮点乘加运算模块。浮点乘加运算模块将《减
去Z;与气2的乘积,结果^1 (Z,2,2SWM')通过FIFO发送给第二从处理单 元。
3.1. 3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加 运算模块进行计算的同时把第3列数X ( a,,3,l S / S M')放置在第三局部存储器 中,第3列数接收完毕后第三局部存储器为"工作"状态,由数据选择模块交换 第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置
新的数据送往第四局部存储器并保存在第3个位置,记为"13,其它数据瓦
(fl,3,2^"M')送往浮点乘加运算模块。浮点乘加运算模块将g减去z;与c^
的乘积,结果K (^,,3,2S/SM')通过FIFO发送给第二从处理单元。3.1.4第一从处理单元针对其它列^ (",》,1S!^M'),其中4《j、M', 重复3.1.3中的操作;对于第_/列,数据选择模块交换第二或第三局部存储器的 P"值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保 存在第/个位置,记为"^,其它数据巧(c^,2&3M')送往浮点乘加运算模
块。浮点乘加运算模块将可减去1;与~.的乘积,结果冗"w,2^^Af')通
过FIFO发送给第二从处理单元。
3. 2第A从处理单元的参数接收模块从第A -1从处理单元的参数接收模块接 收到参数M',传递给第A + 1从处理单元;当第A-1从处理单元执行到它的数据 通路控制模块把第A-2从处理单元(当;t-2时,指主处理单元)送来的第3列 数放置在第三局部存储器时,第A从处理单元开始对第A: -1从处理单元送来的数 据进行如下操作
3. 2. 1第A从处理单元的数据通路控制模块把第A -1从处理单元送来的第1
列数^ ^JSKM')放置在第一局部存储器,由选主元模块对2^进
行选主元操作,找出绝对值最大的数作为该列主元"w 。若主元不在该列的第A:个
位置,由选主元模块将主元与该列第A个位置的数进行交换,并将主元原来所在 位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所
有的数,结果Z; ("A + 1《BM')放置在该列所有的数在第一局部存储器的 原来位置。
3. 2. 2第A从处理单元的数据通路控制模块把第A: -1从处理单元送来的第2
列数?^ (""、w^SKM')放置在第二局部存储器中,第二局部存储器接 收完毕后为"工作"状态,由数据选择模块交换第二局部存储器的piv值所指位 置与第&位置的数据,第二局部存储器第A位置新的数据送往第四局部存储器并 保存在第A + 1个位置,记为气4+1,其它数据^、+; (a"、w,it + l"《M')送往
浮点乘加运算模块。浮点乘加运算模块将F^减去z;与""Vw的乘积,结果
下乙(a4,,w,A; + l^、M')通过FIFO发送给第A: + l从处理单元。
3. 2. 3第*从处理单元的数据通路控制模块在浮点乘加运算模块进行计算 的同时把第A-1从处理单元送来的第3列数^、+2 (a4—^+2,ifeSz^M')放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为"工作"状态,由数 据选择模块交换第三局部存储器的piv值所指位置与第/b位置的数据,第三局部 存储器第A:位置新的数据送往第四局部存储器并保存在第A + 2个位置,记为
"w+2,其它数据P1^ UA—',,"a+i^^M')送往浮点乘加运算模块。浮点
乘加运算模块将5"、+2减去Z;与flMw+2的乘积,结果 (a^+2, A: +1化Af')通过FIFO发送给第A: +1从处理单元。
3.2.4第A从处理单元针对其它列?^ ( a"w,y^^M'),其中 A + 3S/SM',重复3.2.3中的操作;对于第j' + l-A列,数据选择模块交换局 部存储器中的piv值所指位置与第/H立置的数据,第A:位置新的数据送往第四局 部存储器并保存在第J'个位置,记为"^,其它数据F^^,A + B/《M')
送往浮点乘加运算模块。浮点乘加运算模块将F^减去Z;与""V"2的乘积,结
果Z^ (fl、,A; + lSiSM')通过FIFO发送给第A + l从处理单元。
3.3第尸从处理单元的参数接收模块从第P-l从处理单元的参数接收模块
接收到参数M';当第P-1从处理单元执行到它的数据通路控制模块把第户-2从
处理单元送来的第3列数放置在第三局部存储器中时,第P从处理单元开始对第
尸-l从处理单元送来的数据进行如下操作
3.3. 1第P从处理单元的数据通路控制模块把第户-l从处理单元送来的第
1列数H (Z—^,P《i^M')放置在第一局部存储器,由选主元模块对Z^ 进行选主元操作,找出绝对值最大的数作为该列主元^,p。若主元不在该列的第
户个位置,由选主元模块将主元与该列第P个位置的数进行交换,并将主元原来 所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该
列所有的数,结果i; + 放置在该列所有的数在第一局部存储
器的原来位置。
3. 3. 2第P从处理单元的数据通路控制模块把第P-1从处理单元送来的第 2列数I^ (^-V^,P^^M')放置在第二局部存储器中,第二局部存储器
接收完毕后为"工作"状态,由数据选择模块交换第二局部存储器的piv值所指 位置与第P位置的数据,第二局部存储器第户位置新的数据送往第四局部存储器并保存在第户+ l个位置,记为"^+1,其它数据5^—V+1 、,M,尸+ 1^'SM')
送往浮点乘加运算模块。浮点乘加运算模块将^C减去Z;与y—的乘积,结果^T (^M^P + l^WM')通过FIFO发送给主处理单元。
3. 3. 3第P从处理单元的数据通路控制模块在浮点乘加运算模块进行计算
的同时把第i5-l从处理单元送来的第3列数f M V+2,尸&^M')放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为"工作"状态,由数据选择模块交换第三局部存储器的piv值所指位置与第P位置的数据,第三局部存储器第P位置新的数据送往第四局部存储器并保存在第户+ 2个位置,记为
"^+2,其它数据P^',,+2,尸+ 1"^71/')送往浮点乘加运算模块。浮点
乘加运算模块将5 减去i;与、P+2的乘积,结果^(ap,,/>+2,P +1S ! 《M')通过FIFO发送给主处理单元。
3.3.4第P从处理单元针对其它列的数^ (flp-'w,i^KM'),其中户+ 3Sy、M',重复3.3.3中的操作;对于第/ + 1 —尸歹ij,数据选择模块交换局部存储器中的piv值所指位置与第户位置的数据,第P位置新的数据送往第四局部存储器并保存在第乂个位置,记为"",其它数据F^ (^-、,户+ B/《M')
送往浮点乘加运算模块。浮点乘加运算模块将P^减去i;与V,f+2的乘积,
结果2^ (a ;,P + l&^M')通过FIFO发送给主处理单元。
3.4主处理单元的数据接收模块按列接收第P从处理单元的FIFO发送过来
的中间结果Z^、 ..... ^7,由外部存储控制器存储到外部存储器中。
然后,各个从处理单元的运算结果按如下步骤传递给主处理单元,并由主处理单元的外部存储控制器存储到外部存储器中
3.4.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器
和第四局部存储器中的数据i; ("2"SM')、 ^ ( .,1"^M')送到第二
从处理单元的结果发送模块;
3.4.2第A:从处理单元的结果发送模块首先将第A -1从处理单元的结果发送模块发送来的数据传递给第t + l从处理单元的结果发送模块,然后将第fc从处理单元的第一局部存储器和第四局部存储器中的数据Z; UaJ + l《/《M')、 k("U,A:S y^M')送到第A + 1从处理单元的结果发送模块;
3. 4. 3第户从处理单元的结果发送模块首先将第P -1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,然后将第P从处理单元的第一局部存储器和第四局部存储器中的数据i; (/,,,P + 1S"M')、巧("",P《y《M')送到主处理单元的数据接收模块。
3. 4. 4主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中。
3.5主处理单元的全局状态控制模块控制参数发送模块置M'-M'-P。 乂'=
中间结果矩阵(由列向量Z^、 ..... K组成),转步骤2。
4 M'个从处理单元按流水方式对矩阵v4'进行处理,由主处理单元将运算结果存入外部存储器。具体步骤如下
4. 1第一从处理单元的参数接收模块从参数发送模块接收到参数M',传递给第二从处理单元;第一从处理单元对数据发送模块送来的矩阵力'进行如下操作
4.1.1第一从处理单元的数据通路控制模块把矩阵A的第1列数叾
(flu,lS/SM')放置在第一局部存储器,由选主元模块对叾进行选主元操作,
即找出绝对值最大的数作为该列主元w,,,。若主元不在该列的第1个位置,由选
主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结
果Z; (d,2SKM')放置在该列所有的数在第一局部存储器的原来位置。
4.1.2第一从处理单元的数据通路控制模块把第2列数:i; (fl,2,l《,^M,)
放置在第二局部存储器中,第二局部存储器接收完毕后为"工作"状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第l位置新的数据送往第四局部存储器并保存在第2个位置,记为"12,其
它数据g (a,,2,2^!'《M')送往浮点乘加运算模块。浮点乘加运算模块将耳减去i;与气2的乘积,结果J12 (A,2,2^、M')通过FIFO发送给第二从处理单元。
4. 1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加
运算模块进行计算的同时把第3列数S (。,,3,1S/SM')放置在第三局部存储器
中,第3列数接收完毕后第三局部存储器为"工作"状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置
新的数据送往第四局部存储器并保存在第3个位置,记为^3,其它数据g(",,3,2&^M')送往浮点乘加运算模块。浮点乘加运算模块将瓦减去Z;与"w
的乘积,结果冗(a、,3,2S!、M')通过FIFO发送给第二从处理单元。
4. 1.4第一从处理单元针对其它列^ ( .,1^/^71/'),其中4Sy^W,重复4. 1.3中的操作;对于第J列,数据选择模块交换第二或第三局部存储器的Piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第y个位置,记为",,;,其它数据《(",,"2SWM')送往浮点乘加运算模
块。浮点乘加运算模块将可减去i;与^的乘积,结果7 U',j,2&^M')通
过FIFO发送给第二从处理单元。
4. 2第k从处理单元(2 S k S M'-l)的参数接收模块从第A:-1从处理单元的参数接收模块接收到参数M',传递给第A: + 1从处理单元;当第A-l从处理单元执行到它的数据通路控制模块把第A:-2从处理单元(当A:-2时,指主处理单元)送来的第3列数放置在第三局部存储器时,第A:从处理单元开始对第A: -1从处理单元送来的数据进行如下操作
4.2. 1第A从处理单元的数据通路控制模块把第yt-l从处理单元送来的第1
列数^!V,ASWM')放置在第一局部存储器,由选主元模块对^I进
行选主元操作,找出绝对值最大的数作为该列主元"W。若主元不在该列的第it个
位置,由选主元模块将主元与该列第A:个位置的数进行交换,并将主元原来所在位置记录在piv中。交换后,由浮点除法运算模块将主元除以主元以外的该列所
有的数,结果5 (/,,,,A: + 1S/SM')放置在该列所有的数在第一局部存储器的原来位置。4. 2. 2第A:从处理单元的数据通路控制模块把第& -1从处理单元送来的第2列数八,Vw,A^^^M')放置在第二局部存储器中,第二局部存储器接
收完毕后为"工作"状态,由数据选择模块交换第二局部存储器的Piv值所指位置与第左位置的数据,第二局部存储器第A位置新的数据送往第四局部存储器并
保存在第A + 1个位置,记为 4+1,其它数据5"、" + 送往
浮点乘加运算模块。浮点乘加运算模块将F^减去Z;与y—V,w的乘积,结果
7: (fl ,w,A + l"、M')通过FIFO发送给第t + l从处理单元。
4. 2. 3第A:从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第A-l从处理单元送来的第3列数?^ (fl"^+2^S/^M')放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为"工作"状态,由数据选择模块交换第三局部存储器的piv值所指位置与第&位置的数据,第三局部存储器第A:位置新的数据送往第四局部存储器并保存在第A + 2个位置,记为
^,i+2,其它数据W—V2V+a + l《"M')送往浮点乘加运算模块。浮点
乘加运算模块将3 2减去z;与a"\i+2的乘积,结果l
(a V+2 , +1化M')通过FIFO发送给第A: +1从处理单元。
4.2.4第>t从处理单元针对其它列( ^j&'SM'),其中A + 3《/SM',重复4.2.3中的操作;对于第y + l —A列,数据选择模块交换局部存储器中的piv值所指位置与第A位置的数据,第/t位置新的数据送往第四局部存储器并保存在第7'个位置,记为"w,其它数据^ (""^,"1^"M')送往浮点乘加运算模块。浮点乘加运算模块将^减去i;与^—\*+2的乘积,结
果冗U^A + ld《M')通过FIFO发送给第^ + l从处理单元。
4. 3第M'从处理单元的参数接收模块从第M'-1从处理单元的参数接收模
块接收到参数M';第M'从处理单元将第M'-1从处理单元送来一行一列即
flM'—放置在第一局部存储器,记为"M.,M,。由于矩阵每经过一个从处理单元,
规模都会变小,第M'从处理单元已没有结果送出。
4. 4线性计算阵列将运算结果传递给主处理单元的数据接收模块,主处理单元的外部存储控制器将运算结果存储到外部存储器中,最终,运算结果完全存储在外部存储器作为输出,计算结束。具体步骤如下
4.4.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器
和第四局部存储器中的数据i; (/,i,2《KM')、帀(Wl7,l《)《M')送至條二
从处理单元的结果发送模块;
4.4.2第>t从处理单元的结果发送模块首先将第6-1从处理单元的结果发送模块发送来的数据传递给第A +1从处理单元的结果发送模块,然后将第A从处理
单元的第一局部存储器和第四局部存储器中的数据ZI (/aA + l《/《M')、巧
(,yt S _/、 )送至!J第A: +1从处理单元的结果发送模块;
4.4.3第M'从处理单元的结果发送模块首先将第M'-l从处理单元的结果发送模块发送来的数据传递给第M'+1从处理单元的结果发送模块,然后将第M'从处理单元的第一局部存储器的数据"^,送到第M'+1从处理单元的结果发送
模块;
4.4.5第/7从处理单元(M'+1S/^P-1)的结果发送模块将第/;-l从处理单元的结果发送模块发送来的数据传递给第A + 1从处理单元的结果发送模块;
4.4.6第P从处理单元的结果发送模块将第P-l从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块;
4. 4. 7主处理单元的数据接收模块接收从第户从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中。
采用本发明可以达到以下技术效果
1. 本发明利用基于FPGA的主从式并行计算系统,实现了列选主元LU分解。由于选出的主元作为除数,使计算精度与不选主元LU分解相比得到很大提高。
2. 本发明从处理单元采用流水化的并行执行机制,在进行LU分解时, 一方面各数据通路控制模块在浮点乘加运算模块进行计算的同时把前一从处理单元送来的数放置在第二或第三局部存储器中, 一方面在前一从处理单元执行到第三列数据时,后一从处理单元即开始接收前一单元发送的数据。当从处理器单元个数达到16时,比通用处理器相比执行速度快5倍。从处理器单元个数越多,执行速度比通用处理器越快,在设计主从式并行计算系统时根据要处理的矩阵大小和FPGA资源约束灵活配置。
3.本发明的主从式并行计算系统采用一维线性阵列的拓扑结构,具有可扩展性,可根据实际FPGA芯片的容量和对计算能力的需求,配置不同的从处理单元个数,并且在保证满足面积和性能需求的同时,能够降低功耗。


图l是本发明的总体流程图。
图2是本发明的主从式并行计算系统逻辑结构图。
图3是本发明主处理单元的全局状态控制模块状态转换图。
具体实施方案
图1是本发明的总体流程图。首先构建基于FPGA的主从式并行计算系统,主从式并行计算系统由主处理单元和P个从处理单元组成。然后由主从式并行计算系统按以下步骤对待分解矩阵A (",y, la,j、M,且M是正整数)进行列
选主元LU分解
1. 主处理单元的全局状态控制模块根据当前要处理的矩阵大小M初始化参数M'二M。待分解矩阵^=乂。
2. 主处理单元的参数发送模块把参数M'发送给第一从处理单元。主处理单元的外部存储器控制器按列从外部存储器中取出待分解的矩阵^1S/J《M),由数据发送模块发送给第一从处理单元。若M'〉P,执行步骤3;否则,转步骤4。
3. 首先,由P个从处理单元按流水方式对矩阵A进行处理第一从处理单元的参数接收模块从参数发送模块接收到参数AT ,传递给第
二从处理单元,……,第A: (2SA:S尸-1)从处理单元将参数M'传递给第;t + l从处理单元,……,第f从处理单元不再将参数M'进行传递;
第一从处理单元对主处理单元送来的矩阵i进行选主元、浮点除和浮点乘加等操作,中间结果通过FIFO传递给第二从处理单元,……,第A从处理单元在第6-l从处理单元执行到第/t-2从处理单元(当Jt-2时,指主处理单元)送来的第3列数时开始对第A-l从处理单元送来的数据进行操作,……,第/>从处理单元在第P-l从处理单元执行到第P-2从处理单元送来的第3列数时开始对第/> -1从处理单元送来的数据进行操作,中间结果由FIFO发送给主处理单元。接着,主处理单元的数据接收模块按列接收到第尸从处理单元的FIFO发送
过来的中间结果^、 ^、 ...、 7:,由外部存储控制器存储到外部存储器中。
然后,主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发
送过来的各个从处理单元的运算结果z;、 ^;、 5、仄........z;、巧........
z;、 k,由外部存储控制器存储到外部存储器中。
最后,主处理单元的全局状态控制模块控制参数发送模块置M'=M-户。」'=中间结果矩阵(由列向量^、 ..... z^组成),转步骤2。
4.首先,由M'个从处理单元按流水方式对矩阵」'进行处理
第一从处理单元的参数接收模块从参数发送模块接收到参数M',传递给第二从处理单元,……,第A从处理单元(2s;tSM'-l)将参数M'传递给第A:从处理单元,……,第M'从处理单元不再将参数M'传递给第M'+1从处理单元;
第一从处理单元对主处理单元送来的矩阵,进行选主元、浮点除和浮点乘加等操作,中间结果通过FIFO传递给第二从处理单元,……,第/t从处理单元在第it-l从处理单元执行到第A-2从处理单元(当A:-2时,指主处理单元)送来的第3列数时开始对第A-1从处理单元送来的数据进行操作,……,第M'从处理单元将第M'—l从处理单元送来一行一列数据放置在第一局部存储器,没有中间结果再传递给第M'+l从处理单元或主处理单元。
然后,主处理单元的数据接收模块接收从第尸从处理单元的结果发送模块发
送过来的各个从处理单元的运算结果A、 ^、z;、^........z;、^........
1/M.,,由外部存储控制器存储到外部存储器中。计算结束。
图2是本发明的主从式并行计算系统逻辑结构图。原始矩阵存储在外部存储器中。主从式并行计算系统由主处理单元和尸(P为正整数,尸>2)个从处理
单元组成。主处理单元与外部存储器、第一从处理单元、第p从处理单元相连,主处理单元由外部存储器控制器、全局状态控制模块、参数发送模块、数据发送模块和数据接收模块组成。外部存储器控制器与外部存储器、数据发送模块、数据接收模块相连,对外部存储器的读写进行控制,将从外部存储器读入的数据送
往数据发送模块,将从数据接收模块获得的数据写入外部存储器;全局状态控制模块与数据发送模块、数据接收模块和参数发生模块相连,控制主从式并行计算系统的状态转换;数据发送模块与外部存储器控制器、全局状态控制模块、第一从处理单元相连,在全局状态控制模块的控制下,将从外部存储器控制器传来的数据送到第一从处理单元;参数发送模块与全局状态控制模块、第一从处理单元相连,在全局状态控制模块的控制下,向第一从处理单元发送参数W,即当前需要处理的矩阵的列数或行数(W的初始值为矩阵4的行数或列数^,列数=行数);数据接收模块与第尸从处理单元、外部存储器控制器相连,从第P从处理单元接收中间结果矩阵和计算结果,并将中间结果矩阵和计算结果发送给外部存储器控制器。
尸个从处理单元组成一维线性计算阵列,负责进行列选主元LU分解。每个从处理单元逻辑结构相同,均由参数接收模块、数据通路控制模块、浮点乘加运算模块、浮点除法运算模块、数据选择模块、选主元模块、结果发送模块、4个局部存储器和FIF0组成,局部存储器大小设置为AT, FIF0深度大于16,局部存储器和FIFO的位宽与矩阵^的元素一致。
第一从处理单元的参数接收模块与主处理单元的参数发送模块、第二从处理单元的参数接收模块相连,它从主处理单元的参数发送模块接收M',并发送给第二从处理单元的参数接收模块。第一从处理单元的数据通路控制模块一方面与主处理单元的数据发送模块相连, 一方面与第一从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它将从数据发送模块接收的第1列数据送往选主元模块和第一局部存储器,其它奇数列数据送往第三局部存储器,偶数列数据送往第二局部存储器。第二、第三局部存储器具有"接收数据"和"工作"两个状态,只有"接收数据"状态的局部存储器才能接收数据;初始时第二局部存储器为"接收数据"状态,第三局部存储器为"工作"状态;当一个局部存储器处于"工作"时另一个便处于"接收数据"状态,数据接收完毕变为"工作"状态。选主元模块与第一从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块。浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置。数据选择模块与第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储器中的piv值所指位置与第一位置的数据,当第二局部存储器处于"工作"状态时,选择第二局部存储器第一位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于"工作"状态时,选择第三局部存储器第一个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第一从处理单元的浮点乘加运算模块与第一从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第一从处理单元的FIFO是一个先入先出缓存器,与第一从处理单元的浮点乘加运算模块和第二从处理单元的数据通路控制模块相连,缓存第一从处理单元的浮点乘加运算模块的运算结果,并将该结果送往第二从处理单元的数据通路控制模块。第一从处理单元的结果发送模块与第一从处理单元的第一局部存储器、第四局部存储器和第二从处理单元的结果发送模块相连,将第一局部存储器和第四局部存储器中的数据送到第二从处理单元的结果发送模块。
第A从处理单元(2《A S户-1 )的参数接收模块与第-1从处理单元的参数接收模块和第A +1从处理单元的参数接收模块相连,它从第& -1从处理单元的参数接收模块接收参数M',并发送给第A +1从处理单元的参数接收模块。第A:从处理单元的数据通路控制模块与第A-1从处理单元的FIF0、第A:从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第/t-l从处理单元的FIFO中的数据,将接收的第1列数据送往第A:从处理单元的选主元模块和第一局部存储器,其它奇数列数据送往第A从处理单元的第三局部存储器,偶数列数据送往第^从处理单元的第二局部存储器。第A从处理单元的第二、第三局部存储器具有"接收数据"和"工作"两个状态,只有"接收数据"状态的局部存储器才能接收数据;初始时第二局部存储器为"接收数据"状态,第三局部存储器为"工作"状态;当一个局部存储器处于"工作"时另一个便处于"接收数据"状态,数据接收完毕变为"工作"状态。第A从处理单元的选主元模块与第/b从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器Pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器Piv中并将piv的值发送给数据选择模块。第it从处理单元的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置。第A:从处理单元的数据选择模块与第A:从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的Piv值交换第二或第三局部存储器中的piv值所指位置与第/H立置的数据,当第二局部存储器处于"工作"状态时,选择第二局部存储器第A位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于"工作"状态时,选择第三局部存储器第A个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第A:从处理单元的浮点乘加运算模块与第A从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第A从处理单元的FIFO与第yt从处理单元的浮点乘加运算模块和第A: +1从处理单元的数据通路控制模块相连,缓存第A:从处理单元的浮点乘加运算模块的运算结果,并将结果发送到第A: + 1从处理单元的数据通路控制模块。第A:从处理单元的结果发送模块与第*从处理单元的第一局部存储器、第四局部存储器、第A-1从处理单元的结果发送模块和第A: + 1从处理单元的结果发送模块相连, 一方面将第A:-l从处理单元的结果发送模块发送来的数据传递给第A: + l从处理单元的结果发送模块, 一方面将第A:从处理单元的第一局部存储器和第四局部存储器中的数据送到第it +1从处理单元的结果发送模块。
第尸从处理单元的参数接收模块与第户-1从处理单元的参数接收模块相连,它从第P-1从处理单元的参数接收模块接收参数M'。第P从处理单元的数据通路控制模块与第P -1从处理单元的FIF0、第P从处理单元中的选主元模块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第P-l从处理单元的FIFO中的数据,将接收的第1列数据送往第尸从处理单元的选主元模块和第一局部存储器,其它奇数列数据送往第P从处理单元的第三局部存储器,偶数列数据送往第P从处理单元的第二局部存储器。第P从处理单元的第二、第三局部存储器具有"接收数据"和"工作"两个状态,只有"接收数据,,状态的局部存储器才能接收数据;初始时第二局部存储器为"接收数据"状态,第三局部存储器为"工作"状态;当一个局部存储器处于"工作"时另一个便处于"接收数据"状态,数据接收完毕变为"工作"状态。第P从处理单元的选主元模块与第P从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将piv的值发送给数据选择模块。第P从处理单元的浮点除法运算模块与第一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所有的数,结果放置在第一局部存储器的原来位置。第P从处理单元的数据选择模块与第P从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连,它根据选主元模块送来的Pi v值交换第二或第三局部存储器中的Piv值所指位置与第尸位置的数据,当第二局部存储器处于"工作"状态时,选择第二局部存储器第P位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器处于"工作"状态时,选择第三局部存储器第P个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块。第户从处理单元的浮点乘加运算模块与第尸从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓存。第P从处理单元的FIFO与主处理单元的数据接收模块相连,用于缓存第尸从处理单元的浮点乘加运算模块的运算结果,并将结果送往主处理单元的数据接收模块。第尸从处理单元的结果发送模块与第P从处理单元的第一局部存储器、第四局部存储器、第P-1从处理单元的结果发送模块和主处理单元的数据
接收模块相连, 一方面将第户-l从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块, 一方面将第P从处理单元的第一局部存储器和第四局部存储器中的数据送到主处理单元的数据接收模块。
图3是本发明主处理单元的全局状态控制模块状态转换图。全局状态控制模块由一个状态机和一个比较器组成,状态机通过信号线与比较器相连,由"空闲"、"初始化参数"、"发送参数"、"配置参数"、"发送数据"、"接收中间结果"、"等待运算结束"、"接收运算结果"8个状态组成。状态机在主从式并行计算系统复位之后进入"空闲"状态;当主从式并行计算系统开始运行时,进入"初始化参数"状态,向参数发送模块发参数初始化命令,参数发送模块置W-M;然后状态机进入"发送参数"状态,通过参数发送模块对线性计算阵列需要处理的矩阵大小进行配置,即将^发送给第一从处理单元;参数发送后,状态机进入"发送数据"状态,通知数据发送模块将矩阵发送给线性计算阵列;比较器比较^'和^的大小,如果^'>户,状态机进入"接收中间结果"状态,通知数据接收模块接收中间结果,然后进入"等待运算结束"状态等待线性计算阵列运算结束;如果MSP,状态机直接由"发送数据"状态进入"等待运算结束"状态;当运算结束,状态机进入"接收运算结果"状态,通知数据接收模块接收运算结果;数据接收完毕后,如果M、P,状态机转入"配置参数"状态,向参数发送模块发配置参数命令,参数发送模块置M'-M'-户,然后状态机进入"发送参数"状态;如果MS尸,转入"空闲"状态,运算结束。
权利要求
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列数 id="icf0001" file="A2009100435920003C1.tif" wi="4" he="5" top= "45" left = "151" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,1,1≤i≤M′)放置在第一局部存储器,由选主元模块对 id="icf0002" file="A2009100435920003C2.tif" wi="3" he="5" top= "55" left = "99" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>进行选主元操作,即找出绝对值最大的数作为该列主元u1,1,若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在寄存器piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 id="icf0003" file="A2009100435920003C3.tif" wi="3" he="5" top= "83" left = "111" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,1,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;3.1.2第一从处理单元的数据通路控制模块把第2列数 id="icf0004" file="A2009100435920003C4.tif" wi="4" he="5" top= "102" left = "134" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,2,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据 id="icf0005" file="A2009100435920003C5.tif" wi="4" he="5" top= "129" left = "146" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,2,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0006" file="A2009100435920003C6.tif" wi="4" he="5" top= "140" left = "117" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0007" file="A2009100435920003C7.tif" wi="3" he="5" top= "140" left = "132" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与a1,2的乘积,结果 id="icf0008" file="A2009100435920003C8.tif" wi="6" he="5" top= "140" left = "178" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(a1i,2,2≤i≤M′)通过FIFO发送给第二从处理单元;3.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数 id="icf0009" file="A2009100435920003C9.tif" wi="4" he="5" top= "168" left = "74" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,3,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据 id="icf0010" file="A2009100435920003C10.tif" wi="4" he="5" top= "195" left = "101" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,3,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0011" file="A2009100435920003C11.tif" wi="4" he="5" top= "206" left = "61" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0012" file="A2009100435920003C12.tif" wi="3" he="5" top= "206" left = "75" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与a1,3的乘积,结果 id="icf0013" file="A2009100435920003C13.tif" wi="5" he="5" top= "206" left = "116" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(a1i,3,2≤i≤M′)通过FIFO发送给第二从处理单元;3.1.4第一从处理单元针对其它列 id="icf0014" file="A2009100435920003C14.tif" wi="4" he="6" top= "225" left = "95" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,j,1≤i≤M′),其中4≤j≤M′,重复3.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u1,j,其它数据 id="icf0015" file="A2009100435920003C15.tif" wi="4" he="6" top= "254" left = "39" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,j,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0016" file="A2009100435920003C16.tif" wi="4" he="6" top= "254" left = "163" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0017" file="A2009100435920003C17.tif" wi="3" he="5" top= "254" left = "177" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与a1,j的乘积,结果 id="icf0018" file="A2009100435920003C18.tif" wi="6" he="5" top= "264" left = "55" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(a1i,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列数 id="icf0019" file="A2009100435920004C1.tif" wi="8" he="5" top= "78" left = "23" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k,k≤i≤M′)放置在第一局部存储器,由选主元模块对 id="icf0020" file="A2009100435920004C2.tif" wi="8" he="5" top= "78" left = "144" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>进行选主元操作,找出绝对值最大的数作为该列主元uk,k;若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 id="icf0021" file="A2009100435920004C3.tif" wi="4" he="5" top= "106" left = "143" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,k,k+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;3.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数 id="icf0022" file="A2009100435920004C4.tif" wi="10" he="5" top= "133" left = "22" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k+1,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为uk,k+1,其它数据 id="icf0023" file="A2009100435920004C5.tif" wi="10" he="5" top= "160" left = "54" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k+1,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0024" file="A2009100435920004C6.tif" wi="10" he="5" top= "170" left = "35" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0025" file="A2009100435920004C7.tif" wi="3" he="5" top= "171" left = "56" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与ak-1k,k+1的乘积,结果 id="icf0026" file="A2009100435920004C8.tif" wi="8" he="5" top= "170" left = "105" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aki,k+1,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;3.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数 id="icf0027" file="A2009100435920004C9.tif" wi="11" he="5" top= "197" left = "87" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k+2,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为uk,k+2,其它数据 id="icf0028" file="A2009100435920004C10.tif" wi="11" he="5" top= "224" left = "128" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k+2,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0029" file="A2009100435920004C11.tif" wi="11" he="5" top= "235" left = "107" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0030" file="A2009100435920004C12.tif" wi="4" he="5" top= "236" left = "128" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与ak-1k,k+2的乘积,结果 id="icf0031" file="A2009100435920004C13.tif" wi="9" he="5" top= "235" left = "176" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aki,k+2,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;3.2.4第k从处理单元针对其它列 id="icf0032" file="A2009100435920004C14.tif" wi="8" he="5" top= "254" left = "95" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,j,k≤i≤M′),其中k+3≤j≤M′,重复3.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为uk,j,其它数据 id="icf0033" file="A2009100435920005C1.tif" wi="8" he="5" top= "29" left = "50" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,j,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0034" file="A2009100435920005C2.tif" wi="8" he="5" top= "40" left = "26" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0035" file="A2009100435920005C3.tif" wi="4" he="5" top= "41" left = "45" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与ak-1k,k+2的乘积,结果 id="icf0036" file="A2009100435920005C4.tif" wi="6" he="5" top= "40" left = "93" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aki,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列数 id="icf0037" file="A2009100435920005C5.tif" wi="9" he="5" top= "100" left = "22" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aP-1i,P,P≤i≤M′)放置在第一局部存储器,由选主元模块对 id="icf0038" file="A2009100435920005C6.tif" wi="8" he="5" top= "101" left = "150" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>进行选主元操作,找出绝对值最大的数作为该列主元uP,P;若主元不在该列的第P个位置,由选主元模块将主元与该列第P个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 id="icf0039" file="A2009100435920005C7.tif" wi="4" he="5" top= "128" left = "180" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,P,P+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;3.3.2第P从处理单元的数据通路控制模块把第P-1从处理单元送来的第2列数 id="icf0040" file="A2009100435920005C8.tif" wi="11" he="5" top= "155" left = "22" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aP-1i,P+1,P≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第P位置的数据,第二局部存储器第P位置新的数据送往第四局部存储器并保存在第P+1个位置,记为uP,P+1,其它数据 id="icf0041" file="A2009100435920005C9.tif" wi="11" he="5" top= "182" left = "57" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aP-1i,P+1,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0042" file="A2009100435920005C10.tif" wi="10" he="5" top= "193" left = "39" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0043" file="A2009100435920005C11.tif" wi="4" he="5" top= "194" left = "59" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与aP-1P,P+1的乘积,结果 id="icf0044" file="A2009100435920005C12.tif" wi="9" he="5" top= "193" left = "110" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aPi,P+1,P+1≤i≤M′)通过FIFO发送给主处理单元;3.3.3第P从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第P-1从处理单元送来的第3列数 id="icf0045" file="A2009100435920005C13.tif" wi="12" he="5" top= "220" left = "87" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aP-1i,P+2,P≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第P位置的数据,第三局部存储器第P位置新的数据送往第四局部存储器并保存在第P+2个位置,记为uP,P+2,其它数据 id="icf0046" file="A2009100435920005C14.tif" wi="12" he="5" top= "247" left = "173" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aP-1i,P+2,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0047" file="A2009100435920005C15.tif" wi="12" he="5" top= "257" left = "154" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0048" file="A2009100435920005C16.tif" wi="4" he="5" top= "258" left = "176" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与aP-1P,P+2的乘积,结果 id="icf0049" file="A2009100435920005C17.tif" wi="9" he="5" top= "267" left = "63" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aPi,P+2,P+1≤i≤M′)通过FIFO发送给主处理单元;3.3.4第P从处理单元针对其它列的数 id="icf0050" file="A2009100435920006C1.tif" wi="9" he="5" top= "29" left = "118" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aP-1i,j,P≤i≤M′),其中P+3≤j≤M′,重复3.3.3中的操作;对于第j+1-P列,数据选择模块交换局部存储器中的piv值所指位置与第P位置的数据,第P位置新的数据送往第四局部存储器并保存在第j个位置,记为uP,j,其它数据 id="icf0051" file="A2009100435920006C2.tif" wi="9" he="5" top= "56" left = "86" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aP-1i,j,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0052" file="A2009100435920006C3.tif" wi="9" he="5" top= "67" left = "60" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0053" file="A2009100435920006C4.tif" wi="4" he="5" top= "68" left = "79" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与aP-1P,P+2的乘积,结果 id="icf0054" file="A2009100435920006C5.tif" wi="6" he="5" top= "67" left = "130" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aPi,j,P+1≤i≤M′)通过FIFO发送给主处理单元;3.4主处理单元的数据接收模块按列接收第P从处理单元的FIFO发送过来的中间结果 id="icf0055" file="A2009100435920006C6.tif" wi="49" he="5" top= "94" left = "25" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>由外部存储控制器存储到外部存储器中,然后,各个从处理单元的运算结果按如下步骤传递给主处理单元,并由主处理单元的外部存储控制器存储到外部存储器中3.4.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器和第四局部存储器中的数据 id="icf0056" file="A2009100435920006C7.tif" wi="3" he="5" top= "129" left = "59" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,1,2≤i≤M′)、 id="icf0057" file="A2009100435920006C8.tif" wi="4" he="5" top= "129" left = "98" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(u1,j,1≤j≤M′)送到第二从处理单元的结果发送模块;3.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据 id="icf0058" file="A2009100435920006C9.tif" wi="4" he="5" top= "164" left = "90" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,k,k+1≤i≤M′)、 id="icf0059" file="A2009100435920006C10.tif" wi="4" he="5" top= "164" left = "135" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(uk,j,k≤j≤M′)送到第k+1从处理单元的结果发送模块;3.4.3第P从处理单元的结果发送模块首先将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,然后将第P从处理单元的第一局部存储器和第四局部存储器中的数据 id="icf0060" file="A2009100435920006C11.tif" wi="4" he="5" top= "199" left = "77" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,P,P+1≤i≤M′)、 id="icf0061" file="A2009100435920006C12.tif" wi="5" he="5" top= "199" left = "125" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(uP,j,P≤j≤M′)送到主处理单元的数据接收模块;3.4.4主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中;3.5主处理单元的全局状态控制模块控制参数发送模块置M′=M′-P,A′=由列向量 id="icf0062" file="A2009100435920006C13.tif" wi="47" he="5" top= "243" left = "22" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>组成的中间结果矩阵,转步骤2;4M′个从处理单元按流水方式对矩阵A′进行处理,由主处理单元将运算结果存入外部存储器,具体步骤如下4.1第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元,第一从处理单元对数据发送模块送来的矩阵A′进行如下操作4.1.1第一从处理单元的数据通路控制模块把矩阵A′的第1列数 id="icf0063" file="A2009100435920007C1.tif" wi="4" he="5" top= "37" left = "152" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,1,1≤i≤M′)放置在第一局部存储器,由选主元模块对 id="icf0064" file="A2009100435920007C2.tif" wi="4" he="5" top= "48" left = "100" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>进行选主元操作,即找出绝对值最大的数作为该列主元u1,1;若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 id="icf0065" file="A2009100435920007C3.tif" wi="3" he="5" top= "76" left = "99" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,1,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;4.1.2第一从处理单元的数据通路控制模块把第2列数 id="icf0066" file="A2009100435920007C4.tif" wi="4" he="5" top= "94" left = "135" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,2,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u1,2,其它数据 id="icf0067" file="A2009100435920007C5.tif" wi="4" he="5" top= "122" left = "144" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,2,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0068" file="A2009100435920007C6.tif" wi="4" he="5" top= "133" left = "116" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0069" file="A2009100435920007C7.tif" wi="3" he="5" top= "133" left = "132" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与a1,2的乘积,结果 id="icf0070" file="A2009100435920007C8.tif" wi="6" he="5" top= "132" left = "179" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(a1i,2,2≤i≤M′)通过FIFO发送给第二从处理单元;4.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数 id="icf0071" file="A2009100435920007C9.tif" wi="4" he="5" top= "161" left = "75" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,3,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u1,3,其它数据 id="icf0072" file="A2009100435920007C10.tif" wi="4" he="5" top= "188" left = "102" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,3,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0073" file="A2009100435920007C11.tif" wi="4" he="5" top= "199" left = "61" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0074" file="A2009100435920007C12.tif" wi="3" he="5" top= "199" left = "76" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与a1,3的乘积,结果 id="icf0075" file="A2009100435920007C13.tif" wi="5" he="5" top= "198" left = "117" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(a1i,3,2≤i≤M′)通过FIFO发送给第二从处理单元;4.1.4第一从处理单元针对其它列 id="icf0076" file="A2009100435920007C14.tif" wi="4" he="6" top= "218" left = "96" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,j,1≤i≤M′),其中4≤j≤M′,重复4.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u1,j,其它数据 id="icf0077" file="A2009100435920007C15.tif" wi="4" he="6" top= "246" left = "40" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ai,j,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将 id="icf0078" file="A2009100435920007C16.tif" wi="4" he="6" top= "247" left = "164" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0079" file="A2009100435920007C17.tif" wi="3" he="5" top= "247" left = "178" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与a1,j的乘积,结果 id="icf0080" file="A2009100435920007C18.tif" wi="6" he="5" top= "257" left = "56" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(a1i,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列数 id="icf0081" file="A2009100435920008C1.tif" wi="8" he="5" top= "70" left = "24" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k,k≤i≤M′)放置在第一局部存储器,由选主元模块对 id="icf0082" file="A2009100435920008C2.tif" wi="8" he="5" top= "70" left = "146" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>进行选主元操作,找出绝对值最大的数作为该列主元uk,k;若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果 id="icf0083" file="A2009100435920008C3.tif" wi="4" he="5" top= "98" left = "144" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,k,k+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;4.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数 id="icf0084" file="A2009100435920008C4.tif" wi="10" he="5" top= "125" left = "24" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k+1,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为uk,k+1,其它数据 id="icf0085" file="A2009100435920008C5.tif" wi="10" he="5" top= "152" left = "55" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k+1,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0086" file="A2009100435920008C6.tif" wi="10" he="5" top= "162" left = "37" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0087" file="A2009100435920008C7.tif" wi="4" he="5" top= "163" left = "57" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与ak-1k,k+1的乘积,结果 id="icf0088" file="A2009100435920008C8.tif" wi="8" he="5" top= "162" left = "106" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aki,k+1,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;4.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数 id="icf0089" file="A2009100435920008C9.tif" wi="11" he="5" top= "189" left = "88" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k+2,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为uk,k+2,其它数据 id="icf0090" file="A2009100435920008C10.tif" wi="11" he="5" top= "216" left = "129" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,k+2,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0091" file="A2009100435920008C11.tif" wi="11" he="5" top= "227" left = "108" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0092" file="A2009100435920008C12.tif" wi="4" he="5" top= "228" left = "130" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与ak-1k,k+2的乘积,结果 id="icf0093" file="A2009100435920008C13.tif" wi="9" he="5" top= "227" left = "178" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aki,k+2,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;4.2.4第k从处理单元针对其它列 id="icf0094" file="A2009100435920008C14.tif" wi="8" he="5" top= "247" left = "96" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,j,k≤i≤M′),其中k+3≤j≤M′,重复4.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为uk,j,其它数据 id="icf0095" file="A2009100435920009C1.tif" wi="8" he="5" top= "29" left = "52" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(ak-1i,j,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将 id="icf0096" file="A2009100435920009C2.tif" wi="8" he="5" top= "40" left = "28" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>减去 id="icf0097" file="A2009100435920009C3.tif" wi="3" he="5" top= "41" left = "46" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>与ak-1k,k+2的乘积,结果 id="icf0098" file="A2009100435920009C4.tif" wi="6" he="5" top= "40" left = "95" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(aki,j,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;4.3第M′从处理单元的参数接收模块从第M′-1从处理单元的参数接收模块接收到参数M′;第M′从处理单元将第M′-1从处理单元送来一行一列即aM′-1M′,M′放置在第一局部存储器,记为uM′,M′;4.4线性计算阵列将运算结果传递给主处理单元的数据接收模块,主处理单元的外部存储控制器将运算结果存储到外部存储器中,最终,运算结果完全存储在外部存储器作为输出,计算结束,具体步骤如下4.4.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器和第四局部存储器中的数据 id="icf0099" file="A2009100435920009C5.tif" wi="3" he="5" top= "119" left = "62" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,1,2≤i≤M′)、 id="icf0100" file="A2009100435920009C6.tif" wi="4" he="5" top= "118" left = "101" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(u1,j,1≤j≤M′)送到第二从处理单元的结果发送模块;4.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据 id="icf0101" file="A2009100435920009C7.tif" wi="4" he="5" top= "154" left = "88" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(li,k,k+1≤i≤M′)、 id="icf0102" file="A2009100435920009C8.tif" wi="4" he="5" top= "154" left = "133" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>(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'和尸的大小,如果 M'>P,状态机进入"接收中间结果"状态,通知数据接收模块接收中间结果,然后 进入"等待运算结束"状态等待线性计算阵列运算结束;如果MS户,状态机直接由 "发送数据"状态进入"等待运算结束"状态;当运算结束,状态机进入"接收运算 结果"状态,通知数据接收模块接收运算结果;数据接收完毕后,如果M、户,状态 机转入"配置参数"状态,向参数发送模块发配置参数命令,参数发送模块置 M'=M'-P,然后状态机进入"发送参数"状态;如果M'S户,转入"空闲"状态, 运算结束。
3. 如权利要求1所述的基于FPGA的列选主元LU分解方法,其特征在于所述所有从处理 单元的4个局部存储器大小设置为M , FIFO深度大于16,局部存储器和FIFO的位 宽与矩阵J的元素一致。
4. 如权利要求1所述的基于FPGA的列选主元LU分解方法,其特征在于所述第一从处理 单元的参数接收模块与主处理单元的参数发送模块、第二从处理单元的参数接收模块 相连,它从主处理单元的参数发送模块接收M',并发送给第二从处理单元的参数接 收模块;第一从处理单元的数据通路控制模块一方面与主处理单元的数据发送模块相 连, 一方面与第一从处理单元中的选主元模块、第一局部存储器、第二局部存储器和 第三局部存储器相连,它将从数据发送模块接收的第1列数据送往选主元模块和第一 局部存储器,其它奇数列数据送往第三局部存储器,偶数列数据送往第二局部存储器; 选主元模块与第一从处理单元的数据通路控制模块、第一局部存储器、浮点除法运算 模块和数据选择模块相连,它对数据通路控制模块送来的数据执行选主元操作,将主 元记录在寄存器pivot中并将pivot的值发送给浮点除法运算模块,同时将主元所在 位置记录在寄存器piv中并将piv的值发送给数据选择模块;浮点除法运算模块与第 一局部存储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主 元以外的所有的数,结果放置在第一局部存储器的原来位置;数据选择模块与第二局 部存储器、第三局部存储器、第四局部存储器、浮点乘加运算模块和选主元模块相连, 它根据选主元模块送来的Piv值交换第二或第三局部存储器中的Piv值所指位置与第一位置的数据,当第二局部存储器处于"工作"状态时,选择第二局部存储器第一位 置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块,当第三局部存储器 处于"工作"状态时,选择第三局部存储器第一个位置的数据送往第四局部存储器, 其它数据送往浮点乘加运算模块;第一从处理单元的浮点乘加运算模块与第一从处理 单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、 第一局部存储器的数据进行运算,将结果送到FIFO中缓存;第一从处理单元的FIFO 是一个先入先出缓存器,与第一从处理单元的浮点乘加运算模块和第二从处理单元的 数据通路控制模块相连,缓存第一从处理单元的浮点乘加运算模块的运算结果,并将 该结果送往第二从处理单元的数据通路控制模块;第一从处理单元的结果发送模块与 第一从处理单元的第一局部存储器、第四局部存储器和第二从处理单元的结果发送模 块相连,将第一局部存储器和第四局部存储器中的数据送到第二从处理单元的结果发 送模块;第A从处理单元的参数接收模块与第A:-l从处理单元的参数接收模块和第 A + l从处理单元的参数接收模块相连,1,它从第A-l从处理单元的参数 接收模块接收参数M',并发送给第A + 1从处理单元的参数接收模块;第A从处理单 元的数据通路控制模块与第/t-l从处理单元的FIF0、第A:从处理单元中的选主元模 块、第一局部存储器、第二局部存储器和第三局部存储器相连,它接收第A-l从处理 单元的FIFO中的数据,将接收的第1列数据送往第A:从处理单元的选主元模块和第 一局部存储器,其它奇数列数据送往第fc从处理单元的第三局部存储器,偶数列数据 送往第A从处理单元的第二局部存储器;第A从处理单元的选主元模块与第Jt从处理 单元的数据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连, 它对数据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并 将pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并 将piv的值发送给数据选择模块;第/t从处理单元的浮点除法运算模块与第一局部存 储器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的 所有的数,结果放置在第一局部存储器的原来位置;第A从处理单元的数据选择模块 与第A从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加 运算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存 储器中的piv值所指位置与第iH立置的数据,当第二局部存储器处于"工作"状态时, 选择第二局部存储器第&位置的数据送往第四局部存储器,其它数据送往浮点乘加运 算模块,当第三局部存储器处于"工作"状态时,选择第三局部存储器第&个位置的数据送往第四局部存储器,其它数据送往浮点乘加运算模块;第A:从处理单元的浮点 乘加运算模块与第A从处理单元的数据选择模块、第一局部存储器和FIFO相连,对 数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓 存;第t从处理单元的FIFO与第yt从处理单元的浮点乘加运算模块和第A: + l从处理单 元的数据通路控制模块相连,缓存第A从处理单元的浮点乘加运算模块的运算结果, 并将结果发送到第A; +1从处理单元的数据通路控制模块;第fc从处理单元的结果发送 模块与第A从处理单元的第一局部存储器、第四局部存储器、第A-l从处理单元的结果发送模块和第A +1从处理单元的结果发送模块相连, 一方面将第A -1从处理单元的 结果发送模块发送来的数据传递给第A + 1从处理单元的结果发送模块, 一方面将第A 从处理单元的第一局部存储器和第四局部存储器中的数据送到第A+1从处理单元的 结果发送模块;第户从处理单元的参数接收模块与第P -1从处理单元的参数接收模块 相连,它从第P-1从处理单元的参数接收模块接收参数M';第户从处理单元的数据 通路控制模块与第尸-l从处理单元的FIF0、第户从处理单元中的选主元模块、第一 局部存储器、第二局部存储器和第三局部存储器相连,它接收第P-l从处理单元的 FIFO中的数据,将接收的第1列数据送往第P从处理单元的选主元模块和第一局部存 储器,其它奇数列数据送往第P从处理单元的第三局部存储器,偶数列数据送往第尸 从处理单元的第二局部存储器;第P从处理单元的选主元模块与第P从处理单元的数 据通路控制模块、第一局部存储器、浮点除法运算模块和数据选择模块相连,它对数 据通路控制模块送来的数据执行选主元操作,将主元记录在寄存器pivot中并将 pivot的值发送给浮点除法运算模块,同时将主元所在位置记录在寄存器piv中并将 Piv的值发送给数据选择模块;第P从处理单元的浮点除法运算模块与第一局部存储 器、选主元模块相连,将选主元模块送来的主元除以第一局部存储器中主元以外的所 有的数,结果放置在第一局部存储器的原来位置;第尸从处理单元的数据选择模块与 第P从处理单元的第二局部存储器、第三局部存储器、第四局部存储器、浮点乘加运 算模块和选主元模块相连,它根据选主元模块送来的piv值交换第二或第三局部存储 器中的piv值所指位置与第P位置的数据,当第二局部存储器处于"工作"状态时, 选择第二局部存储器第iM立置的数据送往第四局部存储器,其它数据送往浮点乘加运 算模块,当第三局部存储器处于"工作"状态时,选择第三局部存储器第P个位置的 数据送往第四局部存储器,其它数据送往浮点乘加运算模块;第P从处理单元的浮点 乘加运算模块与第P从处理单元的数据选择模块、第一局部存储器和FIFO相连,对数据选择模块送来的数据、第一局部存储器的数据进行运算,将结果送到FIFO中缓 存;第P从处理单元的FIFO与主处理单元的数据接收模块相连,用于缓存第户从处理单元的浮点乘加运算模块的运算结果,并将结果送往主处理单元的数据接收模块。 第尸从处理单元的结果发送模块与第p从处理单元的第一周部存储器、第四局部存储 器、第户-l从处理单元的结果发送模块和主处理单元的数据接收模块相连, 一方面将 第尸-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块, 一方面将第p从处理单元的第一局部存储器和第四局部存储器中的数据送到主处理 单元的数据接收模块。
全文摘要
本发明公开了一种基于FPGA的列选主元LU分解方法,要解决的技术问题是降低LU分解的时间复杂度,加快稠密矩阵线性方程组的求解。技术方案是首先构建基于FPGA的由主处理单元和P个从处理单元组成的主从式并行计算系统,由主从式并行计算系统对待分解矩阵进行列选主元LU分解,主处理单元向第一从处理单元发送参数和待分解矩阵,从处理单元按流水方式对矩阵进行处理,处理结果由第P从处理单元传给主处理单元。采用本发明计算精度与不选主元LU分解相比得到很大提高,且运算速度快,其主从式并行计算系统具有可扩展性。
文档编号G06F17/11GK101604306SQ20091004359
公开日2009年12月16日 申请日期2009年6月3日 优先权日2009年6月3日
发明者杰 周, 飞 夏, 姜晶菲, 勇 窦, 邬贵明 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1