欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種用計算機對矩陣進行運算的方法

文檔序號:6428261閱讀:360來源:國知局
專利名稱:一種用計算機對矩陣進行運算的方法
技術領域
本發(fā)明涉及應用N路組相聯(lián)Cache組織方式的計算系統(tǒng)中大規(guī)模矩陣轉(zhuǎn)置運算的運行效率。
背景技術
用計算機對大規(guī)模矩陣進行運算在工程和科學計算中有著廣泛應用。在這些運算中,通常要涉及對整個矩陣或者矩陣中一個區(qū)域內(nèi)的元素進行處理。例如在對大規(guī)模矩陣進行轉(zhuǎn)置運算時,如果采用采用矩陣分塊的方法,則這種轉(zhuǎn)置運算一般要涉及矩陣分塊后子矩陣之間的元素交換以及一個子矩陣內(nèi)部的元素的轉(zhuǎn)置。
眾所周知,在計算機中,為了減少CPU與內(nèi)存之間的速度差異,通常在相對慢速的主存(DRAM)和相對快速的CPU之間插入一速度較快、容量較小的高速緩沖存儲器(Cache),以起到緩沖作用。CPU與主存之間通過Cache進行數(shù)據(jù)交換,以提高數(shù)據(jù)傳輸速度。其中,組相聯(lián)Cache是Cache的一種基本結(jié)構(gòu),而多路組相聯(lián)Cache是多級存儲系統(tǒng)中的常用技術。多路組相聯(lián)Cache是將一定容量大小為M的Cache分成U組,每組N路,主存和Cache之間采用數(shù)據(jù)塊進行數(shù)據(jù)交互。主存數(shù)據(jù)塊以固定的映射關系映射到確定的Cache組上,其在組內(nèi)位置相對靈活,可以根據(jù)需要選擇該組的N路中的某一路。以一維編碼的主存模型為例,通常,對于在主存中編號為J的數(shù)據(jù)塊在Cache中的對應組號為Q,其中Q=J MOD U,即主存中編號與U同余的主存數(shù)據(jù)塊被映射到相同的Cache組內(nèi)。也已經(jīng)知道,類似于“Q=J MODU”的這種映射關系在一定的計算機系統(tǒng)中是保持固定的。如圖1所示,例如,Cache1被分為0~7共8組,每組兩路(在圖1中用相同的組號表示),主存2中的數(shù)據(jù)塊按照一維模型進行編號,這樣,主存2中編號與數(shù)字8同余的數(shù)據(jù)塊被映射到Cache1相同的組內(nèi)。例如在圖1中,主存2中編號為0和16的數(shù)據(jù)塊都被映射到Cache1的0號組內(nèi),盡管它們可以位于0號組不同的路中。
從前述的內(nèi)容可知,當用計算機對矩陣進行運算時,需要將所需要處理的矩陣區(qū)域內(nèi)的元素從主存中讀取到cache中。例如,采用矩陣分塊的方法進行矩陣的轉(zhuǎn)置運算,當進行兩個子矩陣的數(shù)據(jù)交換時,需要將兩個子矩陣的元素讀取到cache中進行處理。但是,由于前述的計算機主存數(shù)據(jù)塊和cache的固定映射關系,例如“Q=J MOD U”,即使所處理的元素數(shù)據(jù)總量比Cache容量低,但是由于被映射到相同Cache組的元素超過了其路數(shù)N,因此無法將所處理的元素數(shù)據(jù)一次全部讀入到cache中,而是需要主存和cache多次的數(shù)據(jù)交換。這種情況下就會發(fā)生“Cache顛簸”現(xiàn)象?!癈ache顛簸”會增加訪存開銷,降低數(shù)據(jù)預取效率,程序運行的預測性和可控性都會下降。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種用計算機對矩陣進行運算的方法,該方法可以大規(guī)模提高矩陣運算的效率。
為了實現(xiàn)上述目的,本發(fā)明提供了一種用計算機進行矩陣運算的方法,用于處理一第一矩陣,該計算機包括相連的主存和Cache,所述Cache包括多個Cache組,每個Cache組包括多路;所述主存和Cache之間以一固定映射方式進行數(shù)據(jù)交換;該方法包括(1)提供一冗余矩陣,將所述第一矩陣和所述冗余矩陣合并為第二矩陣;(2)將所述第二矩陣讀取到主存中;(3)將第一矩陣中待處理區(qū)域的元素從主存讀取到Cache;所述冗余矩陣使得第一矩陣的待處理區(qū)域的元素映射到Cache后,映射到相同Cache組的元素不超過Cache組的路數(shù)。
所述矩陣運算為對第一矩陣的轉(zhuǎn)置運算。所述矩陣運算為對第一矩陣進行分塊操作后的轉(zhuǎn)置運算。所述待處理區(qū)域為第一矩陣分塊后的一個或者多個子矩陣。所述待處理區(qū)域為第一矩陣分塊后需要進行數(shù)據(jù)交換的兩個子矩陣。所述冗余矩陣的規(guī)模通過計算機程序測試獲得。
采用本發(fā)明的方法可以避免計算機進行矩陣運算中的“Cache顛簸”現(xiàn)象,從而大幅度提高運算效率。


