午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

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

文檔序號:6482202閱讀:674來源:國知局
專利名稱:基于fpga的列選主元lu分解方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種矩陣LU (Lower/Upper triangular)分解的方法,具體地 說是一種基于FPGA的稠密矩陣(一般為行列相等的方陣)列選主元LU分解方法。
背景技術(shù)
求解稠密線性方程組在科學(xué)計算和高性能計算領(lǐng)域占有重要的地位,而稠密 矩陣LU分解(簡稱LU分解)是求解稠密線性方程組的重要一步,是影響稠密線 性方程組求解性能最關(guān)鍵一步。LU分解的時間復(fù)雜度很高,約為(2/3)w3,占線 性方程組求解系統(tǒng)絕大部分運(yùn)行時間。LU分解分為選主元LU分解和不選主元LU 分解(選主元LU分解最常見的為列選主元LU分解),其中不選主元LU分解不能 保證計算精度和計算正確性,而選主元LU分解卻能夠克服不選主元LU分解的這 些弊病,從而能夠得到廣泛運(yùn)用。
給定矩陣^,選主元LU分解表示為iM-Z^,其中P為一個置換矩陣,丄為 一個對角線元素為1的下三角矩陣,C/為一個上三角矩陣。丄的對角線元素都為 1,不需要保存,Z的其它元素與t/組合在一起形成結(jié)果矩陣。采用通用處理器 實現(xiàn)列選主元LU分解,由于其運(yùn)算能力有限,無法取得很高的計算性能,其計 算效率(計算功耗比)也相當(dāng)?shù)?。而隨著FPGA (現(xiàn)場可編程門陣列)的快速發(fā) 展,各大公司已經(jīng)開發(fā)出集成大量邏輯單元的高性能、低功耗FPGA芯片。當(dāng)今 FPGA芯片在0.65nrn工藝下已經(jīng)能夠?qū)崿F(xiàn)上千萬門級的設(shè)計,使FPGA芯片成 為實現(xiàn)計算密集型應(yīng)用的理想的高性能、低功耗計算平臺。
然而,國內(nèi)外從未報道過基于FPGA進(jìn)行選主元LU分解的方法,僅出現(xiàn)了一 些基于FPGA的不選主元的LU分解方法。比如,2003年S. Choi等人提出了基 于分塊的不選主元LU分解設(shè)計,具有低功耗的優(yōu)點;2004年G. Govindu等人 提出了一種基于FPGA的不選主元LU分解的高性能結(jié)構(gòu),基于一個循環(huán)線性陣列 來減少計算延遲;2007年T. Hauser等人提出了一種不選主元LU分解的多FPGA 計算系統(tǒng),實現(xiàn)了基于星形拓?fù)浣Y(jié)構(gòu)的多FPGA平臺。不選主元LU分解始終不能克服其計算精度方面的缺陷,這些基于FPGA的不選主元LU分解在遇到奇異矩陣 時往往會導(dǎo)致計算失敗。
如何利用FPGA實現(xiàn)選主元LU分解是本領(lǐng)域技術(shù)人員關(guān)注的重要技術(shù)問題。

