專利名稱:一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,屬于微處理器體系結(jié)構(gòu)和編譯技術(shù)領(lǐng)域。
背景技術(shù):
流處理器是目前在計(jì)算機(jī)系統(tǒng)中得到廣泛應(yīng)用的處理器類型之一,其代表為GPU,即圖形處理器。流處理器在針對(duì)大規(guī)模數(shù)據(jù)的浮點(diǎn)計(jì)算上具有突出的效率優(yōu)勢(shì),因此也被用于高性能計(jì)算和數(shù)據(jù)并行處理。流處理器在內(nèi)存訪問(wèn)機(jī)制上與CPU等典型架構(gòu)有著明顯的不同,這使得許多原基 于CPU設(shè)計(jì)程序轉(zhuǎn)化為流處理器上運(yùn)行的程序后,會(huì)在內(nèi)存訪問(wèn)上遭遇效率瓶頸,而其中最有代表性的效率瓶頸來(lái)自于對(duì)流處理器中局部?jī)?nèi)存塊的訪問(wèn)沖突。記錄程序運(yùn)行時(shí)流處理器中局部?jī)?nèi)存的訪問(wèn)模式,可以定位其中局部?jī)?nèi)存塊的訪問(wèn)沖突,得到這些相關(guān)數(shù)據(jù)后,編程人員、編譯器或者流處理器本身,都可以規(guī)劃出程序針對(duì)局部?jī)?nèi)存訪問(wèn)的優(yōu)化方法,從而提聞程序的運(yùn)行效率。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中存在的問(wèn)題,本發(fā)明提出一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,解決了如何發(fā)現(xiàn)和統(tǒng)計(jì)由于訪問(wèn)局部?jī)?nèi)存塊沖突而導(dǎo)致的程序運(yùn)行瓶頸的問(wèn)題。本發(fā)明提出一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,所述的動(dòng)態(tài)記錄器包括局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊和訪問(wèn)記錄模塊兩部分。所述的局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊將所有線程對(duì)局部?jī)?nèi)存的訪問(wèn)進(jìn)行轉(zhuǎn)接,并將其中的相關(guān)信息記錄在另一模塊即訪問(wèn)記錄模塊中;所述的訪問(wèn)記錄模塊為具有M個(gè)定長(zhǎng)記錄的內(nèi)存單元或者寄存器單元。局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊的實(shí)現(xiàn)控制過(guò)程包括以下幾個(gè)步驟步驟一當(dāng)局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器獲得線程A在當(dāng)前運(yùn)行的程序中的指令地址P對(duì)局部?jī)?nèi)存塊0的訪問(wèn)申請(qǐng)后,進(jìn)入步驟二 ;步驟二 判斷地址P是否存在于已有的訪問(wèn)記錄模塊中,如果是,將線程A的線程號(hào)寫(xiě)入訪問(wèn)記錄模塊中的該記錄位置,并將記錄中的頻度加1,當(dāng)某一記錄中L個(gè)線程號(hào)被全部占用,而待寫(xiě)入的線程號(hào)與已有線程號(hào)均不同時(shí),可以任選一當(dāng)前線程號(hào)進(jìn)行覆蓋,或者放棄寫(xiě)入;如果不是,執(zhí)行步驟三;步驟三判斷當(dāng)前訪問(wèn)記錄模塊的存儲(chǔ)空間是否已滿,如果是,找到訪問(wèn)頻度最低的記錄,將其刪除;如果不是,執(zhí)行步驟四;步驟四在訪問(wèn)記錄模塊中增加I個(gè)新的訪問(wèn)記錄,將線程A的指令地址、被訪問(wèn)的局部?jī)?nèi)存塊號(hào)碼、當(dāng)前線程號(hào)等信息寫(xiě)入該記錄,頻度置為I ;步驟五繼續(xù)執(zhí)行當(dāng)前線程A對(duì)局部?jī)?nèi)存塊0的訪問(wèn)。
本發(fā)明的優(yōu)點(diǎn)在于(I)本發(fā)明提出一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,對(duì)原有程序的運(yùn)行效率影響較小;(2)本發(fā) 明提出一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,對(duì)原有程序的正確性不作改變,不影響原有程序的語(yǔ)義;(3)本發(fā)明提出一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,能夠動(dòng)態(tài)記錄導(dǎo)致局部?jī)?nèi)存塊沖突最多的線程和程序地址;
圖I是本發(fā)明中訪問(wèn)記錄器的結(jié)構(gòu)示意圖;圖2是本發(fā)明中局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊的流程圖。
具體實(shí)施例方式下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。本發(fā)明提出一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,其結(jié)構(gòu)如圖I所示,包括局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊和訪問(wèn)記錄模塊兩部分所述的局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊如圖I所示,該模塊將所有線程對(duì)局部?jī)?nèi)存的訪問(wèn)進(jìn)行轉(zhuǎn)接,并將其中的相關(guān)信息記錄在另一模塊即訪問(wèn)記錄模塊中,該模塊可以通過(guò)編程語(yǔ)言實(shí)現(xiàn),例如C或者C++語(yǔ)言,也可以在微處理器芯片中實(shí)現(xiàn)。圖I中的“局部?jī)?nèi)存塊”,指的是流處理器中現(xiàn)有的局部?jī)?nèi)存塊,“線程”指的是當(dāng)前在流處理器上運(yùn)行的線程。局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊的實(shí)現(xiàn)控制過(guò)程包括以下幾個(gè)步驟,如圖2所示步驟一當(dāng)局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器獲得線程A在當(dāng)前運(yùn)行的程序中的指令地址P對(duì)局部?jī)?nèi)存塊0的訪問(wèn)申請(qǐng)后,進(jìn)入步驟二 ;步驟二 判斷地址P是否存在于已有的訪問(wèn)記錄模塊中,如果是,將線程A的線程號(hào)寫(xiě)入訪問(wèn)記錄模塊中的該記錄位置,并將記錄中的頻度加1,當(dāng)某一記錄中L個(gè)線程號(hào)被全部占用,而待寫(xiě)入的線程號(hào)與已有線程號(hào)均不同時(shí),可以任選一當(dāng)前線程號(hào)進(jìn)行覆蓋,或者放棄寫(xiě)入;如果不是,執(zhí)行步驟三;步驟三判斷當(dāng)前訪問(wèn)記錄模塊的存儲(chǔ)空間是否已滿,如果是,找到訪問(wèn)頻度最低的記錄,將其刪除;如果不是,執(zhí)行步驟四;步驟四在訪問(wèn)記錄模塊中增加I個(gè)新的訪問(wèn)記錄,將線程A的指令地址、被訪問(wèn)的局部?jī)?nèi)存塊號(hào)碼、當(dāng)前線程號(hào)等信息寫(xiě)入該記錄,頻度置為I ;步驟五繼續(xù)執(zhí)行當(dāng)前線程A對(duì)局部?jī)?nèi)存塊0的訪問(wèn)。所述的訪問(wèn)記錄模塊是一個(gè)具有M個(gè)定長(zhǎng)記錄的內(nèi)存單元或者寄存器單元,M的大小取決于流處理器硬件或者操作系統(tǒng)軟件的能力,例如,可以為16、256或者更多。其中,每個(gè)記錄包含的信息包括(但不限于)線程的指令地址、被訪問(wèn)的局部?jī)?nèi)存塊號(hào)碼、線程號(hào)以及訪問(wèn)頻度等信息,其中線程號(hào)可以為多個(gè),如圖I中最多為L(zhǎng)個(gè),L的大小取決于硬件或者軟件的能力,例如,可以為4、16或者更多。根據(jù)局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊的工作機(jī)制,當(dāng)某一記錄中L個(gè)線程號(hào)被全部占用,而待寫(xiě)入的線程號(hào)與已有線程號(hào)均不同時(shí),可以任選一當(dāng)前線程號(hào)進(jìn)行覆蓋,或者放棄寫(xiě)入。
根據(jù)局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊的工作機(jī)制,當(dāng)所有M個(gè)記錄均被占用即訪問(wèn)記錄模塊的存儲(chǔ)空間已滿,待寫(xiě)入的新記錄可以將已有記錄中訪問(wèn)頻度最低的記錄進(jìn)行覆蓋,保 證總是訪問(wèn)頻度最多的記錄存在于訪問(wèn)記錄模塊中。如果訪問(wèn)頻度最低的記錄有多個(gè),任意選取其中一個(gè)進(jìn)行覆蓋。
權(quán)利要求
1.一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,其特征在于所述的動(dòng)態(tài)記錄器包括局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊和訪問(wèn)記錄模塊兩部分; 所述的局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊將所有線程對(duì)局部?jī)?nèi)存的訪問(wèn)進(jìn)行轉(zhuǎn)接,并將其中的相關(guān)信息記錄在另一模塊即訪問(wèn)記錄模塊中;所述的訪問(wèn)記錄模塊為具有M個(gè)定長(zhǎng)記錄的內(nèi)存單元或者寄存器單元; 局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊的實(shí)現(xiàn)控制過(guò)程包括以下幾個(gè)步驟 步驟一當(dāng)獲得線程A在當(dāng)前程序中的指令地址P對(duì)局部?jī)?nèi)存塊O的訪問(wèn)申請(qǐng)后,進(jìn)入步驟二 ; 步驟二 判斷地址P是否存在于已有的訪問(wèn)記錄模塊中,如果是,將線程A的線程號(hào)寫(xiě)入訪問(wèn)記錄模塊中的該記錄位置,并將記錄中的頻度加1,當(dāng)某一記錄中L個(gè)線程號(hào)被全部占用,而待寫(xiě)入的線程號(hào)與已有線程號(hào)均不同時(shí),可以任選一當(dāng)前線程號(hào)進(jìn)行覆蓋,或者放棄寫(xiě)入;如果不是,執(zhí)行步驟三; 步驟三判斷當(dāng)前訪問(wèn)記錄模塊的存儲(chǔ)空間是否已滿,如果是,找到訪問(wèn)頻度最低的記錄,將其刪除;如果不是,執(zhí)行步驟四; 步驟四在訪問(wèn)記錄模塊中增加I個(gè)新的訪問(wèn)記錄,將線程A的指令地址、被訪問(wèn)的局部?jī)?nèi)存塊號(hào)碼、當(dāng)前線程號(hào)等信息寫(xiě)入該記錄,頻度置為I ; 步驟五繼續(xù)執(zhí)行當(dāng)前線程A對(duì)局部?jī)?nèi)存塊O的訪問(wèn)。
2.根據(jù)權(quán)利要求I所述的一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,其特征在于所述的訪問(wèn)記錄模塊中每個(gè)記錄包含的信息包括線程的指令地址、被訪問(wèn)的局部?jī)?nèi)存塊號(hào)碼、線程號(hào)以及訪問(wèn)頻度。
全文摘要
本發(fā)明涉及一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,屬于微處理器體系結(jié)構(gòu)和編譯技術(shù)領(lǐng)域,所述的動(dòng)態(tài)記錄器包括局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊和訪問(wèn)記錄模塊兩部分。所述的局部?jī)?nèi)存訪問(wèn)轉(zhuǎn)接模塊將所有線程對(duì)局部?jī)?nèi)存的訪問(wèn)進(jìn)行轉(zhuǎn)接,并將其中的相關(guān)信息記錄在另一模塊即訪問(wèn)記錄模塊中;所述的訪問(wèn)記錄模塊為具有M個(gè)定長(zhǎng)記錄的內(nèi)存單元或者寄存器單元。本發(fā)明提出一種面向流處理器的局部?jī)?nèi)存訪問(wèn)模式動(dòng)態(tài)記錄器,對(duì)原有程序的運(yùn)行效率影響較??;對(duì)原有程序的正確性不作改變,不影響原有程序的語(yǔ)義,且能夠動(dòng)態(tài)記錄導(dǎo)致局部?jī)?nèi)存塊沖突最多的線程和程序地址。
文檔編號(hào)G06F12/02GK102722446SQ20121018514
公開(kāi)日2012年10月10日 申請(qǐng)日期2012年6月6日 優(yōu)先權(quán)日2012年6月6日
發(fā)明者史曉華 申請(qǐng)人:北京航空航天大學(xué)