圖1是二路組相聯(lián)Cache組織方式;圖2是本發(fā)明方法應用于矩陣轉(zhuǎn)置運算的一個實施例的流程圖;圖3是16384×512矩陣轉(zhuǎn)置時間隨分塊大小的變化曲線;圖4是16384×512矩陣以128×128分塊的矩陣轉(zhuǎn)置時間隨冗余矩陣的不同的變化曲線。
具體實施例方式
下面結(jié)合附圖和具體實施例對本發(fā)明作進一步詳細描述。
為了描述與理解的方便,在下文的實施例中采用一個16×16的示例性矩陣為例來描述本發(fā)明的方法,但是應該理解,本領域的技術人員可以很容易地將本發(fā)明的方法應用于其它規(guī)模的矩陣,例如大規(guī)模矩陣。
表1示出了一個16×16的矩陣,每一個單元格表示一個矩陣元素,每一個矩陣元素在計算機的主存中占用一個數(shù)據(jù)塊。在該實施例中,采用一維模型對主存數(shù)據(jù)塊進行編碼,相應地,表1中每一個單元格中的數(shù)字表示了該矩陣元素在主存中的位置。從表1中可看出,該矩陣的元素按行優(yōu)先的順序存儲在主存中,即矩陣元素從上之下從左至右按順序存儲在主存中。應當理解,本發(fā)明并不限制主存模型的類型,主存也可以采用諸如二維模型等其它模型進行編碼,而矩陣的元素也可以采用諸如列優(yōu)先的順序存儲在主存中。
計算機中容量為M的Cache分成U個Cache組,每個Cache組中有N路。主存與Cache之間有固定的映射關系,以一維編碼的主存模型為例,若主存塊的編號為J,則其對應組號為“Q=J MOD U”,即U同余的主存數(shù)據(jù)塊被映射到相同的Cache組中。主存塊號J作為標記(tag)與塊數(shù)據(jù)一起存于此組的某一路中。同樣地,為了描述與理解的方便,在下文的實施例中采用一個如表2所示的16×2(16組,2路)的示例性Cache為例來描述本發(fā)明的方法,但是應該理解,本領域的技術人員可以很容易地將本發(fā)明的方法應用于其它容量和組織方式的組相聯(lián)Cache。其中,在表2中,第一列為Cache組號,第二和第三列表示每一Cache組有兩路組成,即每一個Cache組最多存儲映射到該組的兩個數(shù)據(jù)。
表1

表2

