一種緩存系統(tǒng)和方法
【技術領域】
[0001]本發(fā)明涉及計算機,通訊及集成電路領域。
【背景技術】
[0002]通常數(shù)據緩存的作用是將更低級存儲器中的部分數(shù)據內容復制在其中,使這些內容能被更高級存儲器或處理器核快速存取,以保證流水線的持續(xù)運行。當前的高性能計算機/微處理器等多數(shù)使用獨立的數(shù)據緩存以避免指令與數(shù)據共用同一通道的馮?諾依曼瓶頸。隨著多指令發(fā)射技術的廣泛應用,單數(shù)個的數(shù)據緩存也將更經常地成為限制處理器功能提聞的瓶頸。
[0003]在現(xiàn)有技術中,數(shù)據緩存結構由數(shù)據存儲器和標簽存儲器構成。數(shù)據存儲器和標簽存儲器每行對應,數(shù)據存儲器重存儲數(shù)據,標簽存儲器中存儲數(shù)據地址的標簽,即數(shù)據地址中的高位?,F(xiàn)行數(shù)據緩存的尋址都基于以下方式,用地址中的索引段(index)尋址讀出標簽存儲器中的標簽與地址中的標簽段進行匹配;用地址中索引段與塊內位移段共同尋址讀出緩存中的內容。在現(xiàn)有技術中,存儲器相鄰存儲行對應的的索引段尋址地址是連續(xù)的,而存儲在對應的標簽存儲器中的標簽可以是不連續(xù)的。從編譯器的角度看,正在執(zhí)行的目標程序在它自己的邏輯地址空間內運行,每個程序值在這個地址空間中有一個地址。一個目標程序在邏輯地址空間的運行時刻映像包含數(shù)據區(qū)和代碼區(qū)。數(shù)據區(qū)又包含靜態(tài)區(qū)、堆區(qū)、空閑內存和棧區(qū)。棧區(qū)用來存放稱為活動記錄的數(shù)據結構,這些活動記錄在函數(shù)調用過程中生成。通常靜態(tài)區(qū)與堆區(qū)從地址空間的低區(qū)從底向頂生長,棧區(qū)從地址空間的高區(qū)從頂向底生長,兩者之間并不重疊,由空閑內存分隔。
[0004]通常處理器內的寄存器資源有限,過程調用時經常需要將寄存器原有的內容換出到存儲器。過程調用結束時,調用者使用的任何寄存器都必須恢復到過程調用前所存儲的值。將原來換出到存儲器的內容寫回到寄存器。
[0005]在現(xiàn)有技術中,換出/寫回寄存器的最理想的數(shù)據結構是棧。棧是一種后進先出的隊列。棧需要一個指針指向棧中最新分配的地址,以指示下一個過程放置換出寄存器的位置,或是寄存器舊值的存放位置。將數(shù)據放入棧中稱為壓棧,從棧中移除數(shù)據稱為出棧。按照慣例,?!霸鲩L”是按照地址從高到低的順序進行的。這表明將值壓棧時,棧指針值減??;而值出棧時,棧長度縮短,棧指針增大;也就是說棧內地址是連續(xù)的。
[0006]正是由于棧內地址是連續(xù)的,而存儲在標簽存儲器中的標簽又是不連續(xù)的,所以這就給緩存的查找和替換帶來很大的困擾,已成為是制約現(xiàn)代處理器性能提升的最嚴重瓶頸。
[0007]本發(fā)明提出的方法與系統(tǒng)裝置能直接解決上述或其他的一個或多個困難。
【發(fā)明內容】
[0008]本發(fā)明提出了一種將數(shù)據地址空間細分的方法,使得可以由復數(shù)個同一層次的數(shù)據緩存并行向處理器提供數(shù)據以緩解數(shù)據訪問瓶頸。其特征在于將緩存分為棧緩存,用于存儲程序運行時存儲在棧區(qū)域中的數(shù)據;非棧緩存,用于存儲程序運行時的其他數(shù)據;當處理器核執(zhí)行的數(shù)據訪問指令對應的數(shù)據位于棧區(qū)域中時,直接訪問棧緩存。
[0009]可選的,在所述方法中,根據所述數(shù)據訪問指令數(shù)據地址判斷對應的數(shù)據位于棧區(qū)域中,還是位于非棧區(qū)域中;或根據所述數(shù)據訪問指令中的基地址寄存器號判斷對應的數(shù)據位于棧區(qū)域中,還是位于非棧區(qū)域中。
[0010]可選的,在所述方法中,大于或等于棧寄存器值的數(shù)據地址位于棧區(qū)域中。
[0011]可選的,在所述方法中,用棧緩存中地址連續(xù)的存儲空間存儲棧區(qū)域中數(shù)據地址連續(xù)的數(shù)據。
[0012]可選的,在所述方法中,用循環(huán)緩沖實現(xiàn)所述棧緩存。
[0013]可選的,在所述方法中,還包括:棧頂指針,指向所述棧緩存中位于棧頂位置的數(shù)據;棧底指針,所述棧底指針與所述棧頂指針保持一定距離,且兩者之間的數(shù)據就是存儲在所述棧緩存中的有效數(shù)據。
[0014]可選的,在所述方法中,當棧頂值改變時,通過對原棧頂值和新棧頂值相減,判斷出棧頂指針移動方向。
[0015]可選的,在所述方法中,由多個所述棧緩存結構組成多層的棧緩存;其中:最高層次的棧緩存的棧頂指針值由處理器核產生的棧頂值決定;其他層次的棧緩存的棧頂指針值由更高一層次的棧緩存的棧底指針值決定。
[0016]可選的,在所述方法中,各個層次的棧緩存中的循環(huán)緩沖共同組成一個大的循環(huán)緩沖,所述循環(huán)緩沖跨越了不同的緩存層次。
[0017]可選的,在所述方法中,當較高層次棧緩存已滿或接近滿時,將其棧底指針指向的至少一個數(shù)據存儲到更低層次棧緩存中與其棧頂指針指位置相鄰的尚未存儲有效數(shù)據的存儲位置,并相應移動所述較高層次棧緩存的棧底指針及所述更低層次棧緩存的棧頂指針。
[0018]可選的,在所述方法中,當較高層次棧緩存已空或接近空,且在更低層次棧緩存中有數(shù)據時,將所述更低層次棧緩存中棧頂指針指向的至少一個數(shù)據取回存儲到所述較高層次棧緩存中棧底指針指向位置相鄰的尚未存儲有效數(shù)據的存儲位置,并相應移動所述較高層次棧緩存的棧底指針及所述更低層次棧緩存的棧頂指針。
[0019]可選的,在所述方法中,棧緩存中預留若干個存儲單元作為預留部分;新的數(shù)據可以被寫入棧緩存的預留部分,但必須保證預留部分大于等于預設的最小容量;所述最小容量值為零或正數(shù);若因新數(shù)據的寫入導致預留部分小于所述最小容量,則將其棧底指針指向的至少一個數(shù)據存儲到更低層次棧緩存中與其棧頂指針指位置相鄰的尚未存儲有效數(shù)據的存儲位置,并相應移動所述棧緩存的棧底指針及所述更低層次棧緩存的棧頂指針。
[0020]可選的,在所述方法中,當支持多個線程同時運行時,將所述預留部分對應的存儲單元的號碼存儲在保留池中;若有新數(shù)據寫入,則由保留池分配一個存儲單元號碼供存儲數(shù)據;若有數(shù)據被從棧中取出不再存儲,則將對應的存儲單元號碼送回保留池。
[0021]可選的,在所述方法中,當正在進行棧操作的一個線程的棧頂指針下移需要更多的存儲塊,而保留池中已沒有預留的存儲塊時,控制其他線程移動棧底指針釋放存儲塊以供所述線程棧頂指針使用。
[0022]可選的,在所述方法中,每個存儲單元或每組存儲單元有相應的數(shù)據地址;將所有所述數(shù)據地址與處理器核送出的數(shù)據地址同時匹配,可以找到處理器核送出的數(shù)據地址對應的一個存儲單元,或一組存儲單元并在該組存儲單元中找到相應的存儲單元。
[0023]可選的,在所述方法中,記錄棧頂值以及棧頂值對應的一個存儲單元或一組存儲單元的號碼;將處理器核送出的數(shù)據地址與所述棧頂值相減,得到所述數(shù)據地址與棧頂值之間的差值;根據所述差值按地址連續(xù)的順序從棧緩存中找到該數(shù)據地址對應的一個存儲單元,或一組存儲單元并在該組存儲單元中找到相應的存儲單元。
[0024]本發(fā)明還提出了一種緩存系統(tǒng),其特征在于包括棧緩存和非棧緩存;其中棧緩存只存儲程序運行時存儲在棧區(qū)域中的數(shù)據;當處理器核執(zhí)行的數(shù)據訪問指令對應的數(shù)據位于棧區(qū)域中時,直接訪問棧緩存。
[0025]可選的,在所述系統(tǒng)中,所述棧緩存中地址連續(xù)的存儲單元存儲棧區(qū)域中數(shù)據地址連續(xù)的數(shù)據。
[0026]可選的,在所述系統(tǒng)中,所述棧緩存由循環(huán)緩沖構成。
[0027]可選的,在所述系統(tǒng)中,所述棧緩存還包括一個棧頂寄存器,用于存儲所述棧緩存中棧頂值對應的位置;可以根據所述棧頂寄存器值以及存儲在所述棧緩存中的有效數(shù)據量推算出棧底指針對應的位置。
[0028]可選的,在所述系統(tǒng)中,還包括一個減法器,當棧頂值改變時,根據所述減法器對原棧頂值和新棧頂值相減得到的結果判斷棧頂指針移動方向。
[0029]可選的,在所述系統(tǒng)中,由多個所述棧緩存組成多層次的棧緩存系統(tǒng);其中:最高層次的棧緩存的棧頂指針值由處理器核產生的棧頂值決定;其他層次的棧緩存的棧頂指針值由更高一層次的棧緩存的棧底指針值決定。
[0030]可選的,在所述系統(tǒng)中,當較高層次棧緩存已滿或接近滿時,將其棧底指針指向的至少一個數(shù)據存儲到更低層次棧緩存中與其棧頂指針指位置相鄰的尚未存儲有效數(shù)據的存儲位置,并相應移動所述較高層次棧緩存的棧底指針及所述更低層次棧緩存的棧頂指針。
[0031]可選的,在所述系統(tǒng)中,當較高層次棧緩存已空或接近空,且在更低層次棧緩存中有數(shù)據時,將所述更低層次棧緩存中棧頂指針指向的至少一個數(shù)據取回存儲到所述較高層次棧緩存中棧底指針指向位置相鄰的尚未存儲有效數(shù)據的存儲位置,并相應移動所述較高層次棧緩存的棧底指針及所述更低層次棧緩存的棧頂旨針。
[0032]可選的,在所述系統(tǒng)中,預留若干個存儲單元作為預留部分;新的數(shù)據可以被寫入棧緩存的預留部分,但必須保證預留部分大于等于預設的最小容量;所述最小容量值為零或正數(shù);若因新數(shù)據的寫入導致預留部分小于所述最小容量,則將其棧底指針指向的至少一個數(shù)據存儲到更低層次棧緩存中與其棧頂指針指位置相鄰的尚未存儲有效數(shù)據的存儲單元,并相應移動所述棧緩存的棧底指針及所述更低層次棧緩存的棧頂指針。
[0033]可選的,在所述系統(tǒng)中,還包括一個保留池;當支持多個線程同時運行時,將所述預留部分對應的存儲單元的號碼存儲在保留池中;若有新數(shù)據寫入,則由保留池分配一個存儲單元號碼供存儲數(shù)據;若有數(shù)據被從棧中取出不再存儲,則將對應的存儲單元號碼送回保留池。
[0034]可選的,在所述系統(tǒng)中,每個存儲單元或每組存儲單元還包括:地址寄存器,用于存儲該存儲單元或該組存儲單元的數(shù)據地址;比較器,用于將所述地址寄存器中的數(shù)據地址與處理器核送出的數(shù)據地址進行比較;通過所有比較器的同時匹配,可以找到處理器核送出的數(shù)據地址對應的一個存儲單元,或一組存儲單元并在該組存儲單元中找到相應的存儲單元。
[0035]可選的,在所述系統(tǒng)中,還包括:棧頂值寄存器,用于記錄棧頂值;棧頂指針寄存器,用于記錄棧頂值對應的一個存儲單元或一組存儲單元的號碼;地址減法器,用于將處理器核送出的數(shù)據地址與所述棧頂值相減,得到所述數(shù)據地址與棧頂值之間的差值;根據所述差值按地址連續(xù)的順序從棧緩存中找到該數(shù)據地址對應的一個存儲單元,或一組存儲單元并在該組存儲單元中找到相應的存儲單元。
[0036]對于本領域專業(yè)人士,還可以在本發(fā)明的說明、權利要求和附圖的啟發(fā)下,理解、領會本發(fā)明所包含其他方面內容。
[0037]有益.效果
[0038]本發(fā)明所述的緩存系統(tǒng)和方法提供了獨立的棧緩存和非棧緩存,分別用于存放棧區(qū)域中和非棧區(qū)域中的數(shù)據,增加了緩存的數(shù)據讀寫端口,提高了數(shù)據吞吐率,也能使進行數(shù)據訪問時的功耗減少。
[0039]本發(fā)明所述的棧緩存采用循環(huán)緩沖,在處理器核執(zhí)行數(shù)據訪問指令前,提前在棧緩存中分配數(shù)據存儲單元,使得該數(shù)據訪問指令對應的數(shù)據在棧緩存中一定命中。
[00