發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是為避免不選主元Lll分解在計算精度方面的缺
陷,提出一種基于FPGA的列選主元LU分解方法,降低LU分解的時間復(fù)雜度, 從而加快稠密矩陣線性方程組的求解。 本發(fā)明的技術(shù)方案是
第一步,構(gòu)建基于FPGA的主從式并行計算系統(tǒng),主從式并行計算系統(tǒng)由主 處理單元和P (P為正整數(shù),戶>2)個從處理單元組成。主處理單元與外部存 儲器、第一從處理單元、第P從處理單元相連,主處理單元由外部存儲器控制器、 全局狀態(tài)控制模塊、參數(shù)發(fā)送模塊、數(shù)據(jù)發(fā)送模塊和數(shù)據(jù)接收模塊組成。外部存 儲器控制器與外部存儲器、數(shù)據(jù)發(fā)送模塊、數(shù)據(jù)接收模塊相連,對外部存儲器的 讀寫進(jìn)行控制,將從外部存儲器讀入的數(shù)據(jù)送往數(shù)據(jù)發(fā)送模塊,將從數(shù)據(jù)接收模 塊獲得的數(shù)據(jù)寫入外部存儲器;全局狀態(tài)控制模塊與數(shù)據(jù)發(fā)送模塊、數(shù)據(jù)接收模 塊和參數(shù)發(fā)生模塊相連,控制主從式并行計算系統(tǒng)的狀態(tài)轉(zhuǎn)換;數(shù)據(jù)發(fā)送模塊與 外部存儲器控制器、全局狀態(tài)控制模塊、第一從處理單元相連,在全局狀態(tài)控制 模塊的控制下,將從外部存儲器控制器傳來的數(shù)據(jù)送到第一從處理單元;參數(shù)發(fā) 送模塊與全局狀態(tài)控制模塊、第一從處理單元相連,在全局狀態(tài)控制模塊的控制 下,向第一從處理單元發(fā)送參數(shù)M',即當(dāng)前需要處理的矩陣的列數(shù)或行數(shù)(M' 的初始值為矩陣^的行數(shù)或列數(shù)M,列數(shù)=行數(shù));數(shù)據(jù)接收模塊與第P從處理 單元、外部存儲器控制器相連,從第戶從處理單元接收中間結(jié)果矩陣和計算結(jié)果, 并將中間結(jié)果矩陣和計算結(jié)果發(fā)送給外部存儲器控制器。
全局狀態(tài)控制模塊由一個狀態(tài)機(jī)和一個比較器組成,狀態(tài)機(jī)通過信號線與比 較器相連,由"空閑"、"初始化參數(shù)"、"發(fā)送參數(shù)"、"配置參數(shù)"、"發(fā)送數(shù)據(jù)"、 "接收中間結(jié)果"、"等待運(yùn)算結(jié)束"、"接收運(yùn)算結(jié)果"8個狀態(tài)組成。狀態(tài)機(jī)在 主從式并行計算系統(tǒng)復(fù)位之后進(jìn)入"空閑"狀態(tài);當(dāng)主從式并行計算系統(tǒng)開始運(yùn) 行時,進(jìn)入"初始化參數(shù)"狀態(tài),向參數(shù)發(fā)送模塊發(fā)參數(shù)初始化命令,參數(shù)發(fā)送模塊置M'-M;然后狀態(tài)機(jī)進(jìn)入"發(fā)送參數(shù)"狀態(tài),通過參數(shù)發(fā)送模塊對線性 計算陣列需要處理的矩陣大小進(jìn)行配置,即將M'發(fā)送給第一從處理單元;參數(shù) 發(fā)送后,狀態(tài)機(jī)進(jìn)入"發(fā)送數(shù)據(jù)"狀態(tài),通知數(shù)據(jù)發(fā)送模塊將矩陣發(fā)送給線性計 算陣列;比較器比較M'和P的大小,如果M、尸,狀態(tài)機(jī)進(jìn)入"接收中間結(jié)果" 狀態(tài),通知數(shù)據(jù)接收模塊接收中間結(jié)果,然后進(jìn)入"等待運(yùn)算結(jié)束"狀態(tài)等待線 性計算陣列運(yùn)算結(jié)束;如果MSP,狀態(tài)機(jī)直接由"發(fā)送數(shù)據(jù)"狀態(tài)進(jìn)入"等 待運(yùn)算結(jié)束"狀態(tài);當(dāng)運(yùn)算結(jié)束,狀態(tài)機(jī)進(jìn)入"接收運(yùn)算結(jié)果"狀態(tài),通知數(shù)據(jù) 接收模塊接收運(yùn)算結(jié)果;數(shù)據(jù)接收完畢后,如果M、P,狀態(tài)機(jī)轉(zhuǎn)入"配置參數(shù)" 狀態(tài),向參數(shù)發(fā)送模塊發(fā)配置參數(shù)命令,參數(shù)發(fā)送模塊置M'-M'-P,然后狀態(tài) 機(jī)進(jìn)入"發(fā)送參數(shù)"狀態(tài);如果MSP,轉(zhuǎn)入"空閑"狀態(tài),運(yùn)算結(jié)束。
尸個從處理單元組成一維線性計算陣列,負(fù)責(zé)進(jìn)行列選主元LU分解。每個 從處理單元邏輯結(jié)構(gòu)相同,均由參數(shù)接收模塊、數(shù)據(jù)通路控制模塊、浮點乘加運(yùn) 算模塊、浮點除法運(yùn)算模塊、數(shù)據(jù)選擇模塊、選主元模塊、結(jié)果發(fā)送模塊、4個 局部存儲器和FIFO組成,局部存儲器大小設(shè)置為M, FIF0深度大于16,局部 存儲器和FIFO的位寬與矩陣^的元素一致。
第一從處理單元的參數(shù)接收模塊與主處理單元的參數(shù)發(fā)送模塊、第二從處理 單元的參數(shù)接收模塊相連,它從主處理單元的參數(shù)發(fā)送模塊接收M',并發(fā)送給 第二從處理單元的參數(shù)接收模塊。第一從處理單元的數(shù)據(jù)通路控制模塊一方面與 主處理單元的數(shù)據(jù)發(fā)送模塊相連, 一方面與第一從處理單元中的選主元模塊、第 一局部存儲器、第二局部存儲器和第三局部存儲器相連,它將從數(shù)據(jù)發(fā)送模塊接 收的第1列數(shù)據(jù)送往選主元模塊和第一局部存儲器,其它奇數(shù)列數(shù)據(jù)送往第三局 部存儲器,偶數(shù)列數(shù)據(jù)送往第二局部存儲器。第二、第三局部存儲器具有"接收 數(shù)據(jù)"和"工作"兩個狀態(tài),只有"接收數(shù)據(jù)"狀態(tài)的局部存儲器才能接收數(shù)據(jù); 初始時第二局部存儲器為"接收數(shù)據(jù)"狀態(tài),第三局部存儲器為"工作"狀態(tài); 當(dāng)一個局部存儲器處于"工作"時另一個便處于"接收數(shù)據(jù)"狀態(tài),數(shù)據(jù)接收完 畢變?yōu)?工作"狀態(tài)。選主元模塊與第一從處理單元的數(shù)據(jù)通路控制模塊、第一 局部存儲器、浮點除法運(yùn)算模塊和數(shù)據(jù)選擇模塊相連,它對數(shù)據(jù)通路控制模塊送 來的數(shù)據(jù)執(zhí)行選主元操作,將主元記錄在寄存器Pivot中并將pivot的值發(fā)送給 浮點除法運(yùn)算模塊,同時將主元所在位置記錄在寄存器piv中并將piv的值發(fā)送 給數(shù)據(jù)選擇模塊。浮點除法運(yùn)算模塊與第一局部存儲器、選主元模塊相連,將選元以外的所有的數(shù),結(jié)果放置在第 一局部存儲器的原來位置。數(shù)據(jù)選擇模塊與第二局部存儲器、第三局部存儲器、 第四局部存儲器、浮點乘加運(yùn)算模塊和選主元模塊相連,它根據(jù)選主元模塊送來 的piv值交換第二或第三局部存儲器中的piv值所指位置與第一位置的數(shù)據(jù),當(dāng) 第二局部存儲器處于"工作"狀態(tài)時,選擇第二局部存儲器第一位置的數(shù)據(jù)送往 第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊,當(dāng)?shù)谌植看鎯ζ魈幱?工 作"狀態(tài)時,選擇第三局部存儲器第一個位置的數(shù)據(jù)送往第四局部存儲器,其它 數(shù)據(jù)送往浮點乘加運(yùn)算模塊。第一從處理單元的浮點乘加運(yùn)算模塊與第一從處理 單元的數(shù)據(jù)選擇模塊、第一局部存儲器和FIFO相連,對數(shù)據(jù)選擇模塊送來的數(shù) 據(jù)、第一局部存儲器的數(shù)據(jù)進(jìn)行運(yùn)算,將結(jié)果送到FIFO中緩存。第一從處理單 元的FIFO是一個先入先出緩存器,與第一從處理單元的浮點乘加運(yùn)算模塊和第 二從處理單元的數(shù)據(jù)通路控制模塊相連,緩存第一從處理單元的浮點乘加運(yùn)算模 塊的運(yùn)算結(jié)果,并將該結(jié)果送往第二從處理單元的數(shù)據(jù)通路控制模塊。第一從處 理單元的結(jié)果發(fā)送模塊與第一從處理單元的第一局部存儲器、第四局部存儲器和 第二從處理單元的結(jié)果發(fā)送模塊相連,將第一局部存儲器和第四局部存儲器中的 數(shù)據(jù)送到第二從處理單元的結(jié)果發(fā)送模塊。
第丸從處理單元(2S P-1 )的參數(shù)接收模塊與第it — 1從處理單元的參數(shù) 接收模塊和第A +1從處理單元的參數(shù)接收模塊相連,它從第& -1從處理單元的 參數(shù)接收模塊接收參數(shù)M',并發(fā)送給第6 +1從處理單元的參數(shù)接收模塊。第/b從 處理單元的數(shù)據(jù)通路控制模塊與第A:-1從處理單元的FIF0、第fc從處理單元中 的選主元模塊、第一局部存儲器、第二局部存儲器和第三局部存儲器相連,它接 收第A-1從處理單元的FIFO中的數(shù)據(jù),將接收的第1列數(shù)據(jù)送往第A:從處理單 元的選主元模塊和第一局部存儲器,其它奇數(shù)列數(shù)據(jù)送往第A:從處理單元的第三 局部存儲器,偶數(shù)列數(shù)據(jù)送往第A從處理單元的第二局部存儲器。第A從處理單 元的第二、第三局部存儲器具有"接收數(shù)據(jù)"和"工作"兩個狀態(tài),只有"接收 數(shù)據(jù)"狀態(tài)的局部存儲器才能接收數(shù)據(jù);初始時第二局部存儲器為"接收數(shù)據(jù)" 狀態(tài),第三局部存儲器為"工作"狀態(tài);當(dāng)一個局部存儲器處于"工作"時另一 個便處于"接收數(shù)據(jù)"狀態(tài),數(shù)據(jù)接收完畢變?yōu)?工作"狀態(tài)。第&從處理單元 的選主元模塊與第A:從處理單元的數(shù)據(jù)通路控制模塊、第一局部存儲器、浮點除 法運(yùn)算模塊和數(shù)據(jù)選擇模塊相連,它對數(shù)據(jù)通路控制模塊送來的數(shù)據(jù)執(zhí)行選主元操作,將主元記錄在寄存器pivot中并將pivot的值發(fā)送給浮點除法運(yùn)算模塊, 同時將主元所在位置記錄在寄存器Piv中并將piv的值發(fā)送給數(shù)據(jù)選擇模塊。第 A:從處理單元的浮點除法運(yùn)算模塊與第一局部存儲器、選主元模塊相連,將選主 元模塊送來的主元除以第一局部存儲器中主元以外的所有的數(shù),結(jié)果放置在第一 局部存儲器的原來位置。第A從處理單元的數(shù)據(jù)選擇模塊與第A:從處理單元的第 二局部存儲器、第三局部存儲器、第四局部存儲器、浮點乘加運(yùn)算模塊和選主元 模塊相連,它根據(jù)選主元模塊送來的Piv值交換第二或第三局部存儲器中的Piv 值所指位置與第A:位置的數(shù)據(jù),當(dāng)?shù)诙植看鎯ζ魈幱?工作"狀態(tài)時,選擇第 二局部存儲器第A位置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算 模塊,當(dāng)?shù)谌植看鎯ζ魈幱?工作"狀態(tài)時,選擇第三局部存儲器第A:個位置 的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊。第A從處理單元 的浮點乘加運(yùn)算模塊與第A從處理單元的數(shù)據(jù)選擇模塊、第一局部存儲器和FIFO 相連,對數(shù)據(jù)選擇模塊送來的數(shù)據(jù)、第一局部存儲器的數(shù)據(jù)進(jìn)行運(yùn)算,將結(jié)果送 到FIFO中緩存。第A:從處理單元的FIFO與第it從處理單元的浮點乘加運(yùn)算模塊 和第A: +1從處理單元的數(shù)據(jù)通路控制模塊相連,緩存第A從處理單元的浮點乘加 運(yùn)算模塊的運(yùn)算結(jié)果,并將結(jié)果發(fā)送到第A + 1從處理單元的數(shù)據(jù)通路控制模塊。 第A從處理單元的結(jié)果發(fā)送模塊與第A:從處理單元的第一局部存儲器、第四局部 存儲器、第/c-1從處理單元的結(jié)果發(fā)送模塊和第A+1從處理單元的結(jié)果發(fā)送模 塊相連, 一方面將第^-l從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第 A +1從處理單元的結(jié)果發(fā)送模塊, 一方面將第/t從處理單元的第一局部存儲器和 第四局部存儲器中的數(shù)據(jù)送到第it +1從處理單元的結(jié)果發(fā)送模塊。
第P從處理單元的參數(shù)接收模塊與第尸-l從處理單元的參數(shù)接收模塊相 連,它從第戶-1從處理單元的參數(shù)接收模塊接收參數(shù)M'。第尸從處理單元的數(shù) 據(jù)通路控制模塊與第戶-1從處理單元的FIF0、第/>從處理單元中的選主元模塊、 第一局部存儲器、第二局部存儲器和第三局部存儲器相連,它接收第P-l從處 理單元的FIFO中的數(shù)據(jù),將接收的第1列數(shù)據(jù)送往第尸從處理單元的選主元模 塊和第一局部存儲器,其它奇數(shù)列數(shù)據(jù)送往第i 從處理單元的第三局部存儲器, 偶數(shù)列數(shù)據(jù)送往第P從處理單元的第二局部存儲器。第P從處理單元的第二、第 三局部存儲器具有"接收數(shù)據(jù)"和"工作"兩個狀態(tài),只有"接收數(shù)據(jù)"狀態(tài)的 局部存儲器才能接收數(shù)據(jù);初始時第二局部存儲器為"接收數(shù)據(jù)"狀態(tài),第三局部存儲器為"工作"狀態(tài);當(dāng)一個局部存儲器處于"工作"時另一個便處于"接 收數(shù)據(jù)"狀態(tài),數(shù)據(jù)接收完畢變?yōu)?工作"狀態(tài)。第P從處理單元的選主元模塊 與第P從處理單元的數(shù)據(jù)通路控制模塊、第一局部存儲器、浮點除法運(yùn)算模塊和 數(shù)據(jù)選擇模塊相連,它對數(shù)據(jù)通路控制模塊送來的數(shù)據(jù)執(zhí)行選主元操作,將主元 記錄在寄存器pivot中并將pivot的值發(fā)送給浮點除法運(yùn)算模塊,同時將主元所 在位置記錄在寄存器piv中并將piv的值發(fā)送給數(shù)據(jù)選擇模塊。第P從處理單元 的浮點除法運(yùn)算模塊與第一局部存儲器、選主元模塊相連,將選主元模塊送來的 主元除以第一局部存儲器中主元以外的所有的數(shù),結(jié)果放置在第一局部存儲器的 原來位置。第P從處理單元的數(shù)據(jù)選擇模塊與第i5從處理單元的第二局部存儲 器、第三局部存儲器、第四局部存儲器、浮點乘加運(yùn)算模塊和選主元模塊相連, 它根據(jù)選主元模塊送來的piv值交換第二或第三局部存儲器中的pi v值所指位置 與第iM立置的數(shù)據(jù),當(dāng)?shù)诙植看鎯ζ魈幱?工作"狀態(tài)時,選擇第二局部存儲 器第/M立置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊,當(dāng)?shù)?三局部存儲器處于"工作"狀態(tài)時,選擇第三局部存儲器第P個位置的數(shù)據(jù)送往 第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊。第P從處理單元的浮點乘加 運(yùn)算模塊與第尸從處理單元的數(shù)據(jù)選擇模塊、第一局部存儲器和FIFO相連,對 數(shù)據(jù)選擇模塊送來的數(shù)據(jù)、第一局部存儲器的數(shù)據(jù)進(jìn)行運(yùn)算,將結(jié)果送到FIFO 中緩存。第P從處理單元的FIFO與主處理單元的數(shù)據(jù)接收模塊相連,用于緩存 第尸從處理單元的浮點乘加運(yùn)算模塊的運(yùn)算結(jié)果,并將結(jié)果送往主處理單元的數(shù) 據(jù)接收模塊。第P從處理單元的結(jié)果發(fā)送模塊與第戶從處理單元的第一局部存儲 器、第四局部存儲器、第P-1從處理單元的結(jié)果發(fā)送模塊和主處理單元的數(shù)據(jù) 接收模塊相連, 一方面將第P-l從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞 給主處理單元的數(shù)據(jù)接收模塊,一方面將第戶從處理單元的第一局部存儲器和第 四局部存儲器中的數(shù)據(jù)送到主處理單元的數(shù)據(jù)接收模塊。
第二步,由主從式并行計算系統(tǒng)按以下步驟對矩陣j進(jìn)行列選主元LU分解:
1. 主處理單元的全局狀態(tài)控制模塊根據(jù)當(dāng)前要處理的矩陣大小M初始化參 數(shù)M'-M。待分解矩陣^'=」。
2. 主處理單元的參數(shù)發(fā)送模塊把參數(shù)M'發(fā)送給第一從處理單元。主處理單 元的外部存儲器控制器按列從外部存儲器中取出待分解的矩陣,(fl,,,
1《^《M),由數(shù)據(jù)發(fā)送模塊發(fā)送給第一從處理單元。若Af、戶,執(zhí)行步驟3;若M'S尸,轉(zhuǎn)步驟4。
3.尸個從處理單元按流水方式對矩陣J'進(jìn)行處理,由主處理單元將中間結(jié)
果和運(yùn)算結(jié)果存入外部存儲器。具體步驟如下-
3.1第一從處理單元的參數(shù)接收模塊從參數(shù)發(fā)送模塊接收到參數(shù)M',傳遞 給第二從處理單元,第一從處理單元對數(shù)據(jù)發(fā)送模塊送來的矩陣l進(jìn)行如下操