在對矩陣進行處理時,有時需要對整個矩陣或者矩陣中的某些區(qū)域的數(shù)據(jù)進行處理。一個典型的矩陣運算是矩陣的轉(zhuǎn)置運算,特別是對矩陣分塊后進行的轉(zhuǎn)置運算。在進行整個矩陣的轉(zhuǎn)置運算時,需要將對應的子矩陣進行數(shù)據(jù)交換并在子矩陣內(nèi)部進行轉(zhuǎn)置運算。在一個實施例中,表1所示的16×16矩陣采用4×4的分塊方式,將該矩陣分為16個4×4的子矩陣。對表1中的矩陣進行轉(zhuǎn)置運算時,包括對子矩陣A1和子矩陣A2的處理。子矩陣A1和A2如表3所示,其矩陣元素的編號與表1一致,分別是位于表1左下角和右上角的4×4矩陣。對子矩陣A1和A2的處理通常包括子矩陣A1和A2之間矩陣元素的交換以及子矩陣內(nèi)部矩陣元素的轉(zhuǎn)置,此時的子矩陣A1和A2就是待處理的矩陣區(qū)域。
表3

在對子矩陣A1和A2進行運算時,需要將其從主存中調(diào)入到Cache中。而在現(xiàn)有技術中,通常是將主存中的矩陣元素按照諸如“Q=J MOD U”的映射關系直接讀取到Cache中。以表3中的子矩陣A1和A2為例,當按照“Q=J MOD U”的映射關系將其元素讀取到Cache中時,則主存中的元素與Cache組號的對應關系如表4所示,其中表4中的第一列為Cache的組號,第2~5列中的數(shù)字對應于該元素在主存中的位置。
表4

從表4中可看出,根據(jù)主存與Cache的固定映射關系,會有四個元素對應同一個Cache組的情況發(fā)生。但是,從表2可知,Cache的容量為16×2(16組,2路),即每一個Cache組最多同時存儲兩個同組數(shù)據(jù)。也就是說,在一次運算中,當所處理的矩陣區(qū)域的元素映射到相同Cache組中的元素超過Cache的路數(shù)時,即使該矩陣區(qū)域的規(guī)模比Cache容量低,但這些區(qū)域的元素仍然無法同時被讀入Cache,在完成相應操作運算時需要多次將待處理區(qū)域的元素調(diào)入和換出Cache,即發(fā)生“Cache顛簸”現(xiàn)象。
在本發(fā)明中,為待處理的矩陣(稱為第一矩陣)增加一冗余矩陣從而構(gòu)成一個新的矩陣(稱為第二矩陣),然后將第二矩陣讀取到主存中。在對第一矩陣進行諸如轉(zhuǎn)置之類的運算處理時,冗余矩陣不參加運算,但是,由于冗余矩陣的存在,改變了第一矩陣的元素在主存中排列順序。當冗余矩陣選擇合適時,可使得第一矩陣中的待處理區(qū)域的元素可以同時讀入到Cache中,從而消除“Cache顛簸”現(xiàn)象。在這里,為了使得第一矩陣中的待處理區(qū)域的元素可同時讀入到Cache中,一般是要求待處理區(qū)域的元素映射到相同Cache組的元素不超過Cache組的路數(shù)。
為了描述的更清楚,以表1的矩陣為第一矩陣來說明本發(fā)明的方法。其中,表3中的子矩陣A1和A2為對第一矩陣進行轉(zhuǎn)置運算時的一個待處理區(qū)域。
首先,為表1的16×16的第一矩陣提供一個16×4的冗余矩陣,該冗余矩陣與第一矩陣一起構(gòu)成一個新的16×20的矩陣,稱為第二矩陣,如表5所示。表5中的第17~20列為所提供的冗余矩陣。
表5

將表5所示的第二矩陣讀入主存中,表5中單元格內(nèi)的數(shù)字表示在一維主存模型中該元素在主存中的位置。對比表5和表1可知,由于提供了冗余矩陣,表5中第一矩陣的元素或者說部分元素在主存中的位置發(fā)生了變化。
仍然以第一矩陣中的子矩陣A1和A2為例,在增將冗余矩陣之后,這兩個子矩陣A1和A2的元素在主存中的位置如表6所示。
表6

將這兩個子矩陣按照前述的映射關系“Q=J MOD U”讀取到Cache中,其結(jié)果如表7所示。其中,表7中的第一列為Cache的組號,第二和第三列中的數(shù)字對應于該元素在主存中的位置。
表7

