发明名称 基于FPGA的列选主元LU分解方法
摘要 本发明公开了一种基于FPGA的列选主元LU分解方法,要解决的技术问题是降低LU分解的时间复杂度,加快稠密矩阵线性方程组的求解。技术方案是首先构建基于FPGA的由主处理单元和P个从处理单元组成的主从式并行计算系统,由主从式并行计算系统对待分解矩阵进行列选主元LU分解,主处理单元向第一从处理单元发送参数和待分解矩阵,从处理单元按流水方式对矩阵进行处理,处理结果由第P从处理单元传给主处理单元。采用本发明计算精度与不选主元LU分解相比得到很大提高,且运算速度快,其主从式并行计算系统具有可扩展性。
申请公布号 CN101604306A 申请公布日期 2009.12.16
申请号 CN200910043592.4 申请日期 2009.06.03
申请人 中国人民解放军国防科学技术大学 发明人 邬贵明;窦勇;夏飞;姜晶菲;周杰
分类号 G06F17/11(2006.01)I;G06F17/16(2006.01)I 主分类号 G06F17/11(2006.01)I
代理机构 国防科技大学专利服务中心 代理人 郭 敏
主权项 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′(a<sub>i,j</sub>,1≤i,j≤M),由数据发送模块发送给第一从处理单元;若M′>P,执行步骤3;若M′≤P,转步骤4;3.P个从处理单元按流水方式对矩阵A′进行处理,由主处理单元将中间结果和运算结果存入外部存储器,具体步骤如下:3.1第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元,第一从处理单元对数据发送模块送来的矩阵A′进行如下操作;3.1.1第一从处理单元的数据通路控制模块把矩阵A′的第1列数<img file="A2009100435920003C1.GIF" wi="48" he="69" />(a<sub>i,1</sub>,1≤i≤M′)放置在第一局部存储器,由选主元模块对<img file="A2009100435920003C2.GIF" wi="47" he="68" />进行选主元操作,即找出绝对值最大的数作为该列主元u<sub>1,1</sub>,若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在寄存器piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果<img file="A2009100435920003C3.GIF" wi="43" he="66" />(l<sub>i,1</sub>,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;3.1.2第一从处理单元的数据通路控制模块把第2列数<img file="A2009100435920003C4.GIF" wi="54" he="70" />(a<sub>i,2</sub>,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u<sub>1,2</sub>,其它数据<img file="A2009100435920003C5.GIF" wi="51" he="67" />(a<sub>i,2</sub>,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920003C6.GIF" wi="52" he="66" />减去<img file="A2009100435920003C7.GIF" wi="43" he="65" />与a<sub>1,2</sub>的乘积,结果<img file="A2009100435920003C8.GIF" wi="71" he="64" />(a<sup>1</sup><sub>i,2</sub>,2≤i≤M′)通过FIFO发送给第二从处理单元;3.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数<img file="A2009100435920003C9.GIF" wi="52" he="68" />(a<sub>i,3</sub>,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u<sub>1,3</sub>,其它数据<img file="A2009100435920003C10.GIF" wi="48" he="67" />(a<sub>i,3</sub>,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920003C11.GIF" wi="49" he="66" />减去<img file="A2009100435920003C12.GIF" wi="42" he="67" />与a<sub>1,3</sub>的乘积,结果<img file="A2009100435920003C13.GIF" wi="70" he="65" />(a<sup>1</sup><sub>i,3</sub>,2≤i≤M′)通过FIFO发送给第二从处理单元;3.1.4第一从处理单元针对其它列<img file="A2009100435920003C14.GIF" wi="54" he="75" />(a<sub>i,j</sub>,1≤i≤M′),其中4≤j≤M′,重复3.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u<sub>1,j</sub>,其它数据<img file="A2009100435920003C15.GIF" wi="51" he="72" />(a<sub>i,j</sub>,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920003C16.GIF" wi="51" he="72" />减去<img file="A2009100435920003C17.GIF" wi="42" he="67" />与a<sub>1,j</sub>的乘积,结果<img file="A2009100435920003C18.GIF" wi="72" he="70" />(a<sup>1</sup><sub>i,j</sub>,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列数<img file="A2009100435920004C1.GIF" wi="99" he="63" />(a<sup>k-1</sup><sub>i,k</sub>,k≤i≤M′)放置在第一局部存储器,由选主元模块对<img file="A2009100435920004C2.GIF" wi="102" he="61" />进行选主元操作,找出绝对值最大的数作为该列主元u<sub>k,k</sub>;若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果<img file="A2009100435920004C3.GIF" wi="48" he="66" />(l<sub>i,k</sub>,k+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;3.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数<img file="A2009100435920004C4.GIF" wi="126" he="63" />(a<sup>k-1</sup><sub>i,k+1</sub>,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为u<sub>k,k+1</sub>,其它数据<img file="A2009100435920004C5.GIF" wi="128" he="61" />(a<sup>k-1</sup><sub>i,k+1</sub>,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920004C6.GIF" wi="126" he="63" />减去<img file="A2009100435920004C7.GIF" wi="47" he="65" />与a<sup>k-1</sup><sub>k,k+1</sub>的乘积,结果<img file="A2009100435920004C8.GIF" wi="101" he="62" />(a<sup>k</sup><sub>i,k+1</sub>,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;3.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数<img file="A2009100435920004C9.GIF" wi="132" he="64" />(a<sup>k-1</sup><sub>i,k+2</sub>,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为u<sub>k,k+2</sub>,其它数据<img file="A2009100435920004C10.GIF" wi="136" he="62" />(a<sup>k-1</sup><sub>i,k+2</sub>,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920004C11.GIF" wi="134" he="61" />减去<img file="A2009100435920004C12.GIF" wi="48" he="66" />与a<sup>k-1</sup><sub>k,k+2</sub>的乘积,结果<img file="A2009100435920004C13.GIF" wi="107" he="64" />(a<sup>k</sup><sub>i,k+2</sub>,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;3.2.4第k从处理单元针对其它列<img file="A2009100435920004C14.GIF" wi="105" he="69" />(a<sup>k-1</sup><sub>i,j</sub>,k≤i≤M′),其中k+3≤j≤M′,重复3.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为u<sub>k,j</sub>,其它数据<img file="A2009100435920005C1.GIF" wi="105" he="69" />(a<sup>k-1</sup><sub>i,j</sub>,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920005C2.GIF" wi="104" he="69" />减去<img file="A2009100435920005C3.GIF" wi="48" he="67" />与a<sup>k-1</sup><sub>k,k+2</sub>的乘积,结果<img file="A2009100435920005C4.GIF" wi="76" he="69" />(a<sup>k</sup><sub>i,j</sub>,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列数<img file="A2009100435920005C5.GIF" wi="107" he="62" />(a<sup>P-1</sup><sub>i,P</sub>,P≤i≤M′)放置在第一局部存储器,由选主元模块对<img file="A2009100435920005C6.GIF" wi="102" he="61" />进行选主元操作,找出绝对值最大的数作为该列主元u<sub>P,P</sub>;若主元不在该列的第P个位置,由选主元模块将主元与该列第P个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果<img file="A2009100435920005C7.GIF" wi="52" he="65" />(l<sub>i,P</sub>,P+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;3.3.2第P从处理单元的数据通路控制模块把第P-1从处理单元送来的第2列数<img file="A2009100435920005C8.GIF" wi="134" he="63" />(a<sup>P-1</sup><sub>i,P+1</sub>,P≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第P位置的数据,第二局部存储器第P位置新的数据送往第四局部存储器并保存在第P+1个位置,记为u<sub>P,P+1</sub>,其它数据<img file="A2009100435920005C9.GIF" wi="138" he="61" />(a<sup>P-1</sup><sub>i,P+1</sub>,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920005C10.GIF" wi="126" he="61" />减去<img file="A2009100435920005C11.GIF" wi="52" he="65" />与a<sup>P-1</sup><sub>P,P+1</sub>的乘积,结果<img file="A2009100435920005C12.GIF" wi="110" he="63" />(a<sup>P</sup><sub>i,P+1</sub>,P+1≤i≤M′)通过FIFO发送给主处理单元;3.3.3第P从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第P-1从处理单元送来的第3列数<img file="A2009100435920005C13.GIF" wi="142" he="62" />(a<sup>P-1</sup><sub>i,P+2</sub>,P≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第P位置的数据,第三局部存储器第P位置新的数据送往第四局部存储器并保存在第P+2个位置,记为u<sub>P,P+2</sub>,其它数据<img file="A2009100435920005C14.GIF" wi="142" he="62" />(a<sup>P-1</sup><sub>i,P+2</sub>,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920005C15.GIF" wi="143" he="62" />减去<img file="A2009100435920005C16.GIF" wi="51" he="66" />与a<sup>P-1</sup><sub>P,P+2</sub>的乘积,结果<img file="A2009100435920005C17.GIF" wi="115" he="62" />(a<sup>P</sup><sub>i,P+2</sub>,P+1≤i≤M′)通过FIFO发送给主处理单元;3.3.4第P从处理单元针对其它列的数<img file="A2009100435920006C1.GIF" wi="109" he="67" />(a<sup>P-1</sup><sub>i,j</sub>,P≤i≤M′),其中P+3≤j≤M′,重复3.3.3中的操作;对于第j+1-P列,数据选择模块交换局部存储器中的piv值所指位置与第P位置的数据,第P位置新的数据送往第四局部存储器并保存在第j个位置,记为u<sub>P,j</sub>,其它数据<img file="A2009100435920006C2.GIF" wi="109" he="69" />(a<sup>P-1</sup><sub>i,j</sub>,P+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920006C3.GIF" wi="109" he="69" />减去<img file="A2009100435920006C4.GIF" wi="52" he="65" />与a<sup>P-1</sup><sub>P,P+2</sub>的乘积,结果<img file="A2009100435920006C5.GIF" wi="82" he="70" />(a<sup>P</sup><sub>i,j</sub>,P+1≤i≤M′)通过FIFO发送给主处理单元;3.4主处理单元的数据接收模块按列接收第P从处理单元的FIFO发送过来的中间结果<img file="A2009100435920006C6.GIF" wi="579" he="64" />由外部存储控制器存储到外部存储器中,然后,各个从处理单元的运算结果按如下步骤传递给主处理单元,并由主处理单元的外部存储控制器存储到外部存储器中:3.4.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器和第四局部存储器中的数据<img file="A2009100435920006C7.GIF" wi="43" he="65" />(l<sub>i,1</sub>,2≤i≤M′)、<img file="A2009100435920006C8.GIF" wi="51" he="67" />(u<sub>1,j</sub>,1≤j≤M′)送到第二从处理单元的结果发送模块;3.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据<img file="A2009100435920006C9.GIF" wi="49" he="66" />(l<sub>i,k</sub>,k+1≤i≤M′)、<img file="A2009100435920006C10.GIF" wi="58" he="66" />(u<sub>k,j</sub>,k≤j≤M′)送到第k+1从处理单元的结果发送模块;3.4.3第P从处理单元的结果发送模块首先将第P-1从处理单元的结果发送模块发送来的数据传递给主处理单元的数据接收模块,然后将第P从处理单元的第一局部存储器和第四局部存储器中的数据<img file="A2009100435920006C11.GIF" wi="53" he="67" />(l<sub>i,P</sub>,P+1≤i≤M′)、<img file="A2009100435920006C12.GIF" wi="62" he="67" />(u<sub>P,j</sub>,P≤j≤M′)送到主处理单元的数据接收模块;3.4.4主处理单元的数据接收模块接收从第P从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中;3.5主处理单元的全局状态控制模块控制参数发送模块置M′=M′-P,A′=由列向量<img file="A2009100435920006C13.GIF" wi="557" he="66" />组成的中间结果矩阵,转步骤2;4M′个从处理单元按流水方式对矩阵A′进行处理,由主处理单元将运算结果存入外部存储器,具体步骤如下:4.1第一从处理单元的参数接收模块从参数发送模块接收到参数M′,传递给第二从处理单元,第一从处理单元对数据发送模块送来的矩阵A′进行如下操作:4.1.1第一从处理单元的数据通路控制模块把矩阵A′的第1列数<img file="A2009100435920007C1.GIF" wi="48" he="69" />(a<sub>i,1</sub>,1≤i≤M′)放置在第一局部存储器,由选主元模块对<img file="A2009100435920007C2.GIF" wi="48" he="69" />进行选主元操作,即找出绝对值最大的数作为该列主元u<sub>1,1</sub>;若主元不在该列的第1个位置,由选主元模块将主元与该列第1个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果<img file="A2009100435920007C3.GIF" wi="42" he="65" />(l<sub>i,1</sub>,2≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;4.1.2第一从处理单元的数据通路控制模块把第2列数<img file="A2009100435920007C4.GIF" wi="55" he="68" />(a<sub>i,2</sub>,1≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第1位置的数据,第二局部存储器第1位置新的数据送往第四局部存储器并保存在第2个位置,记为u<sub>1,2</sub>,其它数据<img file="A2009100435920007C5.GIF" wi="52" he="66" />(a<sub>i,2</sub>,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920007C6.GIF" wi="52" he="66" />减去<img file="A2009100435920007C7.GIF" wi="43" he="65" />与a<sub>1,2</sub>的乘积,结果<img file="A2009100435920007C8.GIF" wi="72" he="65" />(a<sup>1</sup><sub>i,2</sub>,2≤i≤M′)通过FIFO发送给第二从处理单元;4.1.3第一从处理单元的数据通路控制模块在第一从处理单元的浮点乘加运算模块进行计算的同时把第3列数<img file="A2009100435920007C9.GIF" wi="52" he="67" />(a<sub>i,3</sub>,1≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第1位置的数据,第三局部存储器第1位置新的数据送往第四局部存储器并保存在第3个位置,记为u<sub>1,3</sub>,其它数据<img file="A2009100435920007C10.GIF" wi="48" he="66" />(a<sub>i,3</sub>,2≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920007C11.GIF" wi="49" he="66" />减去<img file="A2009100435920007C12.GIF" wi="44" he="67" />与a<sub>1,3</sub>的乘积,结果<img file="A2009100435920007C13.GIF" wi="70" he="66" />(a<sup>1</sup><sub>i,3</sub>,2≤i≤M′)通过FIFO发送给第二从处理单元;4.1.4第一从处理单元针对其它列<img file="A2009100435920007C14.GIF" wi="55" he="75" />(a<sub>i,j</sub>,1≤i≤M′),其中4≤j≤M′,重复4.1.3中的操作;对于第j列,数据选择模块交换第二或第三局部存储器的piv值所指位置与第1位置的数据,第1位置新的数据送往第四局部存储器并保存在第j个位置,记为u<sub>1,j</sub>,其它数据<img file="A2009100435920007C15.GIF" wi="51" he="72" />(a<sub>i,j</sub>,2≤i≤M′)送往浮点乘加运算模块。浮点乘加运算模块将<img file="A2009100435920007C16.GIF" wi="51" he="74" />减去<img file="A2009100435920007C17.GIF" wi="42" he="66" />与a<sub>1,j</sub>的乘积,结果<img file="A2009100435920007C18.GIF" wi="72" he="70" />(a<sup>1</sup><sub>i,j</sub>,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列数<img file="A2009100435920008C1.GIF" wi="99" he="62" />(a<sup>k-1</sup><sub>i,k</sub>,k≤i≤M′)放置在第一局部存储器,由选主元模块对<img file="A2009100435920008C2.GIF" wi="101" he="61" />进行选主元操作,找出绝对值最大的数作为该列主元u<sub>k,k</sub>;若主元不在该列的第k个位置,由选主元模块将主元与该列第k个位置的数进行交换,并将主元原来所在位置记录在piv中;交换后,由浮点除法运算模块将主元除以主元以外的该列所有的数,结果<img file="A2009100435920008C3.GIF" wi="48" he="66" />(l<sub>i,k</sub>,k+1≤i≤M′)放置在该列所有的数在第一局部存储器的原来位置;4.2.2第k从处理单元的数据通路控制模块把第k-1从处理单元送来的第2列数<img file="A2009100435920008C4.GIF" wi="127" he="62" />(a<sup>k-1</sup><sub>i,k+1</sub>,k≤i≤M′)放置在第二局部存储器中,第二局部存储器接收完毕后为“工作”状态,由数据选择模块交换第二局部存储器的piv值所指位置与第k位置的数据,第二局部存储器第k位置新的数据送往第四局部存储器并保存在第k+1个位置,记为u<sub>k,k+1</sub>,其它数据<img file="A2009100435920008C5.GIF" wi="126" he="60" />(a<sup>k-1</sup><sub>i,k+1</sub>,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920008C6.GIF" wi="126" he="62" />减去<img file="A2009100435920008C7.GIF" wi="48" he="66" />与a<sup>k-1</sup><sub>k,k+1</sub>的乘积,结果<img file="A2009100435920008C8.GIF" wi="101" he="62" />(a<sup>k</sup><sub>i,k+1</sub>,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;4.2.3第k从处理单元的数据通路控制模块在浮点乘加运算模块进行计算的同时把第k-1从处理单元送来的第3列数<img file="A2009100435920008C9.GIF" wi="133" he="61" />(a<sup>k-1</sup><sub>i,k+2</sub>,k≤i≤M′)放置在第三局部存储器中,第3列数接收完毕后第三局部存储器为“工作”状态,由数据选择模块交换第三局部存储器的piv值所指位置与第k位置的数据,第三局部存储器第k位置新的数据送往第四局部存储器并保存在第k+2个位置,记为u<sub>k,k+2</sub>,其它数据<img file="A2009100435920008C10.GIF" wi="136" he="63" />(a<sup>k-1</sup><sub>i,k+2</sub>,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920008C11.GIF" wi="133" he="62" />减去<img file="A2009100435920008C12.GIF" wi="48" he="66" />与a<sup>k-1</sup><sub>k,k+2</sub>的乘积,结果<img file="A2009100435920008C13.GIF" wi="108" he="62" />(a<sup>k</sup><sub>i,k+2</sub>,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;4.2.4第k从处理单元针对其它列<img file="A2009100435920008C14.GIF" wi="102" he="68" />(a<sup>k-1</sup><sub>i,j</sub>,k≤i≤M′),其中k+3≤j≤M′,重复4.2.3中的操作;对于第j+1-k列,数据选择模块交换局部存储器中的piv值所指位置与第k位置的数据,第k位置新的数据送往第四局部存储器并保存在第j个位置,记为u<sub>k,j</sub>,其它数据<img file="A2009100435920009C1.GIF" wi="99" he="66" />(a<sup>k-1</sup><sub>i,j</sub>,k+1≤i≤M′)送往浮点乘加运算模块;浮点乘加运算模块将<img file="A2009100435920009C2.GIF" wi="98" he="68" />减去<img file="A2009100435920009C3.GIF" wi="47" he="65" />与a<sup>k-1</sup><sub>k,k+2</sub>的乘积,结果<img file="A2009100435920009C4.GIF" wi="73" he="68" />(a<sup>k</sup><sub>i,j</sub>,k+1≤i≤M′)通过FIFO发送给第k+1从处理单元;4.3第M′从处理单元的参数接收模块从第M′-1从处理单元的参数接收模块接收到参数M′;第M′从处理单元将第M′-1从处理单元送来一行一列即a<sup>M′-1</sup><sub>M′,M′</sub>放置在第一局部存储器,记为u<sub>M′,M′</sub>;4.4线性计算阵列将运算结果传递给主处理单元的数据接收模块,主处理单元的外部存储控制器将运算结果存储到外部存储器中,最终,运算结果完全存储在外部存储器作为输出,计算结束,具体步骤如下:4.4.1第一从处理单元的结果发送模块将第一从处理单元的第一局部存储器和第四局部存储器中的数据<img file="A2009100435920009C5.GIF" wi="42" he="66" />(l<sub>i,1</sub>,2≤i≤M′)、<img file="A2009100435920009C6.GIF" wi="51" he="67" />(u<sub>1,j</sub>,1≤j≤M′)送到第二从处理单元的结果发送模块;4.4.2第k从处理单元的结果发送模块首先将第k-1从处理单元的结果发送模块发送来的数据传递给第k+1从处理单元的结果发送模块,然后将第k从处理单元的第一局部存储器和第四局部存储器中的数据<img file="A2009100435920009C7.GIF" wi="50" he="68" />(l<sub>i,k</sub>,k+1≤i≤M′)、<img file="A2009100435920009C8.GIF" wi="59" he="68" />(u<sub>k,j</sub>,k≤j≤M′)送到第k+1从处理单元的结果发送模块;4.4.3第M′从处理单元的结果发送模块首先将第M′-1从处理单元的结果发送模块发送来的数据传递给第M′+1从处理单元的结果发送模块,然后将第M′从处理单元的第一局部存储器的数据u<sub>M′,M′</sub>送到第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从处理单元的结果发送模块发送过来的各个从处理单元的运算结果,由外部存储控制器存储到外部存储器中。
地址 410073湖南省长沙市砚瓦池正街47号