一個(gè)實(shí)施例涉及存儲器分配。
中央處理單元(CPU)利用緩存,該緩存加載存儲在供中央處理單元使用的隨機(jī)訪問存儲器(RAM)中的數(shù)據(jù)。與從RAM讀取數(shù)據(jù)和將數(shù)據(jù)寫入RAM相反,緩存為本地讀取和寫入數(shù)據(jù)提供了快速的解決方案。緩存保持在其最常利用的存儲數(shù)據(jù)中。
CPU包括當(dāng)對將被用于存儲數(shù)據(jù)的那些地址執(zhí)行代碼時(shí)的指令。相應(yīng)地址位置的存儲器配置影響電子控制單元(ECU)的啟用緩存結(jié)構(gòu)的存儲器帶寬。例如,如果存儲器配置設(shè)計(jì)不正確(例如,效率低下),那么當(dāng)預(yù)定了相應(yīng)的執(zhí)行指令流的存儲器分配時(shí),在檢索數(shù)據(jù)時(shí)可能發(fā)生減速,特別對于在RAM中反復(fù)利用的那些位置。如果CPU必須在RAM內(nèi)訪問存儲器的各種位置,那么會導(dǎo)致較慢的CPU操作。就是說,如果未有效地組織存儲器分配,那么CPU處理時(shí)間也會效率低下。存儲器配置影響CPU的啟用緩存結(jié)構(gòu)的存儲器帶寬。如果由可執(zhí)行指令訪問的RAM的存儲器配置設(shè)計(jì)效率低下,那么如果任務(wù)必須持續(xù)地訪問RAM的各種位置,則可能出現(xiàn)檢索數(shù)據(jù)瓶頸。
技術(shù)實(shí)現(xiàn)要素:
實(shí)施例的優(yōu)點(diǎn)在于當(dāng)訪問隨機(jī)訪問存儲器(RAM)時(shí)優(yōu)化存儲器配置。中央處理單元(CPU)利用在隨機(jī)訪問存儲器中存儲數(shù)據(jù)的緩存來讀取/寫入CPU最常使用的數(shù)據(jù)。硬件將RAM實(shí)現(xiàn)為存儲器塊,用于由CPU處理的數(shù)據(jù)的臨時(shí)存儲。存儲在緩存和RAM中的數(shù)據(jù)可以是來自先前的計(jì)算操作或新操作的數(shù)據(jù)。當(dāng)待處理數(shù)據(jù)不在緩存中時(shí),系統(tǒng)加載RAM中的另一個(gè)數(shù)據(jù)塊來替換緩存塊。本文所描述的技術(shù)識別信號變量對并將鄰近的存儲器位置分配給彼此極其接近的信號變量,所述信號變量對將利用在彼此極其接近(即,可執(zhí)行指令基本上彼此鄰近)時(shí)執(zhí)行的RAM的存儲器位置。以這種方式,在知道將基本上頻繁地和基本上依次地訪問兩個(gè)存儲器位置的情況下,將信號變量分配到彼此接近的存儲器位置來減少CPU嘗試替換緩存塊的處理時(shí)間。因此,本文的技術(shù)高效地將存儲器配置分配到相應(yīng)的信號變量,使得那些頻繁且通常訪問的相應(yīng)信號變量對在RAM中被分配到彼此接近的、由RAM訪問的存儲器位置。這改善了CPU的效率并且減少了瓶頸。
實(shí)施例涉及通過全局存儲器裝置上的中央處理單元的指令緩存對存儲器訪問進(jìn)行排序的方法。在全局存儲器裝置中提取鏈接映射文件的信號列表。從信號列表獲得涉及執(zhí)行任務(wù)的存儲器訪問痕跡。從訪問痕跡中識別全局存儲器裝置中訪問的存儲器位置。確定全局存儲器裝置中訪問的每對存儲器位置的相關(guān)值。利用相應(yīng)的存儲器位置對基于可執(zhí)行指令的接近性來計(jì)算相關(guān)值。在全局存儲器裝置內(nèi)重排訪問的存儲器位置作為確定的相關(guān)值的函數(shù)。修改訪問全局存儲器裝置的可執(zhí)行文件。當(dāng)訪問全局存儲器裝置時(shí),可執(zhí)行文件優(yōu)化存儲器配置。
附圖說明
圖1是用于優(yōu)化任務(wù)分區(qū)的硬件的框圖。
圖2是示例性的加權(quán)相關(guān)矩陣。
圖3是用于優(yōu)化存儲器配置的方法的流程圖。
具體實(shí)施方式
圖1是用于優(yōu)化存儲器配置的硬件的框圖。執(zhí)行應(yīng)用程序代碼的相應(yīng)算法在電子控制單元(ECU)10上執(zhí)行。執(zhí)行的算法是在產(chǎn)品(例如,車輛發(fā)動機(jī)控制裝置、計(jì)算機(jī)、游戲、工廠設(shè)備、或任何其他利用電子控制單元的電子控制裝置)中將被執(zhí)行的那些程序。在全局存儲器裝置12(例如,隨機(jī)訪問存儲器)內(nèi)數(shù)據(jù)被寫入和讀取到各種地址/從各種地址寫入和讀取數(shù)據(jù)。
映射鏈接文件14是文本文件,其詳細(xì)說明了數(shù)據(jù)與代碼存儲在全局存儲器裝置12內(nèi)的可執(zhí)行文檔內(nèi)部。映射鏈接文件14包括含有事件日志的跟蹤文件,該事件日志描述了全局存儲器裝置12內(nèi)已出現(xiàn)的事務(wù)處理以及代碼和數(shù)據(jù)的存儲地。因此,可以獲得鏈接文件映射14用于識別所有信號和相關(guān)聯(lián)的存儲器地址,當(dāng)ECU 10執(zhí)行可執(zhí)行指令時(shí),訪問該存儲器地址。
挖掘處理器16用于執(zhí)行來自全局存儲器裝置12的數(shù)據(jù)挖掘18,重排相關(guān)聯(lián)的存儲器位置20,確定與用于識別最佳存儲器配置的置換22相關(guān)聯(lián)的最小能量函數(shù),可將信號變量分配給該存儲器配置來用于讀取和寫入數(shù)據(jù)。
指令執(zhí)行流包括由ECU 10執(zhí)行的代碼(即,可執(zhí)行代碼)。代碼包括全局存儲器裝置12內(nèi)的地址位置,訪問該全局存儲器裝置12用于寫入相應(yīng)地址位置或從相應(yīng)地址位置檢索數(shù)據(jù)。用于加載指令的示例性指令流可具有如下格式:
ADDR X-LD#sa,Rx.
用于向全局存儲器裝置12中的地址寫入指令的示例性指令流可以具有如下格式:
ADDR Y-WR Rx,#sb,
其中sa和sb表示識別存儲器位置的可執(zhí)行指令的信號變量,訪問該存儲器位置用于在全局存儲器裝置12內(nèi)寫入或讀取數(shù)據(jù)。對于所有信號變量{si│i=1,…,N},構(gòu)建識別所有信號變量之間的相關(guān)性的相關(guān)矩陣W。把每個(gè)信號變量列在相關(guān)矩陣W的豎直側(cè)和相關(guān)矩陣W的水平側(cè)以用于交叉比較。確定每個(gè)相應(yīng)變量對的相關(guān)因子w。例如,對于信號變量sa和sb,相關(guān)因子wab位于相關(guān)矩陣W中的兩個(gè)信號變量的交叉部分。與不彼此接近的信號變量對相比,在i-緩存中是基本相鄰指令的那些信號變量對將產(chǎn)生更大的相關(guān)值w。由指令執(zhí)行流中的相鄰指令引用的相應(yīng)信號變量對表明在可執(zhí)行代碼中彼此及時(shí)接近地執(zhí)行的這些相應(yīng)信號變量在相關(guān)矩陣中給了更高的相關(guān)值。因此,與在進(jìn)一步間隔開的指令中執(zhí)行的相應(yīng)信號變量對相比,在相鄰指令中執(zhí)行的相應(yīng)信號變量對將具有更大的相關(guān)因子w。
圖2表示示例性相關(guān)矩陣W。信號變量在相關(guān)矩陣W中均被水平地(例如,行)和豎直地(例如,列)標(biāo)記。如圖所示,對于所有信號變量{si│i=1,…,N},輸入每個(gè)相應(yīng)信號變量對的相關(guān)值。在指令執(zhí)行計(jì)劃中彼此更加靠近地執(zhí)行的那些信號變量生成更大的相關(guān)值。此外,更頻繁地引用的那些相應(yīng)信號變量對將進(jìn)一步增大相關(guān)值。
相關(guān)值可在指令執(zhí)行流內(nèi)規(guī)范化成接近一對信號變量的函數(shù)。以下是對相關(guān)值進(jìn)行規(guī)范化的示例性函數(shù):
如果|ADDR X-ADDR Y|<1K,
那么wab=wab+1。
如以上函數(shù)中所示,如果它們的差小于1K,那么規(guī)范化相關(guān)值;然而,應(yīng)該理解的是,1K的比較值的大小是示例性的,并且可使用其他值,這可取決于諸如指令緩存大小在內(nèi)的各種因素。
在生成相關(guān)矩陣W之后,重排相關(guān)矩陣W以識別可被輸入用于分選的最小能量函數(shù)的置換,這有助于識別高效的存儲器配置。為了重排相關(guān)矩陣W,必須置換相關(guān)矩陣W中的相應(yīng)信號的位置。首先,應(yīng)當(dāng)重新定位相關(guān)矩陣W的信號變量,使得相關(guān)矩陣W的所有對角項(xiàng)具有零值。接下來,在相關(guān)矩陣W的所有相關(guān)值之中為最高的相關(guān)值應(yīng)當(dāng)最接近于由相關(guān)矩陣W的零值項(xiàng)所表示對角線。還重新定位相關(guān)矩陣的信號變量來解釋對相關(guān)值的重排。因此,具有最高相關(guān)值的那些相關(guān)值被定位于更接近零對角線,而減小的相關(guān)值被放置成向外遠(yuǎn)離零對角線。
在重新定位相關(guān)值和相關(guān)聯(lián)的信號變量之后,置換的相關(guān)矩陣W被輸入到如下所述的最小能量函數(shù)。
相對于相關(guān)矩陣W,通過尋找頂點(diǎn)的置換{π1,...,πN}實(shí)現(xiàn)存儲器位置的所需排序,使得相鄰頂點(diǎn)是最相關(guān)的頂點(diǎn)。所選的置換表明由相同任務(wù)組頻繁訪問的數(shù)據(jù)可適合本地?cái)?shù)據(jù)緩存。數(shù)學(xué)上地,所需重排置換可以表達(dá)為以下最小能量函數(shù):
最小
這等于尋找逆置換π-1使得以下能量函數(shù)最小化:
最小
通過利用用于以下特征方程的第二最小特征值計(jì)算特征向量(q2)來大體上解決以上問題:
(D-W)q=λDq
其中拉普拉斯矩陣是L=D-W,次數(shù)矩陣D是定義為的對角線,然后按升序分選由此獲得的q2。分選之后的頂點(diǎn)的索引是所需置換{π1,...,πN}。通過根據(jù)置換結(jié)果重新布置存儲器位置,隨后可從該置換中得到存儲器位置的順序。
圖3示出了用于優(yōu)化由ECU訪問的全局存儲器裝置的存儲器配置的技術(shù)的流程圖。在步驟30中,通過相應(yīng)的ECU任務(wù)來執(zhí)行用于軟件程序的應(yīng)用代碼。在全局存儲器裝置中執(zhí)行讀取和寫入操作(例如,存儲器未在挖掘處理器上)。
在步驟31中,通過挖掘處理器從全局存儲器中的鏈接映射文件中提取信號列表。信號列表識別由可執(zhí)行指令執(zhí)行的任務(wù)命中的存儲器位置的痕跡。
在步驟32中,挖掘處理器收集存儲器訪問痕跡。
在步驟33中,構(gòu)建包括用于信號變量對的相關(guān)值的相關(guān)矩陣W,該信號變量對識別相應(yīng)存儲器位置是本地指令緩存中的相同任務(wù)組頻繁訪問的數(shù)據(jù)的等級。將分配給每個(gè)相應(yīng)信號變量對相關(guān)值。取決于相應(yīng)信號變量的地址是否在預(yù)定大小內(nèi),可隨后標(biāo)準(zhǔn)化相關(guān)值。相關(guān)值也可以基于在可執(zhí)行指令流中執(zhí)行相應(yīng)信號變量對的頻率。
在步驟34中,重排相關(guān)矩陣,使得相關(guān)矩陣W中的多個(gè)相關(guān)值中的較高相關(guān)值放置得更接近于矩陣的零對角線。減值的其余相關(guān)值被放置在以降序向外遠(yuǎn)離零對角線的相關(guān)矩陣中。
步驟35中,置換的相關(guān)矩陣被輸入到最小能量函數(shù),以利用用于每個(gè)相關(guān)值的第二最小特征值來計(jì)算特征向量(q2)。然后使用升序分選每個(gè)計(jì)算的特征值來識別用于全局存儲器裝置中的存儲器配置的所需置換。
在步驟36中,修改可執(zhí)行二進(jìn)制文件來分配如在步驟35中所確定的存儲器配置。
本文所描述的技術(shù)識別利用RAM的存儲器位置的信號變量對,在彼此極其接近(例如,可執(zhí)行指令基本上彼此鄰近)時(shí)執(zhí)行該RAM的存儲器位置。將相鄰存儲器位置分配給確定為在可執(zhí)行指令中彼此極其接近的信號變量。以這種方式,頻繁地和基本上依次地執(zhí)行的相應(yīng)信號變量在全局存儲器裝置中被基本上分配到接近存儲位置處,這減少了CPU嘗試去搜索和尋找相應(yīng)存儲器位置的處理時(shí)間。因此,本文所描述的技術(shù)有效地將存儲器配置分配給彼此靠近的可執(zhí)行指令的相應(yīng)信號變量,以減少處理時(shí)間。這改善了CPU的效率并且減少了瓶頸。
盡管已經(jīng)詳細(xì)描述了本發(fā)明的某些實(shí)施例,但是那些熟悉本發(fā)明所涉及的領(lǐng)域的技術(shù)人員將認(rèn)識到用于實(shí)踐如以下權(quán)利要求所限定的本發(fā)明的各種可選設(shè)計(jì)和實(shí)施例。