從表7可以看出,增加冗余矩陣之后,第一矩陣的待處理區(qū)域(例如子矩陣A1和A2)的元素映射到Cache后,映射到相同Cache組的元素不超過Cache組的路數(shù),因此第一矩陣中待處理區(qū)域的元素可以同時地全部讀入到Cache中,有效地避免了“Cache顛簸”現(xiàn)象的發(fā)生。
從上述描述可知,雖然冗余矩陣不參加矩陣的運算,但是冗余矩陣的存在改變了第一矩陣的元素或者其部分元素在主存中的存儲位置,使得第一矩陣的待處理區(qū)域的元素映射到Cache時,映射到同一Cache組的元素不超過Cache組的路數(shù)。進一步的,由于該冗余矩陣不參加矩陣的運算,因此該矩陣的元素值并不限定,僅關心該冗余矩陣的規(guī)模,也就是該冗余矩陣的維數(shù)。
冗余矩陣的維數(shù)可以在對第一矩陣運算前通過計算機測試得到。例如對于矩陣的轉(zhuǎn)置運算,可以針對第一矩陣的規(guī)模及其分塊方式,選擇不同維數(shù)大小的冗余矩陣進行測試,根據(jù)測試結(jié)果選擇一個符合條件的最佳的冗余矩陣,并將該最佳的冗余矩陣的維數(shù)作為一個參數(shù)存儲起來。在下一次處理具有同樣規(guī)模和分塊方式的第一矩陣時,可直接調(diào)用前述參數(shù)形成冗余矩陣并與第一矩陣組合成第二矩陣。作為另一種可選擇的方式,在做矩陣的轉(zhuǎn)置運算時也可以將矩陣的分塊方式作為一個參數(shù),通過計算機測試獲得該矩陣的最佳分塊方式,并將該最佳分塊方式作為參數(shù)儲存起來以便做矩陣運算時調(diào)用。
圖2示出了采用本發(fā)明方法做矩陣轉(zhuǎn)置運算時的一個優(yōu)選實施例的流程圖。如圖2所示步驟100計算機運行一個測試程序計算針對第一矩陣規(guī)模的最佳分塊方式。
步驟110計算機運行一個測試程序計算針對第一矩陣規(guī)模的最佳冗余矩陣的規(guī)模。
步驟120將所得的最佳分塊大小和最佳冗余度作為環(huán)境參數(shù)儲存。
步驟130對一具體的第一矩陣進行轉(zhuǎn)置運算時,從環(huán)境參數(shù)中讀入最佳冗余矩陣的規(guī)模,并根據(jù)該最佳冗余矩陣的規(guī)模生成一冗余矩陣,該冗余矩陣與第一矩陣組合成第二矩陣。
步驟140讀取環(huán)境參數(shù)中的最佳分塊方式,將第一矩陣分塊。
步驟150將第二矩陣讀入計算機主存中。
步驟160根據(jù)上述最佳分塊方式對第一矩陣進行轉(zhuǎn)置運算。
在一個大規(guī)模矩陣的轉(zhuǎn)置運算的實施例中,在Intel xeon2.8G處理器平臺上對大小為16384×512的第一矩陣進行轉(zhuǎn)置運算。在步驟100可以得到如圖3所示的第一矩陣的轉(zhuǎn)置時間(縱坐標)隨分塊大小(橫坐標)的變化曲線,可以得到最佳分塊大小為128×128。在步驟110可以得到如圖4所示的第一矩陣以128×128分塊時轉(zhuǎn)置時間(縱坐標)隨冗余矩陣規(guī)模(橫坐標表示已增加冗余矩陣后的第二矩陣的列數(shù),其行數(shù)為16384)的變化曲線,可以得到已增加冗余矩陣后的第二矩陣最佳列數(shù)為517,即最佳冗余矩陣的列數(shù)為(517-512=)5,則最佳冗余矩陣的規(guī)模為16384×5。上述所測得的結(jié)果存為環(huán)境參數(shù)。并且在做矩陣轉(zhuǎn)置運算時,讀取存儲在環(huán)境參數(shù)中的分塊大小值和冗余矩陣規(guī)模。
在當前的研究中,已發(fā)現(xiàn)利用本發(fā)明所述的利用冗余矩陣進行矩陣運算可以大大提高運算的效率,計算機系統(tǒng)的運算效率可以得到指數(shù)級的增長。在曙光刀片服務器平臺上,CPU為XEON2.8G,內(nèi)存2G,運行紅帽子Linux操作系統(tǒng),對規(guī)模為16384×512單精度浮點復數(shù)矩陣進行轉(zhuǎn)置運算,運用原有方法需時1.387秒,而采用本發(fā)明所述的方法以后,只需要0.155秒,效果十分明顯。
權利要求
1.一種用計算機進行矩陣運算的方法,用于處理一第一矩陣,該計算機包括相連的主存和Cache,所述Cache包括多個Cache組,每個Cache組包括多路;所述主存和Cache之間以一固定映射方式進行數(shù)據(jù)交換;該方法包括提供一冗余矩陣,將所述第一矩陣和所述冗余矩陣合并為第二矩陣;將所述第二矩陣讀取到主存中;將第一矩陣中待處理區(qū)域的元素從主存讀取到Cache;所述冗余矩陣使得第一矩陣的待處理區(qū)域的元素映射到Cache后,映射到相同Cache組的元素不超過Cache組的路數(shù)。
2.根據(jù)權利要求1所述的用計算機進行矩陣運算的方法,其特征在于,所述矩陣運算為對第一矩陣的轉(zhuǎn)置運算。
3.根據(jù)權利要求2所述的用計算機進行矩陣運算的方法,其特征在于,所述矩陣運算為對第一矩陣進行分塊操作后的轉(zhuǎn)置運算。
4.根據(jù)權利要求3所述的用計算機進行矩陣運算的方法,其特征在于,所述待處理區(qū)域為第一矩陣分塊后的一個或者多個子矩陣。
5.根據(jù)權利要求4所述的用計算機進行矩陣運算的方法,其特征在于,所述待處理區(qū)域為第一矩陣分塊后需要進行數(shù)據(jù)交換的兩個子矩陣。
6.根據(jù)權利要求1所述的用計算機進行矩陣運算的方法,其特征在于,所述冗余矩陣的規(guī)模通過計算機程序測試獲得。
全文摘要
本發(fā)明公開了一種用計算機進行矩陣運算的方法,該方法用于解決在矩陣運算中常見的“Cache顛簸”現(xiàn)象。該方法包括步驟1)提供一冗余矩陣,將該冗余矩陣與原有的第一矩陣組成新的第二矩陣;2)將第二矩陣讀取到主存中;3)將第一矩陣中待處理區(qū)域的元素從主存讀取到Cache;所述冗余矩陣使得第一矩陣的待處理區(qū)域的元素映射到Cache后,映射到相同Cache組的元素不超過Cache組的路數(shù)。采用本發(fā)明的方法可以避免計算機進行矩陣運算中的“Cache顛簸”現(xiàn)象,從而大幅度提高運算效率。
文檔編號G06F12/08GK1752950SQ20041007824
公開日2006年3月29日 申請日期2004年9月21日 優(yōu)先權日2004年9月21日
發(fā)明者簡方軍, 韓冀中 申請人:中國科學院計算技術研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
邢台市| 梁河县| 达尔| 洛南县| 涿州市| 图片| 台前县| 青神县| 五家渠市| 岳西县| 绥德县| 鄂尔多斯市| 砚山县| 木里| 台北市| 体育| 南汇区| 家居| 平和县| 开远市| 德清县| 东乡族自治县| 云浮市| 邯郸县| 金秀| 沂南县| 锦屏县| 突泉县| 中山市| 甘孜县| 新建县| 唐山市| 崇文区| 福鼎市| 成武县| 临桂县| 彭泽县| 东港市| 孝感市| 鹰潭市| 马鞍山市|