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