3.1.1第一從處理單元的數(shù)據(jù)通路控制模塊把矩陣^'的第1列數(shù)叾
(氣,,1S/《M')放置在第一局部存儲器,由選主元模塊對^進(jìn)行選主元操作,
即找出絕對值最大的數(shù)作為該列主元Mu。若主元不在該列的第1個位置,由選
主元模塊將主元與該列第1個位置的數(shù)進(jìn)行交換,并將主元原來所在位置記錄在 piv中。交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該列所有的數(shù),結(jié)
果5 (G,2Sz^M')放置在該列所有的數(shù)在第一局部存儲器的原來位置。
3.1.2第一從處理單元的數(shù)據(jù)通路控制模塊把第2列數(shù)^ (a,2,lS/SM')
放置在第二局部存儲器中,第二局部存儲器接收完畢后為"工作"狀態(tài),由數(shù)據(jù) 選擇模塊交換第二局部存儲器的Piv值所指位置與第1位置的數(shù)據(jù),第二局部存 儲器第1位置新的數(shù)據(jù)送往第四局部存儲器并保存在第2個位置,記為"12,其
它數(shù)據(jù)寫(a,2,2^/^M')送往浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將《減
去Z;與氣2的乘積,結(jié)果^1 (Z,2,2SWM')通過FIFO發(fā)送給第二從處理單 元。
3.1. 3第一從處理單元的數(shù)據(jù)通路控制模塊在第一從處理單元的浮點乘加 運(yùn)算模塊進(jìn)行計算的同時把第3列數(shù)X ( a,,3,l S / S M')放置在第三局部存儲器 中,第3列數(shù)接收完畢后第三局部存儲器為"工作"狀態(tài),由數(shù)據(jù)選擇模塊交換 第三局部存儲器的piv值所指位置與第1位置的數(shù)據(jù),第三局部存儲器第1位置
新的數(shù)據(jù)送往第四局部存儲器并保存在第3個位置,記為"13,其它數(shù)據(jù)瓦
(fl,3,2^"M')送往浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將g減去z;與c^
的乘積,結(jié)果K (^,,3,2S/SM')通過FIFO發(fā)送給第二從處理單元。3.1.4第一從處理單元針對其它列^ (",》,1S!^M'),其中4《j、M', 重復(fù)3.1.3中的操作;對于第_/列,數(shù)據(jù)選擇模塊交換第二或第三局部存儲器的 P"值所指位置與第1位置的數(shù)據(jù),第1位置新的數(shù)據(jù)送往第四局部存儲器并保 存在第/個位置,記為"^,其它數(shù)據(jù)巧(c^,2&3M')送往浮點乘加運(yùn)算模
塊。浮點乘加運(yùn)算模塊將可減去1;與~.的乘積,結(jié)果冗"w,2^^Af')通
過FIFO發(fā)送給第二從處理單元。
3. 2第A從處理單元的參數(shù)接收模塊從第A -1從處理單元的參數(shù)接收模塊接 收到參數(shù)M',傳遞給第A + 1從處理單元;當(dāng)?shù)贏-1從處理單元執(zhí)行到它的數(shù)據(jù) 通路控制模塊把第A-2從處理單元(當(dāng);t-2時,指主處理單元)送來的第3列 數(shù)放置在第三局部存儲器時,第A從處理單元開始對第A: -1從處理單元送來的數(shù) 據(jù)進(jìn)行如下操作
3. 2. 1第A從處理單元的數(shù)據(jù)通路控制模塊把第A -1從處理單元送來的第1
列數(shù)^ ^JSKM')放置在第一局部存儲器,由選主元模塊對2^進(jìn)
行選主元操作,找出絕對值最大的數(shù)作為該列主元"w 。若主元不在該列的第A:個
位置,由選主元模塊將主元與該列第A個位置的數(shù)進(jìn)行交換,并將主元原來所在 位置記錄在piv中。交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該列所
有的數(shù),結(jié)果Z; ("A + 1《BM')放置在該列所有的數(shù)在第一局部存儲器的 原來位置。
3. 2. 2第A從處理單元的數(shù)據(jù)通路控制模塊把第A: -1從處理單元送來的第2
列數(shù)?^ (""、w^SKM')放置在第二局部存儲器中,第二局部存儲器接 收完畢后為"工作"狀態(tài),由數(shù)據(jù)選擇模塊交換第二局部存儲器的piv值所指位 置與第&位置的數(shù)據(jù),第二局部存儲器第A位置新的數(shù)據(jù)送往第四局部存儲器并 保存在第A + 1個位置,記為氣4+1,其它數(shù)據(jù)^、+; (a"、w,it + l"《M')送往
浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將F^減去z;與""Vw的乘積,結(jié)果
下乙(a4,,w,A; + l^、M')通過FIFO發(fā)送給第A: + l從處理單元。
3. 2. 3第*從處理單元的數(shù)據(jù)通路控制模塊在浮點乘加運(yùn)算模塊進(jìn)行計算 的同時把第A-1從處理單元送來的第3列數(shù)^、+2 (a4—^+2,ifeSz^M')放置在第三局部存儲器中,第3列數(shù)接收完畢后第三局部存儲器為"工作"狀態(tài),由數(shù) 據(jù)選擇模塊交換第三局部存儲器的piv值所指位置與第/b位置的數(shù)據(jù),第三局部 存儲器第A:位置新的數(shù)據(jù)送往第四局部存儲器并保存在第A + 2個位置,記為
"w+2,其它數(shù)據(jù)P1^ UA—',,"a+i^^M')送往浮點乘加運(yùn)算模塊。浮點
乘加運(yùn)算模塊將5"、+2減去Z;與flMw+2的乘積,結(jié)果 (a^+2, A: +1化Af')通過FIFO發(fā)送給第A: +1從處理單元。
3.2.4第A從處理單元針對其它列?^ ( a"w,y^^M'),其中 A + 3S/SM',重復(fù)3.2.3中的操作;對于第j' + l-A列,數(shù)據(jù)選擇模塊交換局 部存儲器中的piv值所指位置與第/H立置的數(shù)據(jù),第A:位置新的數(shù)據(jù)送往第四局 部存儲器并保存在第J'個位置,記為"^,其它數(shù)據(jù)F^^,A + B/《M')
送往浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將F^減去Z;與""V"2的乘積,結(jié)
果Z^ (fl、,A; + lSiSM')通過FIFO發(fā)送給第A + l從處理單元。
3.3第尸從處理單元的參數(shù)接收模塊從第P-l從處理單元的參數(shù)接收模塊
接收到參數(shù)M';當(dāng)?shù)赑-1從處理單元執(zhí)行到它的數(shù)據(jù)通路控制模塊把第戶-2從
處理單元送來的第3列數(shù)放置在第三局部存儲器中時,第P從處理單元開始對第
尸-l從處理單元送來的數(shù)據(jù)進(jìn)行如下操作
3.3. 1第P從處理單元的數(shù)據(jù)通路控制模塊把第戶-l從處理單元送來的第
1列數(shù)H (Z—^,P《i^M')放置在第一局部存儲器,由選主元模塊對Z^ 進(jìn)行選主元操作,找出絕對值最大的數(shù)作為該列主元^,p。若主元不在該列的第
戶個位置,由選主元模塊將主元與該列第P個位置的數(shù)進(jìn)行交換,并將主元原來 所在位置記錄在piv中。交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該
列所有的數(shù),結(jié)果i; + 放置在該列所有的數(shù)在第一局部存儲
器的原來位置。
3. 3. 2第P從處理單元的數(shù)據(jù)通路控制模塊把第P-1從處理單元送來的第 2列數(shù)I^ (^-V^,P^^M')放置在第二局部存儲器中,第二局部存儲器
接收完畢后為"工作"狀態(tài),由數(shù)據(jù)選擇模塊交換第二局部存儲器的piv值所指 位置與第P位置的數(shù)據(jù),第二局部存儲器第戶位置新的數(shù)據(jù)送往第四局部存儲器并保存在第戶+ l個位置,記為"^+1,其它數(shù)據(jù)5^—V+1 、,M,尸+ 1^'SM')
送往浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將^C減去Z;與y—的乘積,結(jié)果^T (^M^P + l^WM')通過FIFO發(fā)送給主處理單元。
3. 3. 3第P從處理單元的數(shù)據(jù)通路控制模塊在浮點乘加運(yùn)算模塊進(jìn)行計算
的同時把第i5-l從處理單元送來的第3列數(shù)f M V+2,尸&^M')放置在第三局部存儲器中,第3列數(shù)接收完畢后第三局部存儲器為"工作"狀態(tài),由數(shù)據(jù)選擇模塊交換第三局部存儲器的piv值所指位置與第P位置的數(shù)據(jù),第三局部存儲器第P位置新的數(shù)據(jù)送往第四局部存儲器并保存在第戶+ 2個位置,記為
"^+2,其它數(shù)據(jù)P^',,+2,尸+ 1"^71/')送往浮點乘加運(yùn)算模塊。浮點
乘加運(yùn)算模塊將5 減去i;與、P+2的乘積,結(jié)果^(ap,,/>+2,P +1S ! 《M')通過FIFO發(fā)送給主處理單元。
3.3.4第P從處理單元針對其它列的數(shù)^ (flp-'w,i^KM'),其中戶+ 3Sy、M',重復(fù)3.3.3中的操作;對于第/ + 1 —尸歹ij,數(shù)據(jù)選擇模塊交換局部存儲器中的piv值所指位置與第戶位置的數(shù)據(jù),第P位置新的數(shù)據(jù)送往第四局部存儲器并保存在第乂個位置,記為"",其它數(shù)據(jù)F^ (^-、,戶+ B/《M')
送往浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將P^減去i;與V,f+2的乘積,
結(jié)果2^ (a ;,P + l&^M')通過FIFO發(fā)送給主處理單元。
3.4主處理單元的數(shù)據(jù)接收模塊按列接收第P從處理單元的FIFO發(fā)送過來
的中間結(jié)果Z^、 ..... ^7,由外部存儲控制器存儲到外部存儲器中。
然后,各個從處理單元的運(yùn)算結(jié)果按如下步驟傳遞給主處理單元,并由主處理單元的外部存儲控制器存儲到外部存儲器中
3.4.1第一從處理單元的結(jié)果發(fā)送模塊將第一從處理單元的第一局部存儲器
和第四局部存儲器中的數(shù)據(jù)i; ("2"SM')、 ^ ( .,1"^M')送到第二
從處理單元的結(jié)果發(fā)送模塊;
3.4.2第A:從處理單元的結(jié)果發(fā)送模塊首先將第A -1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第t + l從處理單元的結(jié)果發(fā)送模塊,然后將第fc從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù)Z; UaJ + l《/《M')、 k("U,A:S y^M')送到第A + 1從處理單元的結(jié)果發(fā)送模塊;
3. 4. 3第戶從處理單元的結(jié)果發(fā)送模塊首先將第P -1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給主處理單元的數(shù)據(jù)接收模塊,然后將第P從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù)i; (/,,,P + 1S"M')、巧("",P《y《M')送到主處理單元的數(shù)據(jù)接收模塊。
3. 4. 4主處理單元的數(shù)據(jù)接收模塊接收從第P從處理單元的結(jié)果發(fā)送模塊發(fā)送過來的各個從處理單元的運(yùn)算結(jié)果,由外部存儲控制器存儲到外部存儲器中。
3.5主處理單元的全局狀態(tài)控制模塊控制參數(shù)發(fā)送模塊置M'-M'-P。 乂'=
中間結(jié)果矩陣(由列向量Z^、 ..... K組成),轉(zhuǎn)步驟2。
4 M'個從處理單元按流水方式對矩陣v4'進(jìn)行處理,由主處理單元將運(yùn)算結(jié)果存入外部存儲器。具體步驟如下
4. 1第一從處理單元的參數(shù)接收模塊從參數(shù)發(fā)送模塊接收到參數(shù)M',傳遞給第二從處理單元;第一從處理單元對數(shù)據(jù)發(fā)送模塊送來的矩陣力'進(jìn)行如下操作
4.1.1第一從處理單元的數(shù)據(jù)通路控制模塊把矩陣A的第1列數(shù)叾
(flu,lS/SM')放置在第一局部存儲器,由選主元模塊對叾進(jìn)行選主元操作,
即找出絕對值最大的數(shù)作為該列主元w,,,。若主元不在該列的第1個位置,由選
主元模塊將主元與該列第1個位置的數(shù)進(jìn)行交換,并將主元原來所在位置記錄在piv中。交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該列所有的數(shù),結(jié)
果Z; (d,2SKM')放置在該列所有的數(shù)在第一局部存儲器的原來位置。
4.1.2第一從處理單元的數(shù)據(jù)通路控制模塊把第2列數(shù):i; (fl,2,l《,^M,)
放置在第二局部存儲器中,第二局部存儲器接收完畢后為"工作"狀態(tài),由數(shù)據(jù)選擇模塊交換第二局部存儲器的piv值所指位置與第1位置的數(shù)據(jù),第二局部存儲器第l位置新的數(shù)據(jù)送往第四局部存儲器并保存在第2個位置,記為"12,其
它數(shù)據(jù)g (a,,2,2^!'《M')送往浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將耳減去i;與氣2的乘積,結(jié)果J12 (A,2,2^、M')通過FIFO發(fā)送給第二從處理單元。
4. 1.3第一從處理單元的數(shù)據(jù)通路控制模塊在第一從處理單元的浮點乘加
運(yùn)算模塊進(jìn)行計算的同時把第3列數(shù)S (。,,3,1S/SM')放置在第三局部存儲器
中,第3列數(shù)接收完畢后第三局部存儲器為"工作"狀態(tài),由數(shù)據(jù)選擇模塊交換第三局部存儲器的piv值所指位置與第1位置的數(shù)據(jù),第三局部存儲器第1位置
新的數(shù)據(jù)送往第四局部存儲器并保存在第3個位置,記為^3,其它數(shù)據(jù)g(",,3,2&^M')送往浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將瓦減去Z;與"w
的乘積,結(jié)果冗(a、,3,2S!、M')通過FIFO發(fā)送給第二從處理單元。
4. 1.4第一從處理單元針對其它列^ ( .,1^/^71/'),其中4Sy^W,重復(fù)4. 1.3中的操作;對于第J列,數(shù)據(jù)選擇模塊交換第二或第三局部存儲器的Piv值所指位置與第1位置的數(shù)據(jù),第1位置新的數(shù)據(jù)送往第四局部存儲器并保存在第y個位置,記為",,;,其它數(shù)據(jù)《(",,"2SWM')送往浮點乘加運(yùn)算模
塊。浮點乘加運(yùn)算模塊將可減去i;與^的乘積,結(jié)果7 U',j,2&^M')通
過FIFO發(fā)送給第二從處理單元。
4. 2第k從處理單元(2 S k S M'-l)的參數(shù)接收模塊從第A:-1從處理單元的參數(shù)接收模塊接收到參數(shù)M',傳遞給第A: + 1從處理單元;當(dāng)?shù)贏-l從處理單元執(zhí)行到它的數(shù)據(jù)通路控制模塊把第A:-2從處理單元(當(dāng)A:-2時,指主處理單元)送來的第3列數(shù)放置在第三局部存儲器時,第A:從處理單元開始對第A: -1從處理單元送來的數(shù)據(jù)進(jìn)行如下操作
4.2. 1第A從處理單元的數(shù)據(jù)通路控制模塊把第yt-l從處理單元送來的第1
列數(shù)^!V,ASWM')放置在第一局部存儲器,由選主元模塊對^I進(jìn)
行選主元操作,找出絕對值最大的數(shù)作為該列主元"W。若主元不在該列的第it個
位置,由選主元模塊將主元與該列第A:個位置的數(shù)進(jìn)行交換,并將主元原來所在位置記錄在piv中。交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該列所
有的數(shù),結(jié)果5 (/,,,,A: + 1S/SM')放置在該列所有的數(shù)在第一局部存儲器的原來位置。4. 2. 2第A:從處理單元的數(shù)據(jù)通路控制模塊把第& -1從處理單元送來的第2列數(shù)八,Vw,A^^^M')放置在第二局部存儲器中,第二局部存儲器接
收完畢后為"工作"狀態(tài),由數(shù)據(jù)選擇模塊交換第二局部存儲器的Piv值所指位置與第左位置的數(shù)據(jù),第二局部存儲器第A位置新的數(shù)據(jù)送往第四局部存儲器并
保存在第A + 1個位置,記為 4+1,其它數(shù)據(jù)5"、" + 送往
浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將F^減去Z;與y—V,w的乘積,結(jié)果
7: (fl ,w,A + l"、M')通過FIFO發(fā)送給第t + l從處理單元。
4. 2. 3第A:從處理單元的數(shù)據(jù)通路控制模塊在浮點乘加運(yùn)算模塊進(jìn)行計算的同時把第A-l從處理單元送來的第3列數(shù)?^ (fl"^+2^S/^M')放置在第三局部存儲器中,第3列數(shù)接收完畢后第三局部存儲器為"工作"狀態(tài),由數(shù)據(jù)選擇模塊交換第三局部存儲器的piv值所指位置與第&位置的數(shù)據(jù),第三局部存儲器第A:位置新的數(shù)據(jù)送往第四局部存儲器并保存在第A + 2個位置,記為
^,i+2,其它數(shù)據(jù)W—V2V+a + l《"M')送往浮點乘加運(yùn)算模塊。浮點
乘加運(yùn)算模塊將3 2減去z;與a"\i+2的乘積,結(jié)果l
(a V+2 , +1化M')通過FIFO發(fā)送給第A: +1從處理單元。
4.2.4第>t從處理單元針對其它列( ^j&'SM'),其中A + 3《/SM',重復(fù)4.2.3中的操作;對于第y + l —A列,數(shù)據(jù)選擇模塊交換局部存儲器中的piv值所指位置與第A位置的數(shù)據(jù),第/t位置新的數(shù)據(jù)送往第四局部存儲器并保存在第7'個位置,記為"w,其它數(shù)據(jù)^ (""^,"1^"M')送往浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將^減去i;與^—\*+2的乘積,結(jié)
果冗U^A + ld《M')通過FIFO發(fā)送給第^ + l從處理單元。
4. 3第M'從處理單元的參數(shù)接收模塊從第M'-1從處理單元的參數(shù)接收模
塊接收到參數(shù)M';第M'從處理單元將第M'-1從處理單元送來一行一列即
flM'—放置在第一局部存儲器,記為"M.,M,。由于矩陣每經(jīng)過一個從處理單元,
規(guī)模都會變小,第M'從處理單元已沒有結(jié)果送出。
4. 4線性計算陣列將運(yùn)算結(jié)果傳遞給主處理單元的數(shù)據(jù)接收模塊,主處理單元的外部存儲控制器將運(yùn)算結(jié)果存儲到外部存儲器中,最終,運(yùn)算結(jié)果完全存儲在外部存儲器作為輸出,計算結(jié)束。具體步驟如下
4.4.1第一從處理單元的結(jié)果發(fā)送模塊將第一從處理單元的第一局部存儲器
和第四局部存儲器中的數(shù)據(jù)i; (/,i,2《KM')、帀(Wl7,l《)《M')送至條二
從處理單元的結(jié)果發(fā)送模塊;
4.4.2第>t從處理單元的結(jié)果發(fā)送模塊首先將第6-1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第A +1從處理單元的結(jié)果發(fā)送模塊,然后將第A從處理
單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù)ZI (/aA + l《/《M')、巧
(,yt S _/、 )送至!J第A: +1從處理單元的結(jié)果發(fā)送模塊;
4.4.3第M'從處理單元的結(jié)果發(fā)送模塊首先將第M'-l從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第M'+1從處理單元的結(jié)果發(fā)送模塊,然后將第M'從處理單元的第一局部存儲器的數(shù)據(jù)"^,送到第M'+1從處理單元的結(jié)果發(fā)送
模塊;
4.4.5第/7從處理單元(M'+1S/^P-1)的結(jié)果發(fā)送模塊將第/;-l從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第A + 1從處理單元的結(jié)果發(fā)送模塊;
4.4.6第P從處理單元的結(jié)果發(fā)送模塊將第P-l從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給主處理單元的數(shù)據(jù)接收模塊;
4. 4. 7主處理單元的數(shù)據(jù)接收模塊接收從第戶從處理單元的結(jié)果發(fā)送模塊發(fā)送過來的各個從處理單元的運(yùn)算結(jié)果,由外部存儲控制器存儲到外部存儲器中。
采用本發(fā)明可以達(dá)到以下技術(shù)效果
1. 本發(fā)明利用基于FPGA的主從式并行計算系統(tǒng),實現(xiàn)了列選主元LU分解。由于選出的主元作為除數(shù),使計算精度與不選主元LU分解相比得到很大提高。
2. 本發(fā)明從處理單元采用流水化的并行執(zhí)行機(jī)制,在進(jìn)行LU分解時, 一方面各數(shù)據(jù)通路控制模塊在浮點乘加運(yùn)算模塊進(jìn)行計算的同時把前一從處理單元送來的數(shù)放置在第二或第三局部存儲器中, 一方面在前一從處理單元執(zhí)行到第三列數(shù)據(jù)時,后一從處理單元即開始接收前一單元發(fā)送的數(shù)據(jù)。當(dāng)從處理器單元個數(shù)達(dá)到16時,比通用處理器相比執(zhí)行速度快5倍。從處理器單元個數(shù)越多,執(zhí)行速度比通用處理器越快,在設(shè)計主從式并行計算系統(tǒng)時根據(jù)要處理的矩陣大小和FPGA資源約束靈活配置。
3.本發(fā)明的主從式并行計算系統(tǒng)采用一維線性陣列的拓?fù)浣Y(jié)構(gòu),具有可擴(kuò)展性,可根據(jù)實際FPGA芯片的容量和對計算能力的需求,配置不同的從處理單元個數(shù),并且在保證滿足面積和性能需求的同時,能夠降低功耗。


圖l是本發(fā)明的總體流程圖。
圖2是本發(fā)明的主從式并行計算系統(tǒng)邏輯結(jié)構(gòu)圖。
圖3是本發(fā)明主處理單元的全局狀態(tài)控制模塊狀態(tài)轉(zhuǎn)換圖。
具體實施方案
圖1是本發(fā)明的總體流程圖。首先構(gòu)建基于FPGA的主從式并行計算系統(tǒng),主從式并行計算系統(tǒng)由主處理單元和P個從處理單元組成。然后由主從式并行計算系統(tǒng)按以下步驟對待分解矩陣A (",y, la,j、M,且M是正整數(shù))進(jìn)行列
選主元LU分解
1. 主處理單元的全局狀態(tài)控制模塊根據(jù)當(dāng)前要處理的矩陣大小M初始化參數(shù)M'二M。待分解矩陣^=乂。
2. 主處理單元的參數(shù)發(fā)送模塊把參數(shù)M'發(fā)送給第一從處理單元。主處理單元的外部存儲器控制器按列從外部存儲器中取出待分解的矩陣^1S/J《M),由數(shù)據(jù)發(fā)送模塊發(fā)送給第一從處理單元。若M'〉P,執(zhí)行步驟3;否則,轉(zhuǎn)步驟4。
3. 首先,由P個從處理單元按流水方式對矩陣A進(jìn)行處理第一從處理單元的參數(shù)接收模塊從參數(shù)發(fā)送模塊接收到參數(shù)AT ,傳遞給第
二從處理單元,……,第A: (2SA:S尸-1)從處理單元將參數(shù)M'傳遞給第;t + l從處理單元,……,第f從處理單元不再將參數(shù)M'進(jìn)行傳遞;
第一從處理單元對主處理單元送來的矩陣i進(jìn)行選主元、浮點除和浮點乘加等操作,中間結(jié)果通過FIFO傳遞給第二從處理單元,……,第A從處理單元在第6-l從處理單元執(zhí)行到第/t-2從處理單元(當(dāng)Jt-2時,指主處理單元)送來的第3列數(shù)時開始對第A-l從處理單元送來的數(shù)據(jù)進(jìn)行操作,……,第/>從處理單元在第P-l從處理單元執(zhí)行到第P-2從處理單元送來的第3列數(shù)時開始對第/> -1從處理單元送來的數(shù)據(jù)進(jìn)行操作,中間結(jié)果由FIFO發(fā)送給主處理單元。接著,主處理單元的數(shù)據(jù)接收模塊按列接收到第尸從處理單元的FIFO發(fā)送
過來的中間結(jié)果^、 ^、 ...、 7:,由外部存儲控制器存儲到外部存儲器中。
然后,主處理單元的數(shù)據(jù)接收模塊接收從第P從處理單元的結(jié)果發(fā)送模塊發(fā)
送過來的各個從處理單元的運(yùn)算結(jié)果z;、 ^;、 5、仄........z;、巧........
z;、 k,由外部存儲控制器存儲到外部存儲器中。
最后,主處理單元的全局狀態(tài)控制模塊控制參數(shù)發(fā)送模塊置M'=M-戶?!?=中間結(jié)果矩陣(由列向量^、 ..... z^組成),轉(zhuǎn)步驟2。
4.首先,由M'個從處理單元按流水方式對矩陣」'進(jìn)行處理
第一從處理單元的參數(shù)接收模塊從參數(shù)發(fā)送模塊接收到參數(shù)M',傳遞給第二從處理單元,……,第A從處理單元(2s;tSM'-l)將參數(shù)M'傳遞給第A:從處理單元,……,第M'從處理單元不再將參數(shù)M'傳遞給第M'+1從處理單元;
第一從處理單元對主處理單元送來的矩陣,進(jìn)行選主元、浮點除和浮點乘加等操作,中間結(jié)果通過FIFO傳遞給第二從處理單元,……,第/t從處理單元在第it-l從處理單元執(zhí)行到第A-2從處理單元(當(dāng)A:-2時,指主處理單元)送來的第3列數(shù)時開始對第A-1從處理單元送來的數(shù)據(jù)進(jìn)行操作,……,第M'從處理單元將第M'—l從處理單元送來一行一列數(shù)據(jù)放置在第一局部存儲器,沒有中間結(jié)果再傳遞給第M'+l從處理單元或主處理單元。
然后,主處理單元的數(shù)據(jù)接收模塊接收從第尸從處理單元的結(jié)果發(fā)送模塊發(fā)
送過來的各個從處理單元的運(yùn)算結(jié)果A、 ^、z;、^........z;、^........
1/M.,,由外部存儲控制器存儲到外部存儲器中。計算結(jié)束。
圖2是本發(fā)明的主從式并行計算系統(tǒng)邏輯結(jié)構(gòu)圖。原始矩陣存儲在外部存儲器中。主從式并行計算系統(tǒng)由主處理單元和尸(P為正整數(shù),尸>2)個從處理
單元組成。主處理單元與外部存儲器、第一從處理單元、第p從處理單元相連,主處理單元由外部存儲器控制器、全局狀態(tài)控制模塊、參數(shù)發(fā)送模塊、數(shù)據(jù)發(fā)送模塊和數(shù)據(jù)接收模塊組成。外部存儲器控制器與外部存儲器、數(shù)據(jù)發(fā)送模塊、數(shù)據(jù)接收模塊相連,對外部存儲器的讀寫進(jìn)行控制,將從外部存儲器讀入的數(shù)據(jù)送
往數(shù)據(jù)發(fā)送模塊,將從數(shù)據(jù)接收模塊獲得的數(shù)據(jù)寫入外部存儲器;全局狀態(tài)控制模塊與數(shù)據(jù)發(fā)送模塊、數(shù)據(jù)接收模塊和參數(shù)發(fā)生模塊相連,控制主從式并行計算系統(tǒng)的狀態(tài)轉(zhuǎn)換;數(shù)據(jù)發(fā)送模塊與外部存儲器控制器、全局狀態(tài)控制模塊、第一從處理單元相連,在全局狀態(tài)控制模塊的控制下,將從外部存儲器控制器傳來的數(shù)據(jù)送到第一從處理單元;參數(shù)發(fā)送模塊與全局狀態(tài)控制模塊、第一從處理單元相連,在全局狀態(tài)控制模塊的控制下,向第一從處理單元發(fā)送參數(shù)W,即當(dāng)前需要處理的矩陣的列數(shù)或行數(shù)(W的初始值為矩陣4的行數(shù)或列數(shù)^,列數(shù)=行數(shù));數(shù)據(jù)接收模塊與第尸從處理單元、外部存儲器控制器相連,從第P從處理單元接收中間結(jié)果矩陣和計算結(jié)果,并將中間結(jié)果矩陣和計算結(jié)果發(fā)送給外部存儲器控制器。
尸個從處理單元組成一維線性計算陣列,負(fù)責(zé)進(jìn)行列選主元LU分解。每個從處理單元邏輯結(jié)構(gòu)相同,均由參數(shù)接收模塊、數(shù)據(jù)通路控制模塊、浮點乘加運(yùn)算模塊、浮點除法運(yùn)算模塊、數(shù)據(jù)選擇模塊、選主元模塊、結(jié)果發(fā)送模塊、4個局部存儲器和FIF0組成,局部存儲器大小設(shè)置為AT, FIF0深度大于16,局部存儲器和FIFO的位寬與矩陣^的元素一致。
第一從處理單元的參數(shù)接收模塊與主處理單元的參數(shù)發(fā)送模塊、第二從處理單元的參數(shù)接收模塊相連,它從主處理單元的參數(shù)發(fā)送模塊接收M',并發(fā)送給第二從處理單元的參數(shù)接收模塊。第一從處理單元的數(shù)據(jù)通路控制模塊一方面與主處理單元的數(shù)據(jù)發(fā)送模塊相連, 一方面與第一從處理單元中的選主元模塊、第一局部存儲器、第二局部存儲器和第三局部存儲器相連,它將從數(shù)據(jù)發(fā)送模塊接收的第1列數(shù)據(jù)送往選主元模塊和第一局部存儲器,其它奇數(shù)列數(shù)據(jù)送往第三局部存儲器,偶數(shù)列數(shù)據(jù)送往第二局部存儲器。第二、第三局部存儲器具有"接收數(shù)據(jù)"和"工作"兩個狀態(tài),只有"接收數(shù)據(jù)"狀態(tài)的局部存儲器才能接收數(shù)據(jù);初始時第二局部存儲器為"接收數(shù)據(jù)"狀態(tài),第三局部存儲器為"工作"狀態(tài);當(dāng)一個局部存儲器處于"工作"時另一個便處于"接收數(shù)據(jù)"狀態(tài),數(shù)據(jù)接收完畢變?yōu)?工作"狀態(tài)。選主元模塊與第一從處理單元的數(shù)據(jù)通路控制模塊、第一局部存儲器、浮點除法運(yùn)算模塊和數(shù)據(jù)選擇模塊相連,它對數(shù)據(jù)通路控制模塊送來的數(shù)據(jù)執(zhí)行選主元操作,將主元記錄在寄存器pivot中并將pivot的值發(fā)送給浮點除法運(yùn)算模塊,同時將主元所在位置記錄在寄存器piv中并將piv的值發(fā)送給數(shù)據(jù)選擇模塊。浮點除法運(yùn)算模塊與第一局部存儲器、選主元模塊相連,將選主元模塊送來的主元除以第一局部存儲器中主元以外的所有的數(shù),結(jié)果放置在第一局部存儲器的原來位置。數(shù)據(jù)選擇模塊與第二局部存儲器、第三局部存儲器、第四局部存儲器、浮點乘加運(yùn)算模塊和選主元模塊相連,它根據(jù)選主元模塊送來的piv值交換第二或第三局部存儲器中的piv值所指位置與第一位置的數(shù)據(jù),當(dāng)?shù)诙植看鎯ζ魈幱?工作"狀態(tài)時,選擇第二局部存儲器第一位置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊,當(dāng)?shù)谌植看鎯ζ魈幱?工作"狀態(tài)時,選擇第三局部存儲器第一個位置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊。第一從處理單元的浮點乘加運(yùn)算模塊與第一從處理單元的數(shù)據(jù)選擇模塊、第一局部存儲器和FIFO相連,對數(shù)據(jù)選擇模塊送來的數(shù)據(jù)、第一局部存儲器的數(shù)據(jù)進(jìn)行運(yùn)算,將結(jié)果送到FIFO中緩存。第一從處理單元的FIFO是一個先入先出緩存器,與第一從處理單元的浮點乘加運(yùn)算模塊和第二從處理單元的數(shù)據(jù)通路控制模塊相連,緩存第一從處理單元的浮點乘加運(yùn)算模塊的運(yùn)算結(jié)果,并將該結(jié)果送往第二從處理單元的數(shù)據(jù)通路控制模塊。第一從處理單元的結(jié)果發(fā)送模塊與第一從處理單元的第一局部存儲器、第四局部存儲器和第二從處理單元的結(jié)果發(fā)送模塊相連,將第一局部存儲器和第四局部存儲器中的數(shù)據(jù)送到第二從處理單元的結(jié)果發(fā)送模塊。
第A從處理單元(2《A S戶-1 )的參數(shù)接收模塊與第-1從處理單元的參數(shù)接收模塊和第A +1從處理單元的參數(shù)接收模塊相連,它從第& -1從處理單元的參數(shù)接收模塊接收參數(shù)M',并發(fā)送給第A +1從處理單元的參數(shù)接收模塊。第A:從處理單元的數(shù)據(jù)通路控制模塊與第A-1從處理單元的FIF0、第A:從處理單元中的選主元模塊、第一局部存儲器、第二局部存儲器和第三局部存儲器相連,它接收第/t-l從處理單元的FIFO中的數(shù)據(jù),將接收的第1列數(shù)據(jù)送往第A:從處理單元的選主元模塊和第一局部存儲器,其它奇數(shù)列數(shù)據(jù)送往第A從處理單元的第三局部存儲器,偶數(shù)列數(shù)據(jù)送往第^從處理單元的第二局部存儲器。第A從處理單元的第二、第三局部存儲器具有"接收數(shù)據(jù)"和"工作"兩個狀態(tài),只有"接收數(shù)據(jù)"狀態(tài)的局部存儲器才能接收數(shù)據(jù);初始時第二局部存儲器為"接收數(shù)據(jù)"狀態(tài),第三局部存儲器為"工作"狀態(tài);當(dāng)一個局部存儲器處于"工作"時另一個便處于"接收數(shù)據(jù)"狀態(tài),數(shù)據(jù)接收完畢變?yōu)?工作"狀態(tài)。第A從處理單元的選主元模塊與第/b從處理單元的數(shù)據(jù)通路控制模塊、第一局部存儲器、浮點除法運(yùn)算模塊和數(shù)據(jù)選擇模塊相連,它對數(shù)據(jù)通路控制模塊送來的數(shù)據(jù)執(zhí)行選主元操作,將主元記錄在寄存器Pivot中并將pivot的值發(fā)送給浮點除法運(yùn)算模塊,同時將主元所在位置記錄在寄存器Piv中并將piv的值發(fā)送給數(shù)據(jù)選擇模塊。第it從處理單元的浮點除法運(yùn)算模塊與第一局部存儲器、選主元模塊相連,將選主元模塊送來的主元除以第一局部存儲器中主元以外的所有的數(shù),結(jié)果放置在第一局部存儲器的原來位置。第A:從處理單元的數(shù)據(jù)選擇模塊與第A:從處理單元的第二局部存儲器、第三局部存儲器、第四局部存儲器、浮點乘加運(yùn)算模塊和選主元模塊相連,它根據(jù)選主元模塊送來的Piv值交換第二或第三局部存儲器中的piv值所指位置與第/H立置的數(shù)據(jù),當(dāng)?shù)诙植看鎯ζ魈幱?工作"狀態(tài)時,選擇第二局部存儲器第A位置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊,當(dāng)?shù)谌植看鎯ζ魈幱?工作"狀態(tài)時,選擇第三局部存儲器第A個位置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊。第A:從處理單元的浮點乘加運(yùn)算模塊與第A從處理單元的數(shù)據(jù)選擇模塊、第一局部存儲器和FIFO相連,對數(shù)據(jù)選擇模塊送來的數(shù)據(jù)、第一局部存儲器的數(shù)據(jù)進(jìn)行運(yùn)算,將結(jié)果送到FIFO中緩存。第A從處理單元的FIFO與第yt從處理單元的浮點乘加運(yùn)算模塊和第A: +1從處理單元的數(shù)據(jù)通路控制模塊相連,緩存第A:從處理單元的浮點乘加運(yùn)算模塊的運(yùn)算結(jié)果,并將結(jié)果發(fā)送到第A: + 1從處理單元的數(shù)據(jù)通路控制模塊。第A:從處理單元的結(jié)果發(fā)送模塊與第*從處理單元的第一局部存儲器、第四局部存儲器、第A-1從處理單元的結(jié)果發(fā)送模塊和第A: + 1從處理單元的結(jié)果發(fā)送模塊相連, 一方面將第A:-l從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第A: + l從處理單元的結(jié)果發(fā)送模塊, 一方面將第A:從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù)送到第it +1從處理單元的結(jié)果發(fā)送模塊。
第尸從處理單元的參數(shù)接收模塊與第戶-1從處理單元的參數(shù)接收模塊相連,它從第P-1從處理單元的參數(shù)接收模塊接收參數(shù)M'。第P從處理單元的數(shù)據(jù)通路控制模塊與第P -1從處理單元的FIF0、第P從處理單元中的選主元模塊、第一局部存儲器、第二局部存儲器和第三局部存儲器相連,它接收第P-l從處理單元的FIFO中的數(shù)據(jù),將接收的第1列數(shù)據(jù)送往第尸從處理單元的選主元模塊和第一局部存儲器,其它奇數(shù)列數(shù)據(jù)送往第P從處理單元的第三局部存儲器,偶數(shù)列數(shù)據(jù)送往第P從處理單元的第二局部存儲器。第P從處理單元的第二、第三局部存儲器具有"接收數(shù)據(jù)"和"工作"兩個狀態(tài),只有"接收數(shù)據(jù),,狀態(tài)的局部存儲器才能接收數(shù)據(jù);初始時第二局部存儲器為"接收數(shù)據(jù)"狀態(tài),第三局部存儲器為"工作"狀態(tài);當(dāng)一個局部存儲器處于"工作"時另一個便處于"接收數(shù)據(jù)"狀態(tài),數(shù)據(jù)接收完畢變?yōu)?工作"狀態(tài)。第P從處理單元的選主元模塊與第P從處理單元的數(shù)據(jù)通路控制模塊、第一局部存儲器、浮點除法運(yùn)算模塊和數(shù)據(jù)選擇模塊相連,它對數(shù)據(jù)通路控制模塊送來的數(shù)據(jù)執(zhí)行選主元操作,將主元記錄在寄存器pivot中并將pivot的值發(fā)送給浮點除法運(yùn)算模塊,同時將主元所在位置記錄在寄存器piv中并將piv的值發(fā)送給數(shù)據(jù)選擇模塊。第P從處理單元的浮點除法運(yùn)算模塊與第一局部存儲器、選主元模塊相連,將選主元模塊送來的主元除以第一局部存儲器中主元以外的所有的數(shù),結(jié)果放置在第一局部存儲器的原來位置。第P從處理單元的數(shù)據(jù)選擇模塊與第P從處理單元的第二局部存儲器、第三局部存儲器、第四局部存儲器、浮點乘加運(yùn)算模塊和選主元模塊相連,它根據(jù)選主元模塊送來的Pi v值交換第二或第三局部存儲器中的Piv值所指位置與第尸位置的數(shù)據(jù),當(dāng)?shù)诙植看鎯ζ魈幱?工作"狀態(tài)時,選擇第二局部存儲器第P位置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊,當(dāng)?shù)谌植看鎯ζ魈幱?工作"狀態(tài)時,選擇第三局部存儲器第P個位置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊。第戶從處理單元的浮點乘加運(yùn)算模塊與第尸從處理單元的數(shù)據(jù)選擇模塊、第一局部存儲器和FIFO相連,對數(shù)據(jù)選擇模塊送來的數(shù)據(jù)、第一局部存儲器的數(shù)據(jù)進(jìn)行運(yùn)算,將結(jié)果送到FIFO中緩存。第P從處理單元的FIFO與主處理單元的數(shù)據(jù)接收模塊相連,用于緩存第尸從處理單元的浮點乘加運(yùn)算模塊的運(yùn)算結(jié)果,并將結(jié)果送往主處理單元的數(shù)據(jù)接收模塊。第尸從處理單元的結(jié)果發(fā)送模塊與第P從處理單元的第一局部存儲器、第四局部存儲器、第P-1從處理單元的結(jié)果發(fā)送模塊和主處理單元的數(shù)據(jù)
接收模塊相連, 一方面將第戶-l從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給主處理單元的數(shù)據(jù)接收模塊, 一方面將第P從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù)送到主處理單元的數(shù)據(jù)接收模塊。
圖3是本發(fā)明主處理單元的全局狀態(tài)控制模塊狀態(tài)轉(zhuǎn)換圖。全局狀態(tài)控制模塊由一個狀態(tài)機(jī)和一個比較器組成,狀態(tài)機(jī)通過信號線與比較器相連,由"空閑"、"初始化參數(shù)"、"發(fā)送參數(shù)"、"配置參數(shù)"、"發(fā)送數(shù)據(jù)"、"接收中間結(jié)果"、"等待運(yùn)算結(jié)束"、"接收運(yùn)算結(jié)果"8個狀態(tài)組成。狀態(tài)機(jī)在主從式并行計算系統(tǒng)復(fù)位之后進(jìn)入"空閑"狀態(tài);當(dāng)主從式并行計算系統(tǒng)開始運(yùn)行時,進(jìn)入"初始化參數(shù)"狀態(tài),向參數(shù)發(fā)送模塊發(fā)參數(shù)初始化命令,參數(shù)發(fā)送模塊置W-M;然后狀態(tài)機(jī)進(jìn)入"發(fā)送參數(shù)"狀態(tài),通過參數(shù)發(fā)送模塊對線性計算陣列需要處理的矩陣大小進(jìn)行配置,即將^發(fā)送給第一從處理單元;參數(shù)發(fā)送后,狀態(tài)機(jī)進(jìn)入"發(fā)送數(shù)據(jù)"狀態(tài),通知數(shù)據(jù)發(fā)送模塊將矩陣發(fā)送給線性計算陣列;比較器比較^'和^的大小,如果^'>戶,狀態(tài)機(jī)進(jìn)入"接收中間結(jié)果"狀態(tài),通知數(shù)據(jù)接收模塊接收中間結(jié)果,然后進(jìn)入"等待運(yùn)算結(jié)束"狀態(tài)等待線性計算陣列運(yùn)算結(jié)束;如果MSP,狀態(tài)機(jī)直接由"發(fā)送數(shù)據(jù)"狀態(tài)進(jìn)入"等待運(yùn)算結(jié)束"狀態(tài);當(dāng)運(yùn)算結(jié)束,狀態(tài)機(jī)進(jìn)入"接收運(yùn)算結(jié)果"狀態(tài),通知數(shù)據(jù)接收模塊接收運(yùn)算結(jié)果;數(shù)據(jù)接收完畢后,如果M、P,狀態(tài)機(jī)轉(zhuǎn)入"配置參數(shù)"狀態(tài),向參數(shù)發(fā)送模塊發(fā)配置參數(shù)命令,參數(shù)發(fā)送模塊置M'-M'-戶,然后狀態(tài)機(jī)進(jìn)入"發(fā)送參數(shù)"狀態(tài);如果MS尸,轉(zhuǎn)入"空閑"狀態(tài),運(yùn)算結(jié)束。
權(quán)利要求
1.一種基于FPGA的列選主元LU分解方法,其特征在于包括以下步驟第一步,構(gòu)建基于FPGA的主從式并行計算系統(tǒng),主從式并行計算系統(tǒng)由主處理單元和P個從處理單元組成,P為正整數(shù)且P>2;主處理單元與外部存儲器、第一從處理單元、第P從處理單元相連,主處理單元由外部存儲器控制器、全局狀態(tài)控制模塊、參數(shù)發(fā)送模塊、數(shù)據(jù)發(fā)送模塊和數(shù)據(jù)接收模塊組成;外部存儲器控制器與外部存儲器、數(shù)據(jù)發(fā)送模塊、數(shù)據(jù)接收模塊相連,對外部存儲器的讀寫進(jìn)行控制,將從外部存儲器讀入的數(shù)據(jù)送往數(shù)據(jù)發(fā)送模塊,將從數(shù)據(jù)接收模塊獲得的數(shù)據(jù)寫入外部存儲器;全局狀態(tài)控制模塊與數(shù)據(jù)發(fā)送模塊、數(shù)據(jù)接收模塊和參數(shù)發(fā)生模塊相連,控制主從式并行計算系統(tǒng)的狀態(tài)轉(zhuǎn)換;數(shù)據(jù)發(fā)送模塊與外部存儲器控制器、全局狀態(tài)控制模塊、第一從處理單元相連,在全局狀態(tài)控制模塊的控制下,將從外部存儲器控制器傳來的數(shù)據(jù)送到第一從處理單元;參數(shù)發(fā)送模塊與全局狀態(tài)控制模塊、第一從處理單元相連,在全局狀態(tài)控制模塊的控制下,向第一從處理單元發(fā)送參數(shù)M′即當(dāng)前需要處理的矩陣的列數(shù)或行數(shù);數(shù)據(jù)接收模塊與第P從處理單元、外部存儲器控制器相連,從第P從處理單元接收中間結(jié)果矩陣和計算結(jié)果,并將中間結(jié)果矩陣和計算結(jié)果發(fā)送給外部存儲器控制器;P個從處理單元組成一維線性計算陣列,負(fù)責(zé)進(jìn)行列選主元LU分解,每個從處理單元邏輯結(jié)構(gòu)相同,均由參數(shù)接收模塊、數(shù)據(jù)通路控制模塊、浮點乘加運(yùn)算模塊、浮點除法運(yùn)算模塊、數(shù)據(jù)選擇模塊、選主元模塊、結(jié)果發(fā)送模塊、4個局部存儲器和FIFO組成;4個局部存儲器中的第二、第三局部存儲器具有“接收數(shù)據(jù)”和“工作”兩個狀態(tài),只有“接收數(shù)據(jù)”狀態(tài)的局部存儲器才能接收數(shù)據(jù);初始時第二局部存儲器為“接收數(shù)據(jù)”狀態(tài),第三局部存儲器為“工作”狀態(tài);當(dāng)一個局部存儲器處于“工作”時另一個便處于“接收數(shù)據(jù)”狀態(tài),數(shù)據(jù)接收完畢變?yōu)椤肮ぷ鳌睜顟B(tài);第二步,由主從式并行計算系統(tǒng)按以下步驟對矩陣A進(jìn)行列選主元LU分解1.主處理單元的全局狀態(tài)控制模塊根據(jù)當(dāng)前要處理的矩陣大小M初始化參數(shù)M′=M,M為矩陣A的行數(shù)或列數(shù),列數(shù)=行數(shù),待分解矩陣A′=A;2.主處理單元的參數(shù)發(fā)送模塊把參數(shù)M′發(fā)送給第一從處理單元,主處理單元的外部存儲器控制器按列從外部存儲器中取出待分解的矩陣A′(ai,j,1≤i,j≤M),由數(shù)據(jù)發(fā)送模塊發(fā)送給第一從處理單元;若M′>P,執(zhí)行步驟3;若M′≤P,轉(zhuǎn)步驟4;3.P個從處理單元按流水方式對矩陣A′進(jìn)行處理,由主處理單元將中間結(jié)果和運(yùn)算結(jié)果存入外部存儲器,具體步驟如下3.1第一從處理單元的參數(shù)接收模塊從參數(shù)發(fā)送模塊接收到參數(shù)M′,傳遞給第二從處理單元,第一從處理單元對數(shù)據(jù)發(fā)送模塊送來的矩陣A′進(jìn)行如下操作;3.1.1第一從處理單元的數(shù)據(jù)通路控制模塊把矩陣A′的第1列數(shù) 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"/>進(jìn)行選主元操作,即找出絕對值最大的數(shù)作為該列主元u1,1,若主元不在該列的第1個位置,由選主元模塊將主元與該列第1個位置的數(shù)進(jìn)行交換,并將主元原來所在位置記錄在寄存器piv中;交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該列所有的數(shù),結(jié)果 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′)放置在該列所有的數(shù)在第一局部存儲器的原來位置;3.1.2第一從處理單元的數(shù)據(jù)通路控制模塊把第2列數(shù) 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′)放置在第二局部存儲器中,第二局部存儲器接收完畢后為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第二局部存儲器的piv值所指位置與第1位置的數(shù)據(jù),第二局部存儲器第1位置新的數(shù)據(jù)送往第四局部存儲器并保存在第2個位置,記為u1,2,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第二從處理單元;3.1.3第一從處理單元的數(shù)據(jù)通路控制模塊在第一從處理單元的浮點乘加運(yùn)算模塊進(jìn)行計算的同時把第3列數(shù) 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列數(shù)接收完畢后第三局部存儲器為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第三局部存儲器的piv值所指位置與第1位置的數(shù)據(jù),第三局部存儲器第1位置新的數(shù)據(jù)送往第四局部存儲器并保存在第3個位置,記為u1,3,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第二從處理單元;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′,重復(fù)3.1.3中的操作;對于第j列,數(shù)據(jù)選擇模塊交換第二或第三局部存儲器的piv值所指位置與第1位置的數(shù)據(jù),第1位置新的數(shù)據(jù)送往第四局部存儲器并保存在第j個位置,記為u1,j,其它數(shù)據(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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第二從處理單元;3.2第k從處理單元的參數(shù)接收模塊從第k-1從處理單元的參數(shù)接收模塊接收到參數(shù)M′,傳遞給第k+1從處理單元;當(dāng)?shù)趉-1從處理單元執(zhí)行到它的數(shù)據(jù)通路控制模塊把第k-2從處理單元送來的第3列數(shù)放置在第三局部存儲器時,當(dāng)k=2時,第k-2從處理單元指主處理單元,第k從處理單元開始對第k-1從處理單元送來的數(shù)據(jù)進(jìn)行如下操作3.2.1第k從處理單元的數(shù)據(jù)通路控制模塊把第k-1從處理單元送來的第1列數(shù) 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"/>進(jìn)行選主元操作,找出絕對值最大的數(shù)作為該列主元uk,k;若主元不在該列的第k個位置,由選主元模塊將主元與該列第k個位置的數(shù)進(jìn)行交換,并將主元原來所在位置記錄在piv中;交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該列所有的數(shù),結(jié)果 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′)放置在該列所有的數(shù)在第一局部存儲器的原來位置;3.2.2第k從處理單元的數(shù)據(jù)通路控制模塊把第k-1從處理單元送來的第2列數(shù) 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′)放置在第二局部存儲器中,第二局部存儲器接收完畢后為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第二局部存儲器的piv值所指位置與第k位置的數(shù)據(jù),第二局部存儲器第k位置新的數(shù)據(jù)送往第四局部存儲器并保存在第k+1個位置,記為uk,k+1,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第k+1從處理單元;3.2.3第k從處理單元的數(shù)據(jù)通路控制模塊在浮點乘加運(yùn)算模塊進(jìn)行計算的同時把第k-1從處理單元送來的第3列數(shù) 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列數(shù)接收完畢后第三局部存儲器為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第三局部存儲器的piv值所指位置與第k位置的數(shù)據(jù),第三局部存儲器第k位置新的數(shù)據(jù)送往第四局部存儲器并保存在第k+2個位置,記為uk,k+2,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第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′,重復(fù)3.2.3中的操作;對于第j+1-k列,數(shù)據(jù)選擇模塊交換局部存儲器中的piv值所指位置與第k位置的數(shù)據(jù),第k位置新的數(shù)據(jù)送往第四局部存儲器并保存在第j個位置,記為uk,j,其它數(shù)據(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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第k+1從處理單元;3.3第P從處理單元的參數(shù)接收模塊從第P-1從處理單元的參數(shù)接收模塊接收到參數(shù)M′;當(dāng)?shù)赑-1從處理單元執(zhí)行到它的數(shù)據(jù)通路控制模塊把第P-2從處理單元送來的第3列數(shù)放置在第三局部存儲器中時,第P從處理單元開始對第P-1從處理單元送來的數(shù)據(jù)進(jìn)行如下操作3.3.1第P從處理單元的數(shù)據(jù)通路控制模塊把第P-1從處理單元送來的第1列數(shù) 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"/>進(jìn)行選主元操作,找出絕對值最大的數(shù)作為該列主元uP,P;若主元不在該列的第P個位置,由選主元模塊將主元與該列第P個位置的數(shù)進(jìn)行交換,并將主元原來所在位置記錄在piv中;交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該列所有的數(shù),結(jié)果 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′)放置在該列所有的數(shù)在第一局部存儲器的原來位置;3.3.2第P從處理單元的數(shù)據(jù)通路控制模塊把第P-1從處理單元送來的第2列數(shù) 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′)放置在第二局部存儲器中,第二局部存儲器接收完畢后為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第二局部存儲器的piv值所指位置與第P位置的數(shù)據(jù),第二局部存儲器第P位置新的數(shù)據(jù)送往第四局部存儲器并保存在第P+1個位置,記為uP,P+1,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給主處理單元;3.3.3第P從處理單元的數(shù)據(jù)通路控制模塊在浮點乘加運(yùn)算模塊進(jìn)行計算的同時把第P-1從處理單元送來的第3列數(shù) 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列數(shù)接收完畢后第三局部存儲器為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第三局部存儲器的piv值所指位置與第P位置的數(shù)據(jù),第三局部存儲器第P位置新的數(shù)據(jù)送往第四局部存儲器并保存在第P+2個位置,記為uP,P+2,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給主處理單元;3.3.4第P從處理單元針對其它列的數(shù) 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′,重復(fù)3.3.3中的操作;對于第j+1-P列,數(shù)據(jù)選擇模塊交換局部存儲器中的piv值所指位置與第P位置的數(shù)據(jù),第P位置新的數(shù)據(jù)送往第四局部存儲器并保存在第j個位置,記為uP,j,其它數(shù)據(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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給主處理單元;3.4主處理單元的數(shù)據(jù)接收模塊按列接收第P從處理單元的FIFO發(fā)送過來的中間結(jié)果 id="icf0055" file="A2009100435920006C6.tif" wi="49" he="5" top= "94" left = "25" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/>由外部存儲控制器存儲到外部存儲器中,然后,各個從處理單元的運(yùn)算結(jié)果按如下步驟傳遞給主處理單元,并由主處理單元的外部存儲控制器存儲到外部存儲器中3.4.1第一從處理單元的結(jié)果發(fā)送模塊將第一從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù) 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′)送到第二從處理單元的結(jié)果發(fā)送模塊;3.4.2第k從處理單元的結(jié)果發(fā)送模塊首先將第k-1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第k+1從處理單元的結(jié)果發(fā)送模塊,然后將第k從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù) 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從處理單元的結(jié)果發(fā)送模塊;3.4.3第P從處理單元的結(jié)果發(fā)送模塊首先將第P-1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給主處理單元的數(shù)據(jù)接收模塊,然后將第P從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù) 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′)送到主處理單元的數(shù)據(jù)接收模塊;3.4.4主處理單元的數(shù)據(jù)接收模塊接收從第P從處理單元的結(jié)果發(fā)送模塊發(fā)送過來的各個從處理單元的運(yùn)算結(jié)果,由外部存儲控制器存儲到外部存儲器中;3.5主處理單元的全局狀態(tài)控制模塊控制參數(shù)發(fā)送模塊置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"/>組成的中間結(jié)果矩陣,轉(zhuǎn)步驟2;4M′個從處理單元按流水方式對矩陣A′進(jìn)行處理,由主處理單元將運(yùn)算結(jié)果存入外部存儲器,具體步驟如下4.1第一從處理單元的參數(shù)接收模塊從參數(shù)發(fā)送模塊接收到參數(shù)M′,傳遞給第二從處理單元,第一從處理單元對數(shù)據(jù)發(fā)送模塊送來的矩陣A′進(jìn)行如下操作4.1.1第一從處理單元的數(shù)據(jù)通路控制模塊把矩陣A′的第1列數(shù) 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"/>進(jìn)行選主元操作,即找出絕對值最大的數(shù)作為該列主元u1,1;若主元不在該列的第1個位置,由選主元模塊將主元與該列第1個位置的數(shù)進(jìn)行交換,并將主元原來所在位置記錄在piv中;交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該列所有的數(shù),結(jié)果 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′)放置在該列所有的數(shù)在第一局部存儲器的原來位置;4.1.2第一從處理單元的數(shù)據(jù)通路控制模塊把第2列數(shù) 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′)放置在第二局部存儲器中,第二局部存儲器接收完畢后為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第二局部存儲器的piv值所指位置與第1位置的數(shù)據(jù),第二局部存儲器第1位置新的數(shù)據(jù)送往第四局部存儲器并保存在第2個位置,記為u1,2,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第二從處理單元;4.1.3第一從處理單元的數(shù)據(jù)通路控制模塊在第一從處理單元的浮點乘加運(yùn)算模塊進(jìn)行計算的同時把第3列數(shù) 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列數(shù)接收完畢后第三局部存儲器為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第三局部存儲器的piv值所指位置與第1位置的數(shù)據(jù),第三局部存儲器第1位置新的數(shù)據(jù)送往第四局部存儲器并保存在第3個位置,記為u1,3,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第二從處理單元;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′,重復(fù)4.1.3中的操作;對于第j列,數(shù)據(jù)選擇模塊交換第二或第三局部存儲器的piv值所指位置與第1位置的數(shù)據(jù),第1位置新的數(shù)據(jù)送往第四局部存儲器并保存在第j個位置,記為u1,j,其它數(shù)據(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′)送往浮點乘加運(yùn)算模塊。浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第二從處理單元;4.2第k從處理單元(2≤k≤M′-1)的參數(shù)接收模塊從第k-1從處理單元的參數(shù)接收模塊接收到參數(shù)M′,傳遞給第k+1從處理單元;當(dāng)?shù)趉-1從處理單元執(zhí)行到它的數(shù)據(jù)通路控制模塊把第k-2從處理單元送來的第3列數(shù)放置在第三局部存儲器時,當(dāng)k=2時,第k-2從處理單元指主處理單元,第k從處理單元開始對第k-1從處理單元送來的數(shù)據(jù)進(jìn)行如下操作4.2.1第k從處理單元的數(shù)據(jù)通路控制模塊把第k-1從處理單元送來的第1列數(shù) 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"/>進(jìn)行選主元操作,找出絕對值最大的數(shù)作為該列主元uk,k;若主元不在該列的第k個位置,由選主元模塊將主元與該列第k個位置的數(shù)進(jìn)行交換,并將主元原來所在位置記錄在piv中;交換后,由浮點除法運(yùn)算模塊將主元除以主元以外的該列所有的數(shù),結(jié)果 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′)放置在該列所有的數(shù)在第一局部存儲器的原來位置;4.2.2第k從處理單元的數(shù)據(jù)通路控制模塊把第k-1從處理單元送來的第2列數(shù) 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′)放置在第二局部存儲器中,第二局部存儲器接收完畢后為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第二局部存儲器的piv值所指位置與第k位置的數(shù)據(jù),第二局部存儲器第k位置新的數(shù)據(jù)送往第四局部存儲器并保存在第k+1個位置,記為uk,k+1,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第k+1從處理單元;4.2.3第k從處理單元的數(shù)據(jù)通路控制模塊在浮點乘加運(yùn)算模塊進(jìn)行計算的同時把第k-1從處理單元送來的第3列數(shù) 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列數(shù)接收完畢后第三局部存儲器為“工作”狀態(tài),由數(shù)據(jù)選擇模塊交換第三局部存儲器的piv值所指位置與第k位置的數(shù)據(jù),第三局部存儲器第k位置新的數(shù)據(jù)送往第四局部存儲器并保存在第k+2個位置,記為uk,k+2,其它數(shù)據(jù) 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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第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′,重復(fù)4.2.3中的操作;對于第j+1-k列,數(shù)據(jù)選擇模塊交換局部存儲器中的piv值所指位置與第k位置的數(shù)據(jù),第k位置新的數(shù)據(jù)送往第四局部存儲器并保存在第j個位置,記為uk,j,其它數(shù)據(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′)送往浮點乘加運(yùn)算模塊;浮點乘加運(yùn)算模塊將 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的乘積,結(jié)果 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發(fā)送給第k+1從處理單元;4.3第M′從處理單元的參數(shù)接收模塊從第M′-1從處理單元的參數(shù)接收模塊接收到參數(shù)M′;第M′從處理單元將第M′-1從處理單元送來一行一列即aM′-1M′,M′放置在第一局部存儲器,記為uM′,M′;4.4線性計算陣列將運(yùn)算結(jié)果傳遞給主處理單元的數(shù)據(jù)接收模塊,主處理單元的外部存儲控制器將運(yùn)算結(jié)果存儲到外部存儲器中,最終,運(yùn)算結(jié)果完全存儲在外部存儲器作為輸出,計算結(jié)束,具體步驟如下4.4.1第一從處理單元的結(jié)果發(fā)送模塊將第一從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù) 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′)送到第二從處理單元的結(jié)果發(fā)送模塊;4.4.2第k從處理單元的結(jié)果發(fā)送模塊首先將第k-1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第k+1從處理單元的結(jié)果發(fā)送模塊,然后將第k從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù) 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從處理單元的結(jié)果發(fā)送模塊;4.4.3第M′從處理單元的結(jié)果發(fā)送模塊首先將第M′-1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第M′+1從處理單元的結(jié)果發(fā)送模塊,然后將第M′從處理單元的第一局部存儲器的數(shù)據(jù)uM′,M′送到第M′+1從處理單元的結(jié)果發(fā)送模塊;4.4.5第h從處理單元(M′+1≤h≤P-1)的結(jié)果發(fā)送模塊將第h-1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第h+1從處理單元的結(jié)果發(fā)送模塊;4.4.6第P從處理單元的結(jié)果發(fā)送模塊將第P-1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給主處理單元的數(shù)據(jù)接收模塊;4.4.7主處理單元的數(shù)據(jù)接收模塊接收從第P從處理單元的結(jié)果發(fā)送模塊發(fā)送過來的各個從處理單元的運(yùn)算結(jié)果,由外部存儲控制器存儲到外部存儲器中。
2. 如權(quán)利要求1所述的基于FPGA的列選主元LU分解方法,其特征在于所述全局狀態(tài)控 制模塊由一個狀態(tài)機(jī)和一個比較器組成,狀態(tài)機(jī)通過信號線與比較器相連,狀態(tài)機(jī)由"空閑"、"初始化參數(shù)"、"發(fā)送參數(shù)"、"配置參數(shù)"、"發(fā)送數(shù)據(jù)"、"接收中間結(jié)果"、"等待運(yùn)算結(jié)束"、"接收運(yùn)算結(jié)果"8個狀態(tài)組成;狀態(tài)機(jī)在主從式并行計算系統(tǒng)復(fù)位之后進(jìn)入"空閑"狀態(tài);當(dāng)主從式并行計算系統(tǒng)開始運(yùn)行時,進(jìn)入"初始化參數(shù)" 狀態(tài),向參數(shù)發(fā)送模塊發(fā)參數(shù)初始化命令,參數(shù)發(fā)送模塊置M'-M;然后狀態(tài)機(jī)進(jìn) 入"發(fā)送參數(shù)"狀態(tài),通過參數(shù)發(fā)送模塊對線性計算陣列需要處理的矩陣大小進(jìn)行配 置,即將M'發(fā)送給第一從處理單元;參數(shù)發(fā)送后,狀態(tài)機(jī)進(jìn)入"發(fā)送數(shù)據(jù)"狀態(tài), 通知數(shù)據(jù)發(fā)送模塊將矩陣發(fā)送給線性計算陣列;比較器比較M'和尸的大小,如果 M'>P,狀態(tài)機(jī)進(jìn)入"接收中間結(jié)果"狀態(tài),通知數(shù)據(jù)接收模塊接收中間結(jié)果,然后 進(jìn)入"等待運(yùn)算結(jié)束"狀態(tài)等待線性計算陣列運(yùn)算結(jié)束;如果MS戶,狀態(tài)機(jī)直接由 "發(fā)送數(shù)據(jù)"狀態(tài)進(jìn)入"等待運(yùn)算結(jié)束"狀態(tài);當(dāng)運(yùn)算結(jié)束,狀態(tài)機(jī)進(jìn)入"接收運(yùn)算 結(jié)果"狀態(tài),通知數(shù)據(jù)接收模塊接收運(yùn)算結(jié)果;數(shù)據(jù)接收完畢后,如果M、戶,狀態(tài) 機(jī)轉(zhuǎn)入"配置參數(shù)"狀態(tài),向參數(shù)發(fā)送模塊發(fā)配置參數(shù)命令,參數(shù)發(fā)送模塊置 M'=M'-P,然后狀態(tài)機(jī)進(jìn)入"發(fā)送參數(shù)"狀態(tài);如果M'S戶,轉(zhuǎn)入"空閑"狀態(tài), 運(yùn)算結(jié)束。
3. 如權(quán)利要求1所述的基于FPGA的列選主元LU分解方法,其特征在于所述所有從處理 單元的4個局部存儲器大小設(shè)置為M , FIFO深度大于16,局部存儲器和FIFO的位 寬與矩陣J的元素一致。
4. 如權(quán)利要求1所述的基于FPGA的列選主元LU分解方法,其特征在于所述第一從處理 單元的參數(shù)接收模塊與主處理單元的參數(shù)發(fā)送模塊、第二從處理單元的參數(shù)接收模塊 相連,它從主處理單元的參數(shù)發(fā)送模塊接收M',并發(fā)送給第二從處理單元的參數(shù)接 收模塊;第一從處理單元的數(shù)據(jù)通路控制模塊一方面與主處理單元的數(shù)據(jù)發(fā)送模塊相 連, 一方面與第一從處理單元中的選主元模塊、第一局部存儲器、第二局部存儲器和 第三局部存儲器相連,它將從數(shù)據(jù)發(fā)送模塊接收的第1列數(shù)據(jù)送往選主元模塊和第一 局部存儲器,其它奇數(shù)列數(shù)據(jù)送往第三局部存儲器,偶數(shù)列數(shù)據(jù)送往第二局部存儲器; 選主元模塊與第一從處理單元的數(shù)據(jù)通路控制模塊、第一局部存儲器、浮點除法運(yùn)算 模塊和數(shù)據(jù)選擇模塊相連,它對數(shù)據(jù)通路控制模塊送來的數(shù)據(jù)執(zhí)行選主元操作,將主 元記錄在寄存器pivot中并將pivot的值發(fā)送給浮點除法運(yùn)算模塊,同時將主元所在 位置記錄在寄存器piv中并將piv的值發(fā)送給數(shù)據(jù)選擇模塊;浮點除法運(yùn)算模塊與第 一局部存儲器、選主元模塊相連,將選主元模塊送來的主元除以第一局部存儲器中主 元以外的所有的數(shù),結(jié)果放置在第一局部存儲器的原來位置;數(shù)據(jù)選擇模塊與第二局 部存儲器、第三局部存儲器、第四局部存儲器、浮點乘加運(yùn)算模塊和選主元模塊相連, 它根據(jù)選主元模塊送來的Piv值交換第二或第三局部存儲器中的Piv值所指位置與第一位置的數(shù)據(jù),當(dāng)?shù)诙植看鎯ζ魈幱?工作"狀態(tài)時,選擇第二局部存儲器第一位 置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊,當(dāng)?shù)谌植看鎯ζ?處于"工作"狀態(tài)時,選擇第三局部存儲器第一個位置的數(shù)據(jù)送往第四局部存儲器, 其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊;第一從處理單元的浮點乘加運(yùn)算模塊與第一從處理 單元的數(shù)據(jù)選擇模塊、第一局部存儲器和FIFO相連,對數(shù)據(jù)選擇模塊送來的數(shù)據(jù)、 第一局部存儲器的數(shù)據(jù)進(jìn)行運(yùn)算,將結(jié)果送到FIFO中緩存;第一從處理單元的FIFO 是一個先入先出緩存器,與第一從處理單元的浮點乘加運(yùn)算模塊和第二從處理單元的 數(shù)據(jù)通路控制模塊相連,緩存第一從處理單元的浮點乘加運(yùn)算模塊的運(yùn)算結(jié)果,并將 該結(jié)果送往第二從處理單元的數(shù)據(jù)通路控制模塊;第一從處理單元的結(jié)果發(fā)送模塊與 第一從處理單元的第一局部存儲器、第四局部存儲器和第二從處理單元的結(jié)果發(fā)送模 塊相連,將第一局部存儲器和第四局部存儲器中的數(shù)據(jù)送到第二從處理單元的結(jié)果發(fā) 送模塊;第A從處理單元的參數(shù)接收模塊與第A:-l從處理單元的參數(shù)接收模塊和第 A + l從處理單元的參數(shù)接收模塊相連,1,它從第A-l從處理單元的參數(shù) 接收模塊接收參數(shù)M',并發(fā)送給第A + 1從處理單元的參數(shù)接收模塊;第A從處理單 元的數(shù)據(jù)通路控制模塊與第/t-l從處理單元的FIF0、第A:從處理單元中的選主元模 塊、第一局部存儲器、第二局部存儲器和第三局部存儲器相連,它接收第A-l從處理 單元的FIFO中的數(shù)據(jù),將接收的第1列數(shù)據(jù)送往第A:從處理單元的選主元模塊和第 一局部存儲器,其它奇數(shù)列數(shù)據(jù)送往第fc從處理單元的第三局部存儲器,偶數(shù)列數(shù)據(jù) 送往第A從處理單元的第二局部存儲器;第A從處理單元的選主元模塊與第Jt從處理 單元的數(shù)據(jù)通路控制模塊、第一局部存儲器、浮點除法運(yùn)算模塊和數(shù)據(jù)選擇模塊相連, 它對數(shù)據(jù)通路控制模塊送來的數(shù)據(jù)執(zhí)行選主元操作,將主元記錄在寄存器pivot中并 將pivot的值發(fā)送給浮點除法運(yùn)算模塊,同時將主元所在位置記錄在寄存器piv中并 將piv的值發(fā)送給數(shù)據(jù)選擇模塊;第/t從處理單元的浮點除法運(yùn)算模塊與第一局部存 儲器、選主元模塊相連,將選主元模塊送來的主元除以第一局部存儲器中主元以外的 所有的數(shù),結(jié)果放置在第一局部存儲器的原來位置;第A從處理單元的數(shù)據(jù)選擇模塊 與第A從處理單元的第二局部存儲器、第三局部存儲器、第四局部存儲器、浮點乘加 運(yùn)算模塊和選主元模塊相連,它根據(jù)選主元模塊送來的piv值交換第二或第三局部存 儲器中的piv值所指位置與第iH立置的數(shù)據(jù),當(dāng)?shù)诙植看鎯ζ魈幱?工作"狀態(tài)時, 選擇第二局部存儲器第&位置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn) 算模塊,當(dāng)?shù)谌植看鎯ζ魈幱?工作"狀態(tài)時,選擇第三局部存儲器第&個位置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊;第A:從處理單元的浮點 乘加運(yùn)算模塊與第A從處理單元的數(shù)據(jù)選擇模塊、第一局部存儲器和FIFO相連,對 數(shù)據(jù)選擇模塊送來的數(shù)據(jù)、第一局部存儲器的數(shù)據(jù)進(jìn)行運(yùn)算,將結(jié)果送到FIFO中緩 存;第t從處理單元的FIFO與第yt從處理單元的浮點乘加運(yùn)算模塊和第A: + l從處理單 元的數(shù)據(jù)通路控制模塊相連,緩存第A從處理單元的浮點乘加運(yùn)算模塊的運(yùn)算結(jié)果, 并將結(jié)果發(fā)送到第A; +1從處理單元的數(shù)據(jù)通路控制模塊;第fc從處理單元的結(jié)果發(fā)送 模塊與第A從處理單元的第一局部存儲器、第四局部存儲器、第A-l從處理單元的結(jié)果發(fā)送模塊和第A +1從處理單元的結(jié)果發(fā)送模塊相連, 一方面將第A -1從處理單元的 結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給第A + 1從處理單元的結(jié)果發(fā)送模塊, 一方面將第A 從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù)送到第A+1從處理單元的 結(jié)果發(fā)送模塊;第戶從處理單元的參數(shù)接收模塊與第P -1從處理單元的參數(shù)接收模塊 相連,它從第P-1從處理單元的參數(shù)接收模塊接收參數(shù)M';第戶從處理單元的數(shù)據(jù) 通路控制模塊與第尸-l從處理單元的FIF0、第戶從處理單元中的選主元模塊、第一 局部存儲器、第二局部存儲器和第三局部存儲器相連,它接收第P-l從處理單元的 FIFO中的數(shù)據(jù),將接收的第1列數(shù)據(jù)送往第P從處理單元的選主元模塊和第一局部存 儲器,其它奇數(shù)列數(shù)據(jù)送往第P從處理單元的第三局部存儲器,偶數(shù)列數(shù)據(jù)送往第尸 從處理單元的第二局部存儲器;第P從處理單元的選主元模塊與第P從處理單元的數(shù) 據(jù)通路控制模塊、第一局部存儲器、浮點除法運(yùn)算模塊和數(shù)據(jù)選擇模塊相連,它對數(shù) 據(jù)通路控制模塊送來的數(shù)據(jù)執(zhí)行選主元操作,將主元記錄在寄存器pivot中并將 pivot的值發(fā)送給浮點除法運(yùn)算模塊,同時將主元所在位置記錄在寄存器piv中并將 Piv的值發(fā)送給數(shù)據(jù)選擇模塊;第P從處理單元的浮點除法運(yùn)算模塊與第一局部存儲 器、選主元模塊相連,將選主元模塊送來的主元除以第一局部存儲器中主元以外的所 有的數(shù),結(jié)果放置在第一局部存儲器的原來位置;第尸從處理單元的數(shù)據(jù)選擇模塊與 第P從處理單元的第二局部存儲器、第三局部存儲器、第四局部存儲器、浮點乘加運(yùn) 算模塊和選主元模塊相連,它根據(jù)選主元模塊送來的piv值交換第二或第三局部存儲 器中的piv值所指位置與第P位置的數(shù)據(jù),當(dāng)?shù)诙植看鎯ζ魈幱?工作"狀態(tài)時, 選擇第二局部存儲器第iM立置的數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn) 算模塊,當(dāng)?shù)谌植看鎯ζ魈幱?工作"狀態(tài)時,選擇第三局部存儲器第P個位置的 數(shù)據(jù)送往第四局部存儲器,其它數(shù)據(jù)送往浮點乘加運(yùn)算模塊;第P從處理單元的浮點 乘加運(yùn)算模塊與第P從處理單元的數(shù)據(jù)選擇模塊、第一局部存儲器和FIFO相連,對數(shù)據(jù)選擇模塊送來的數(shù)據(jù)、第一局部存儲器的數(shù)據(jù)進(jìn)行運(yùn)算,將結(jié)果送到FIFO中緩 存;第P從處理單元的FIFO與主處理單元的數(shù)據(jù)接收模塊相連,用于緩存第戶從處理單元的浮點乘加運(yùn)算模塊的運(yùn)算結(jié)果,并將結(jié)果送往主處理單元的數(shù)據(jù)接收模塊。 第尸從處理單元的結(jié)果發(fā)送模塊與第p從處理單元的第一周部存儲器、第四局部存儲 器、第戶-l從處理單元的結(jié)果發(fā)送模塊和主處理單元的數(shù)據(jù)接收模塊相連, 一方面將 第尸-1從處理單元的結(jié)果發(fā)送模塊發(fā)送來的數(shù)據(jù)傳遞給主處理單元的數(shù)據(jù)接收模塊, 一方面將第p從處理單元的第一局部存儲器和第四局部存儲器中的數(shù)據(jù)送到主處理 單元的數(shù)據(jù)接收模塊。
全文摘要
本發(fā)明公開了一種基于FPGA的列選主元LU分解方法,要解決的技術(shù)問題是降低LU分解的時間復(fù)雜度,加快稠密矩陣線性方程組的求解。技術(shù)方案是首先構(gòu)建基于FPGA的由主處理單元和P個從處理單元組成的主從式并行計算系統(tǒng),由主從式并行計算系統(tǒng)對待分解矩陣進(jìn)行列選主元LU分解,主處理單元向第一從處理單元發(fā)送參數(shù)和待分解矩陣,從處理單元按流水方式對矩陣進(jìn)行處理,處理結(jié)果由第P從處理單元傳給主處理單元。采用本發(fā)明計算精度與不選主元LU分解相比得到很大提高,且運(yùn)算速度快,其主從式并行計算系統(tǒng)具有可擴(kuò)展性。
文檔編號G06F17/11GK101604306SQ20091004359
公開日2009年12月16日 申請日期2009年6月3日 優(yōu)先權(quán)日2009年6月3日
發(fā)明者杰 周, 飛 夏, 姜晶菲, 勇 竇, 鄔貴明 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1