本公開的領(lǐng)域
本公開大體上涉及存儲(chǔ)器系統(tǒng),且更特定來(lái)說(shuō),涉及采用多個(gè)存儲(chǔ)器的存儲(chǔ)器系統(tǒng)。
相關(guān)技術(shù)的描述
處理系統(tǒng)可實(shí)施多個(gè)類型或?qū)蛹?jí)的存儲(chǔ)器(例如,易失性和非易失性存儲(chǔ)器架構(gòu)或封裝內(nèi)和外部存儲(chǔ)器的組合)來(lái)滿足多種設(shè)計(jì)需求。舉例來(lái)說(shuō),可使用多層級(jí)存儲(chǔ)器來(lái)通過組合提供增加的帶寬、容量和可擴(kuò)展性中的一者或多者的存儲(chǔ)器而利用這些特征。在具有統(tǒng)一存儲(chǔ)器地址空間的多層級(jí)存儲(chǔ)器系統(tǒng)的存儲(chǔ)器之間分配數(shù)據(jù)結(jié)構(gòu)會(huì)影響系統(tǒng)性能。常規(guī)上,操作系統(tǒng)或所述系統(tǒng)的硬件基于靜態(tài)預(yù)定義條件或基于表面上任意的分配來(lái)確定如何在多層級(jí)存儲(chǔ)器系統(tǒng)的存儲(chǔ)器之間分配數(shù)據(jù)結(jié)構(gòu)。這常常會(huì)導(dǎo)致對(duì)多層級(jí)存儲(chǔ)器系統(tǒng)的不同存儲(chǔ)器的低效或無(wú)效利用。
附圖簡(jiǎn)述
通過參考附圖,可更好地理解本公開,且使其眾多特征和優(yōu)勢(shì)對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)顯而易見。在不同圖式中使用相同的參考符號(hào)會(huì)指示類似或等同的項(xiàng)目。
圖1是根據(jù)一些實(shí)施方案的采用多級(jí)存儲(chǔ)器系統(tǒng)的處理系統(tǒng)的框圖。
圖2是說(shuō)明根據(jù)一些實(shí)施方案的用于鏈表數(shù)據(jù)結(jié)構(gòu)的示例性存儲(chǔ)器分配的圖。
圖3是說(shuō)明根據(jù)一些實(shí)施方案的用于映射數(shù)據(jù)結(jié)構(gòu)的示例性存儲(chǔ)器分配的圖。
圖4是說(shuō)明根據(jù)一些實(shí)施方案的用于二叉樹數(shù)據(jù)結(jié)構(gòu)的示例性存儲(chǔ)器分配的圖。
圖5是說(shuō)明根據(jù)一些實(shí)施方案的用于在多級(jí)存儲(chǔ)器系統(tǒng)的存儲(chǔ)器之間的數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)器分配的方法的流程圖。
圖6是根據(jù)一些實(shí)施方案的采用多級(jí)存儲(chǔ)器系統(tǒng)的處理系統(tǒng)的框圖。
圖7是說(shuō)明根據(jù)一些實(shí)施方案的用于在多級(jí)存儲(chǔ)器系統(tǒng)的存儲(chǔ)器之間的數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)器分配的方法的流程圖。
詳細(xì)描述
圖1到7示出用于在采用多級(jí)存儲(chǔ)器系統(tǒng)的處理系統(tǒng)中為軟件程序的數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)器的示例性系統(tǒng)和技術(shù)。在一些實(shí)施方案中,所述處理系統(tǒng)包括多級(jí)存儲(chǔ)器系統(tǒng)和處理器,所述處理器具有處理核心和存儲(chǔ)器控制器。所述多級(jí)存儲(chǔ)器系統(tǒng)包括共享統(tǒng)一的存儲(chǔ)器地址空間的至少兩種不同存儲(chǔ)器級(jí)別的多個(gè)存儲(chǔ)器(每個(gè)級(jí)別界定層級(jí)和類型中的一者或兩者)。響應(yīng)于處理器執(zhí)行對(duì)庫(kù)的存儲(chǔ)器分配函數(shù)調(diào)用(例如,malloc)以將存儲(chǔ)器分配給數(shù)據(jù)結(jié)構(gòu),所述庫(kù)識(shí)別數(shù)據(jù)結(jié)構(gòu)的類型,且基于數(shù)據(jù)結(jié)構(gòu)的類型,操作系統(tǒng)在多級(jí)存儲(chǔ)器系統(tǒng)的多個(gè)存儲(chǔ)器之間分配數(shù)據(jù)結(jié)構(gòu)的多個(gè)部分。舉例來(lái)說(shuō),在一些實(shí)施方案中,操作系統(tǒng)在存儲(chǔ)器之間分配數(shù)據(jù)結(jié)構(gòu)的多個(gè)部分,使得將數(shù)據(jù)結(jié)構(gòu)的更頻繁搜索或存取的部分分配給具有較快存取時(shí)間的存儲(chǔ)器,而將數(shù)據(jù)結(jié)構(gòu)的較不頻繁搜索或存取的部分分配給包括較慢存取時(shí)間的存儲(chǔ)器。在一些實(shí)施方案中,所述函數(shù)調(diào)用包括多個(gè)參數(shù),使得當(dāng)處理器執(zhí)行所述函數(shù)調(diào)用時(shí),操作系統(tǒng)基于所述參數(shù)而分配數(shù)據(jù)結(jié)構(gòu)的多個(gè)部分。在另一實(shí)施方案中,所述函數(shù)調(diào)用包括多級(jí)存儲(chǔ)器系統(tǒng)的存儲(chǔ)器層級(jí)的指示符,使得當(dāng)處理器執(zhí)行包括所述指示符的函數(shù)調(diào)用時(shí),所述操作系統(tǒng)將數(shù)據(jù)結(jié)構(gòu)的所識(shí)別的部分分配給所指示的存儲(chǔ)器層級(jí)。所描述的技術(shù)允許基于處理核心有多可能搜索或存取數(shù)據(jù)結(jié)構(gòu)的多個(gè)部分對(duì)數(shù)據(jù)結(jié)構(gòu)的多個(gè)部分的更有效分配,從而提高性能且減少電力消耗。
圖1示出根據(jù)一些實(shí)施方案的采用多級(jí)存儲(chǔ)器系統(tǒng)101的處理系統(tǒng)100的框圖。處理系統(tǒng)100包括處理器102和存儲(chǔ)器層次104,其包括屬于兩個(gè)或更多不同級(jí)別的多個(gè)存儲(chǔ)器,每個(gè)級(jí)別界定層級(jí)和類型中的一者或兩者。存儲(chǔ)器層級(jí)是基于存儲(chǔ)器的位置上的存取速度。舉例來(lái)說(shuō),在封裝內(nèi)存儲(chǔ)器與封裝外存儲(chǔ)器(或“芯片上”與“芯片外”存儲(chǔ)器)之間,封裝內(nèi)存儲(chǔ)器的存取速度將一般更快。在至少一個(gè)實(shí)施方案中,多級(jí)存儲(chǔ)器系統(tǒng)101是多層級(jí)存儲(chǔ)器系統(tǒng)。存儲(chǔ)器類型是基于存儲(chǔ)器的特定架構(gòu),且每個(gè)存儲(chǔ)器可包括多種存儲(chǔ)器類型中的任一者,例如,更低粒度劃分,例如易失性存儲(chǔ)器對(duì)非易失性存儲(chǔ)器,或動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)對(duì)靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)對(duì)相變存儲(chǔ)器對(duì)憶阻器存儲(chǔ)器;或較高粒度劃分,例如在同一類型的通用存儲(chǔ)器架構(gòu)內(nèi)的不同架構(gòu),例如雙倍數(shù)據(jù)速率類型三同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DDR3SDRAM)、圖形雙倍數(shù)據(jù)速率版本五同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(GDDR5SDRAM),以及低功率雙倍數(shù)據(jù)速率同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(LPDDR SDRAM)。
在統(tǒng)一的存儲(chǔ)器地址空間116內(nèi)的存儲(chǔ)器106、107、108、109中的每一者基于其層級(jí)、類型或以上兩者而被分類為其相應(yīng)的存儲(chǔ)器級(jí)別(標(biāo)示為級(jí)別“I”和“II”)。因此,在一些實(shí)施方案中,存儲(chǔ)器106、107、108、109可被分類成使得同一級(jí)別內(nèi)的存儲(chǔ)器共享相同層級(jí)、相同類型以及其它操作特性(例如存取時(shí)間、帶寬、數(shù)據(jù)傳遞速率和類似者)中的一者或多者。為了示出,存儲(chǔ)器106、107可在它們兩者處于同一層級(jí)時(shí)(例如,封裝內(nèi))被分類為級(jí)別I,且存儲(chǔ)器108、109可在它們兩者處于同一層級(jí)時(shí)(例如,封裝外)被分類為級(jí)別II,或者存儲(chǔ)器106、107可在它們兩者實(shí)施(例如)DRAM架構(gòu)時(shí)被分類為級(jí)別I,而存儲(chǔ)器108、109可在它們兩者實(shí)施(例如)SRAM架構(gòu)時(shí)被分類為級(jí)別II,和類似者。
雖然存儲(chǔ)器層次104在圖1的實(shí)施方案中示出為兩個(gè)封裝內(nèi)存儲(chǔ)器106、107和兩個(gè)封裝外存儲(chǔ)器108、109,但其它實(shí)施方案可采用橫跨至少兩個(gè)級(jí)別的任何數(shù)目的存儲(chǔ)器。另外,在一些實(shí)施方案中,存儲(chǔ)器層次104可包括封裝內(nèi)和封裝外存儲(chǔ)器的任何組合,包括全部都是封裝外存儲(chǔ)器和全部都是封裝內(nèi)存儲(chǔ)器。存儲(chǔ)器層次104的一些實(shí)施方案可實(shí)施片疊式存儲(chǔ)器以增加容量或另外利用多個(gè)存儲(chǔ)器,同時(shí)維持較小的總覆蓋面積。片疊式存儲(chǔ)器可使用穿硅通孔(TSV)或其它垂直互連技術(shù)在垂直堆疊布置中實(shí)施,或在水平布置中實(shí)施,借此存儲(chǔ)器裸片相對(duì)于處理器或彼此水平地“堆疊”,使得它們經(jīng)由中介層進(jìn)行連接。在圖1的實(shí)施方案中,封裝內(nèi)存儲(chǔ)器106、107被示出為具有同一級(jí)別(標(biāo)示為級(jí)別“I”),且封裝外存儲(chǔ)器108、109被示出為具有同一級(jí)別(標(biāo)示為級(jí)別“II”)。此外,其它實(shí)施方案的多級(jí)存儲(chǔ)器系統(tǒng)101可包括不同層級(jí)、不同類型的存儲(chǔ)器,或其組合。舉例來(lái)說(shuō),在至少一個(gè)實(shí)施方案中,多級(jí)存儲(chǔ)器系統(tǒng)101包括全部是同一層級(jí)但是不同類型的存儲(chǔ)器。
處理器102包括處理器核心110、111,以及存儲(chǔ)器控制器112。雖然所示出的實(shí)施方案描繪在處理器102處實(shí)施的存儲(chǔ)器控制器112,但在其它實(shí)施方案中,可在其它地方(例如,在實(shí)施存儲(chǔ)器108、109中的一者或多者的堆疊式存儲(chǔ)器裝置的存儲(chǔ)器接口處)實(shí)施存儲(chǔ)器控制器112。此外,在一些實(shí)施方案中,處理器102包括多于一個(gè)存儲(chǔ)器控制器112。存儲(chǔ)器控制器112基于地址空間分配響應(yīng)于存儲(chǔ)器地址請(qǐng)求而從存儲(chǔ)器106、107、108、109檢索數(shù)據(jù)。因此,在所示出的實(shí)施方案中,存儲(chǔ)器控制器112和處理系統(tǒng)100將存儲(chǔ)器106、107、108、109看作單個(gè)、單層、統(tǒng)一的存儲(chǔ)器地址空間116。因此,不同級(jí)別(I、II)的存儲(chǔ)器在邏輯上仍是傳統(tǒng)存儲(chǔ)器層次的同一層級(jí)的部分,原因在于它們?nèi)慷际峭恢鞔鎯?chǔ)器或系統(tǒng)存儲(chǔ)器的部分,且因此全部可通過同一、統(tǒng)一、單層的物理存儲(chǔ)器地址空間進(jìn)行存取。
常規(guī)上,操作系統(tǒng)或所述系統(tǒng)的硬件基于靜態(tài)預(yù)定義條件或基于表面上任意的分配來(lái)確定如何在多級(jí)存儲(chǔ)器系統(tǒng)的存儲(chǔ)器之間分配數(shù)據(jù)結(jié)構(gòu)。由于這些常規(guī)方法無(wú)法利用將如何存取數(shù)據(jù)的較高層級(jí)(例如,軟件、數(shù)據(jù)結(jié)構(gòu)、算法等)語(yǔ)義或域?qū)S兄R(shí),所以常常將數(shù)據(jù)結(jié)構(gòu)的頻繁存取的部分分配給較低性能存儲(chǔ)器,從而導(dǎo)致降低的效率和整體降級(jí)的性能。
相比而言,在所示出的實(shí)施方案中,庫(kù)存儲(chǔ)裝置包括庫(kù)120,其通過應(yīng)用編程接口(API)122向程序員或其他用戶提供數(shù)據(jù)結(jié)構(gòu)、算法,以及其它服務(wù),使得庫(kù)120的后端實(shí)施動(dòng)態(tài)地處置存儲(chǔ)器分配決策。這允許基于將如何存取數(shù)據(jù)的較高層級(jí)語(yǔ)義或域?qū)S械闹R(shí)作出分配決策。舉例來(lái)說(shuō),在一些實(shí)施方案中,庫(kù)120可使用多層級(jí)存儲(chǔ)器知曉的軟件接口選擇性地將數(shù)據(jù)結(jié)構(gòu)分配給多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108 109,或其可維持來(lái)自不同存儲(chǔ)器層級(jí)的存儲(chǔ)器頁(yè)的其自身的池,且在其認(rèn)為適合時(shí)明確地處置數(shù)據(jù)結(jié)構(gòu)向這些頁(yè)的分配。庫(kù)120可為透明地管理存儲(chǔ)器分配的任何庫(kù),例如,C++標(biāo)準(zhǔn)模板庫(kù)(STL)、Java標(biāo)準(zhǔn)庫(kù)、C#和.NET框架、自定義庫(kù)、域?qū)S袔?kù),和類似者。基于庫(kù)120的存儲(chǔ)器分配決策,處理系統(tǒng)100的操作系統(tǒng)121將統(tǒng)一、單層地址空間分配給存儲(chǔ)器106、107、108、109。
在所示出的實(shí)施方案中,處理器核心111執(zhí)行軟件程序124,其包括對(duì)庫(kù)120的存儲(chǔ)器分配函數(shù)調(diào)用126以將存儲(chǔ)器分配給數(shù)據(jù)結(jié)構(gòu)128。軟件程序124經(jīng)由API 122存取庫(kù)120。在至少一個(gè)實(shí)施方案中,庫(kù)120參考數(shù)據(jù)結(jié)構(gòu)類型表130以基于待分配的數(shù)據(jù)結(jié)構(gòu)128的類型而確定如何在多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108、109之間分配數(shù)據(jù)結(jié)構(gòu)128。數(shù)據(jù)結(jié)構(gòu)類型表130可包括靜態(tài)分配規(guī)則、可維持基于存儲(chǔ)器地址歷史或其它信息而更新的探試程序,或類似者。數(shù)據(jù)結(jié)構(gòu)128可為多種數(shù)據(jù)結(jié)構(gòu)中的任一者,例如,鏈表、映射結(jié)構(gòu)、二叉樹、圖表結(jié)構(gòu)、陣列、多元組,和類似者?;跀?shù)據(jù)結(jié)構(gòu)128的類型,庫(kù)120可決定操作系統(tǒng)121將把數(shù)據(jù)結(jié)構(gòu)128的不同部分分配給多級(jí)存儲(chǔ)器系統(tǒng)101的不同存儲(chǔ)器,以努力維持處理器102的有效性能。
舉例來(lái)說(shuō),在所示出的實(shí)施方案中,庫(kù)120指示操作系統(tǒng)121將把數(shù)據(jù)結(jié)構(gòu)128的第一部分132分配給存儲(chǔ)器106,且將數(shù)據(jù)結(jié)構(gòu)128的第二部分134分配給存儲(chǔ)器109。庫(kù)120可基于數(shù)據(jù)結(jié)構(gòu)的類型的動(dòng)態(tài)存取模式(例如,應(yīng)將更頻繁使用的部分分配給具有更快存取時(shí)間的存儲(chǔ)器)、每個(gè)存儲(chǔ)器106、107、108、109或級(jí)別中可用的存儲(chǔ)器的量(例如,只要它們具有可用的存儲(chǔ)器空間,應(yīng)將盡可能多的數(shù)據(jù)結(jié)構(gòu)128分配給具有較快存取時(shí)間的存儲(chǔ)器)、這些的組合和類似者來(lái)作出此決策。在至少一個(gè)實(shí)施方案中,部分132、134分別表示數(shù)據(jù)結(jié)構(gòu)128的元數(shù)據(jù)和數(shù)據(jù),使得將元數(shù)據(jù)部分132分配給多個(gè)存儲(chǔ)器106、107、108、109中的第一組存儲(chǔ)器106,且將數(shù)據(jù)部分134分配給多個(gè)存儲(chǔ)器106、107、108、109中的第二組存儲(chǔ)器109。在所示出的實(shí)例中,將第一部分132(例如,數(shù)據(jù)結(jié)構(gòu)128的元數(shù)據(jù))分配給級(jí)別I的存儲(chǔ)器106,所述存儲(chǔ)器比第二部分134(例如,數(shù)據(jù)結(jié)構(gòu)128的數(shù)據(jù))被分配到的存儲(chǔ)器109提供更快的存取??蛇M(jìn)行此分配來(lái)提高處理器102的性能,這是因?yàn)閿?shù)據(jù)結(jié)構(gòu)128的元數(shù)據(jù)小于數(shù)據(jù)、因?yàn)樵獢?shù)據(jù)比數(shù)據(jù)被更頻繁地存取、這些原因的組合,和類似者。
雖然所示出的實(shí)施方案描繪了庫(kù)120將數(shù)據(jù)結(jié)構(gòu)128劃分為兩個(gè)部分132、134以分別分配在兩個(gè)存儲(chǔ)器106、109之間,但其它實(shí)施方案可將數(shù)據(jù)結(jié)構(gòu)128劃分為更多部分、將數(shù)據(jù)結(jié)構(gòu)分配在更多存儲(chǔ)器之間,或在不將數(shù)據(jù)結(jié)構(gòu)128劃分為多個(gè)部分的情況下對(duì)其進(jìn)行分配。此外,在一些實(shí)施方案中,庫(kù)120將數(shù)據(jù)結(jié)構(gòu)128的部分132、134分配給特定存儲(chǔ)器級(jí)別(I、II)以供操作系統(tǒng)121均勻地、任意地或基于一個(gè)或多個(gè)探試程序?qū)⑺霾糠值淖訁^(qū)段分布在特定級(jí)別的存儲(chǔ)器之間(例如,如果將部分132分配給級(jí)別I,那么操作系統(tǒng)121將部分132的子區(qū)段分布在級(jí)別I的存儲(chǔ)器106、107之間)。此外,部分和子區(qū)段可表示數(shù)據(jù)結(jié)構(gòu)128的任何部分或子區(qū)段,且不需要是鄰接的。
在一些實(shí)施方案中,庫(kù)120可提供多種接口或掛鉤中的任一者(這可為任選的),以允許程序員提供關(guān)于將如何在多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108、109之間分配數(shù)據(jù)結(jié)構(gòu)128的輸入或方向。舉例來(lái)說(shuō),在至少一個(gè)實(shí)施方案中,庫(kù)120允許程序員或其他用戶向參數(shù)136提供存儲(chǔ)器分配函數(shù)調(diào)用126,使得操作系統(tǒng)121基于參數(shù)136(或多個(gè)參數(shù))在多級(jí)存儲(chǔ)器系統(tǒng)101的多個(gè)存儲(chǔ)器106、109之間分配數(shù)據(jù)結(jié)構(gòu)128的部分132、134。參數(shù)136可指示(例如)數(shù)據(jù)結(jié)構(gòu)128的類型、如何將數(shù)據(jù)結(jié)構(gòu)128劃分為其部分132、134、將使用多少存儲(chǔ)器106、107、108、109、將使用哪些存儲(chǔ)器106、107、108、109、將使用哪些級(jí)別(I、II)、一個(gè)或多個(gè)限制(例如,僅對(duì)于前n行與數(shù)據(jù)分開地分配元數(shù)據(jù)),或類似者。
在至少一個(gè)實(shí)施方案中,庫(kù)120包括域?qū)S袔?kù)。域?qū)S袔?kù)的一些實(shí)例是專門用于基本線性代數(shù)的例程,例如基本線性代數(shù)子程序(BLAS)、自動(dòng)調(diào)諧線性代數(shù)軟件(ATLAS)、用于科學(xué)計(jì)算的便攜式可擴(kuò)展工具包(PETSc),以及應(yīng)用標(biāo)記語(yǔ)言(APPML)。例如,ATLAS是搜索優(yōu)化參數(shù)空間(組塊因子,展開)的自由化庫(kù),和用以產(chǎn)生高度優(yōu)化的硬件專有線性代數(shù)例程的實(shí)施算法。此類庫(kù)的實(shí)例是使用組塊用于矩陣-矩陣相乘。一個(gè)實(shí)施方案包括將庫(kù)120配置成針對(duì)存儲(chǔ)器層次104的每個(gè)層級(jí)采取不同的組塊機(jī)制,且將數(shù)據(jù)從下部層級(jí)移動(dòng)到上部層級(jí),所述上部層級(jí)還對(duì)應(yīng)于最內(nèi)層循環(huán)。此類例程假設(shè)對(duì)DRAM的存取是固定成本,但在包括多個(gè)級(jí)別的存儲(chǔ)器的系統(tǒng)中,將必須對(duì)算法進(jìn)行重構(gòu)以用于更快的存儲(chǔ)器。稀疏矩陣向量相乘(SpMV)是在許多高性能計(jì)算(HPC)應(yīng)用的性能方面較重要的算法的另一實(shí)例。一般使用壓縮行格式(CSR)來(lái)表示SpMV。在CSR中,非零行元素存儲(chǔ)在值陣列中,列索引存儲(chǔ)在列陣列中,且每個(gè)行的開始到列陣列中的索引存儲(chǔ)在行索引陣列中。在一個(gè)實(shí)施方案中,庫(kù)120在較快的存儲(chǔ)器(例如,級(jí)別I)中分配索引陣列的存儲(chǔ),且在較慢的存儲(chǔ)器(例如,級(jí)別II)中分配大值陣列的存儲(chǔ),從而允許更快的搜索。除了多級(jí)存儲(chǔ)器系統(tǒng)101的靜態(tài)優(yōu)化之外,這些庫(kù)可插入簡(jiǎn)檔導(dǎo)引的動(dòng)態(tài)優(yōu)化,以在執(zhí)行期間在不同的存儲(chǔ)器層級(jí)之間移動(dòng)數(shù)據(jù)結(jié)構(gòu)的多個(gè)組件。
圖2是示出根據(jù)一些實(shí)施方案的由圖1的處理系統(tǒng)100用于鏈表數(shù)據(jù)結(jié)構(gòu)200的示例性存儲(chǔ)器分配的圖。鏈表數(shù)據(jù)結(jié)構(gòu)200包括節(jié)點(diǎn)204到215,所述節(jié)點(diǎn)經(jīng)鏈接以使得節(jié)點(diǎn)204包括到節(jié)點(diǎn)205的鏈接或其它參考,節(jié)點(diǎn)205包括到節(jié)點(diǎn)206的鏈接,節(jié)點(diǎn)206包括到節(jié)點(diǎn)207的鏈接,且依此類推,直到最后的節(jié)點(diǎn)215。用以從一個(gè)或多個(gè)節(jié)點(diǎn)檢索數(shù)據(jù)的存儲(chǔ)器存取需要穿越鏈表數(shù)據(jù)結(jié)構(gòu)200的從第一節(jié)點(diǎn)204直到所需的節(jié)點(diǎn)的每個(gè)節(jié)點(diǎn)。舉例來(lái)說(shuō),對(duì)節(jié)點(diǎn)207的存儲(chǔ)器存取將需要處理器102開始于第一節(jié)點(diǎn)204、跟隨節(jié)點(diǎn)204到節(jié)點(diǎn)205的鏈接、跟隨節(jié)點(diǎn)205到節(jié)點(diǎn)206的鏈接,且最后跟隨節(jié)點(diǎn)206到節(jié)點(diǎn)207的鏈接。常規(guī)的存儲(chǔ)器分配在多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108、109之間任意地分配各個(gè)節(jié)點(diǎn)204到215,使得節(jié)點(diǎn)204、205、206、207可存儲(chǔ)在單獨(dú)的存儲(chǔ)器106、107、108、109中,且對(duì)節(jié)點(diǎn)207的存儲(chǔ)器存取將需要在處理器102穿越鏈表的節(jié)點(diǎn)204、205、206、207時(shí)存取單獨(dú)的存儲(chǔ)器106、107、108、109中的每一者。這些常規(guī)方法引入了低效,因?yàn)樾枰獙?duì)多個(gè)存儲(chǔ)器存取多次以到達(dá)節(jié)點(diǎn),且頻繁存取的數(shù)據(jù)可能被存儲(chǔ)在具有較慢的存取時(shí)間的存儲(chǔ)器處。相比而言,在所示出的實(shí)例中,操作系統(tǒng)121基于節(jié)點(diǎn)204到215的存取次序而分配鏈表數(shù)據(jù)結(jié)構(gòu)200的多個(gè)部分,使得將具有在鏈表數(shù)據(jù)結(jié)構(gòu)200的存取次序中較早的節(jié)點(diǎn)的片段分配給具有較快存取時(shí)間的存儲(chǔ)器,而將具有在鏈表數(shù)據(jù)結(jié)構(gòu)200的存取次序中較晚的節(jié)點(diǎn)的片段分配給具有較慢存取時(shí)間的存儲(chǔ)器。
響應(yīng)于經(jīng)由API 122對(duì)庫(kù)120的存儲(chǔ)器分配函數(shù)調(diào)用126以將存儲(chǔ)器分配給數(shù)據(jù)結(jié)構(gòu)128,庫(kù)120將數(shù)據(jù)結(jié)構(gòu)128識(shí)別為鏈表數(shù)據(jù)結(jié)構(gòu)200?;陬愋捅?30、由程序124提供的一個(gè)或多個(gè)參數(shù)136,或數(shù)據(jù)結(jié)構(gòu)128自身,庫(kù)120確定如何將鏈表數(shù)據(jù)結(jié)構(gòu)200劃分為多個(gè)部分且在多級(jí)存儲(chǔ)器系統(tǒng)101之間分配。在所示出的實(shí)施方案中,描繪兩個(gè)部分,第一部分表示鏈表數(shù)據(jù)結(jié)構(gòu)200的初始片段250,且第二部分表示鏈表數(shù)據(jù)結(jié)構(gòu)200的最后片段252。由于將至少比最后片段252的節(jié)點(diǎn)209到215頻繁地(且可能更頻繁地)存取初始片段250的節(jié)點(diǎn)204到208,所以操作系統(tǒng)121將初始片段250分配給包括具有相對(duì)較快的存取時(shí)間的存儲(chǔ)器106、107的存儲(chǔ)器級(jí)別I,且將最后片段252分配給包括具有相對(duì)較慢的存取時(shí)間的存儲(chǔ)器108、109的存儲(chǔ)器級(jí)別II。因此,對(duì)節(jié)點(diǎn)207的存儲(chǔ)器存取將僅需要存取級(jí)別I的一個(gè)或多個(gè)存儲(chǔ)器106、107,而對(duì)節(jié)點(diǎn)213的存儲(chǔ)器存取將需要存取用于節(jié)點(diǎn)204到208的級(jí)別I的一個(gè)或多個(gè)存儲(chǔ)器106、107,以及用于節(jié)點(diǎn)209到213的級(jí)別II的一個(gè)或多個(gè)存儲(chǔ)器108、109。由于從具有相對(duì)較快的存取時(shí)間的存儲(chǔ)器106、107存取節(jié)點(diǎn)204到208,所以處理器102能夠相對(duì)快速地穿越列表的初始片段250,從而允許對(duì)鏈表數(shù)據(jù)結(jié)構(gòu)200的更有效的存儲(chǔ)器存取。可將此鏈表存儲(chǔ)器分配技術(shù)應(yīng)用于任何類型的鏈表,例如,單向鏈表、雙向鏈表,和類似者。鏈表數(shù)據(jù)結(jié)構(gòu)200可在或可不在給定存儲(chǔ)器內(nèi)鄰接地分配。
雖然所示出的實(shí)例描繪被劃分為兩個(gè)部分的鏈表數(shù)據(jù)結(jié)構(gòu)200,所述兩個(gè)部分表示分配給兩個(gè)不同存儲(chǔ)器級(jí)別(I、II)的初始片段250和最后片段252,但庫(kù)120可確定鏈表數(shù)據(jù)結(jié)構(gòu)200的任何數(shù)目的部分,且可將所述部分分配給任何數(shù)目的存儲(chǔ)器級(jí)別或個(gè)別存儲(chǔ)器。此外,在一些實(shí)施方案中,庫(kù)120可基于由程序124提供的一個(gè)或多個(gè)參數(shù)136而作出其分配決策。舉例來(lái)說(shuō),參數(shù)136可指示如何將鏈表數(shù)據(jù)結(jié)構(gòu)200劃分為多個(gè)部分、應(yīng)創(chuàng)建多少部分、要使用哪些存儲(chǔ)器級(jí)別(I、II)、要使用哪些存儲(chǔ)器106、107、108、109、應(yīng)將鏈表數(shù)據(jù)結(jié)構(gòu)200的多個(gè)部分分配給哪些存儲(chǔ)器106、107、108、109或哪些級(jí)別(I、II)、鏈表數(shù)據(jù)結(jié)構(gòu)200的初始節(jié)點(diǎn)204,或類似者。
圖3是示出根據(jù)一些實(shí)施方案的由圖1的處理系統(tǒng)100用于映射數(shù)據(jù)結(jié)構(gòu)300的示例性存儲(chǔ)器分配的圖。映射數(shù)據(jù)結(jié)構(gòu)300包括綁定到多個(gè)值312到321的多個(gè)鍵302到311,使得存儲(chǔ)器存取需要鍵305的查找操作來(lái)檢索對(duì)應(yīng)值315。常規(guī)的存儲(chǔ)器分配在多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108、109之間任意地分配各個(gè)鍵302到311和值312到321。這些常規(guī)方法引入了低效,因?yàn)樾枰獙?duì)多個(gè)存儲(chǔ)器存取多次以到達(dá)一值(例如,歸因于線性鏈或其它散列沖突處置技術(shù)),且頻繁存取的數(shù)據(jù)可能被存儲(chǔ)在具有較慢存取時(shí)間的存儲(chǔ)器處。相比而言,在所示出的實(shí)例中,操作系統(tǒng)121分配映射數(shù)據(jù)結(jié)構(gòu)300的多個(gè)部分,使得將映射數(shù)據(jù)結(jié)構(gòu)300的鍵302到311分配給具有較快存取時(shí)間的存儲(chǔ)器,而將映射數(shù)據(jù)結(jié)構(gòu)300的對(duì)應(yīng)值312到321分配給具有較慢存取時(shí)間的存儲(chǔ)器。
響應(yīng)于經(jīng)由API 122對(duì)庫(kù)120的存儲(chǔ)器分配函數(shù)調(diào)用126以將存儲(chǔ)器分配給數(shù)據(jù)結(jié)構(gòu)128,庫(kù)120將數(shù)據(jù)結(jié)構(gòu)128識(shí)別為映射數(shù)據(jù)結(jié)構(gòu)300。基于類型表130、由程序124提供的一個(gè)或多個(gè)參數(shù)136,或數(shù)據(jù)結(jié)構(gòu)128自身,庫(kù)120確定如何將映射數(shù)據(jù)結(jié)構(gòu)300劃分為多個(gè)部分且在多級(jí)存儲(chǔ)器系統(tǒng)101之間分配。在所示出的實(shí)施方案中,描繪兩個(gè)部分,第一部分表示映射數(shù)據(jù)結(jié)構(gòu)300的鍵部分350,且第二部分表示映射數(shù)據(jù)結(jié)構(gòu)300的值部分352。操作系統(tǒng)121將鍵部分350分配給包括具有相對(duì)較快存取時(shí)間的存儲(chǔ)器106、107的存儲(chǔ)器級(jí)別I,且將值部分352分配給包括具有相對(duì)較慢存取時(shí)間的存儲(chǔ)器108、109的存儲(chǔ)器級(jí)別II。因此,鍵查找操作可快速地進(jìn)行,且隨后存儲(chǔ)器控制器112可從具有較慢存取時(shí)間的存儲(chǔ)器檢索對(duì)應(yīng)值。處理系統(tǒng)100將在涉及多個(gè)查找的情形中進(jìn)一步實(shí)現(xiàn)此存儲(chǔ)器分配的效率。此外,如果映射數(shù)據(jù)結(jié)構(gòu)300包括相對(duì)大的大小的一個(gè)或多個(gè)值312到321,那么分配給具有較慢存取時(shí)間但具有增加的容量的存儲(chǔ)器可為有益的。可將此映射數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)器分配技術(shù)應(yīng)用于任何類型的映射或其它關(guān)聯(lián)陣列數(shù)據(jù)。映射數(shù)據(jù)結(jié)構(gòu)300的鍵302到311和值312到321可在或可不在給定存儲(chǔ)器內(nèi)鄰接地分配。
雖然所示出的實(shí)例描繪被劃分為兩個(gè)部分的映射數(shù)據(jù)結(jié)構(gòu)300,所述兩個(gè)部分表示分配給兩個(gè)不同存儲(chǔ)器級(jí)別(I、II)的鍵部分350和值部分352,但庫(kù)120可確定映射數(shù)據(jù)結(jié)構(gòu)300的任何數(shù)目的部分,且可將所述部分分配給任何數(shù)目的存儲(chǔ)器級(jí)別或個(gè)別存儲(chǔ)器。此外,在一些實(shí)施方案中,庫(kù)120可基于由程序124提供的一個(gè)或多個(gè)參數(shù)136而作出其分配決策。舉例來(lái)說(shuō),參數(shù)136可指示如何將映射數(shù)據(jù)結(jié)構(gòu)300劃分為多個(gè)部分、應(yīng)創(chuàng)建多少部分、要使用哪些存儲(chǔ)器級(jí)別(I、II)、要使用哪些存儲(chǔ)器106、107、108、109、應(yīng)將映射數(shù)據(jù)結(jié)構(gòu)300的多個(gè)部分分配給哪些存儲(chǔ)器106、107、108、109或哪些級(jí)別(I、II),或類似者。
圖4是示出根據(jù)一些實(shí)施方案的由圖1的處理系統(tǒng)100用于二叉樹數(shù)據(jù)結(jié)構(gòu)400的示例性存儲(chǔ)器分配的圖。二叉樹數(shù)據(jù)結(jié)構(gòu)400包括多個(gè)節(jié)點(diǎn),其中每個(gè)節(jié)點(diǎn)存儲(chǔ)節(jié)點(diǎn)元數(shù)據(jù)402到412(例如,關(guān)于節(jié)點(diǎn)ID、鍵、指針,或到其它節(jié)點(diǎn)的鏈接的信息)和節(jié)點(diǎn)數(shù)據(jù)422到432。根據(jù)多種穿越方案中的任一者,用以檢索節(jié)點(diǎn)數(shù)據(jù)(例如,節(jié)點(diǎn)數(shù)據(jù)426)的存儲(chǔ)器存取通常需要穿越二叉樹數(shù)據(jù)結(jié)構(gòu)400的多個(gè)節(jié)點(diǎn)。舉例來(lái)說(shuō),在按序穿越方案的情況下,用以檢索節(jié)點(diǎn)數(shù)據(jù)426的存儲(chǔ)器存取將需要處理器102穿越二叉樹400,開始于節(jié)點(diǎn)元數(shù)據(jù)409,隨后是節(jié)點(diǎn)元數(shù)據(jù)405、節(jié)點(diǎn)元數(shù)據(jù)403且最后是節(jié)點(diǎn)元數(shù)據(jù)406,以檢索節(jié)點(diǎn)數(shù)據(jù)426。在層級(jí)次序穿越方案的情況下,用以檢索節(jié)點(diǎn)數(shù)據(jù)426的存儲(chǔ)器存取將需要處理器102穿越二叉樹400,開始于根節(jié)點(diǎn)元數(shù)據(jù)402,隨后是節(jié)點(diǎn)元數(shù)據(jù)403、節(jié)點(diǎn)元數(shù)據(jù)404、節(jié)點(diǎn)元數(shù)據(jù)405且最后是節(jié)點(diǎn)元數(shù)據(jù)406,以檢索節(jié)點(diǎn)數(shù)據(jù)426。
常規(guī)的存儲(chǔ)器分配在多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108、109之間任意地分配節(jié)點(diǎn)元數(shù)據(jù)402到412和節(jié)點(diǎn)數(shù)據(jù)422到432,使得根據(jù)穿越方案將被連續(xù)地穿越的節(jié)點(diǎn)可被分配給單獨(dú)的存儲(chǔ)器,使得對(duì)二叉樹數(shù)據(jù)結(jié)構(gòu)400的穿越可需要存取單獨(dú)的存儲(chǔ)器106、107、108、109中的每一者。這些常規(guī)方法引入了低效,因?yàn)樾枰獙?duì)多個(gè)存儲(chǔ)器存取多次以到達(dá)所請(qǐng)求的節(jié)點(diǎn),且二叉樹數(shù)據(jù)結(jié)構(gòu)400的頻繁存取的部分可能被存儲(chǔ)在具有較慢存取時(shí)間的存儲(chǔ)器處。相比而言,在所示出的實(shí)例中,操作系統(tǒng)121分配二叉樹數(shù)據(jù)結(jié)構(gòu)400的多個(gè)部分,使得將二叉樹數(shù)據(jù)結(jié)構(gòu)400的節(jié)點(diǎn)元數(shù)據(jù)402到412分配給具有較快存取時(shí)間的存儲(chǔ)器,而將二叉樹數(shù)據(jù)結(jié)構(gòu)400的對(duì)應(yīng)節(jié)點(diǎn)數(shù)據(jù)422到432分配給具有較慢存取時(shí)間的存儲(chǔ)器。
響應(yīng)于經(jīng)由API 122對(duì)庫(kù)120的存儲(chǔ)器分配函數(shù)調(diào)用126以將存儲(chǔ)器分配給數(shù)據(jù)結(jié)構(gòu)128,庫(kù)120將數(shù)據(jù)結(jié)構(gòu)128識(shí)別為二叉樹數(shù)據(jù)結(jié)構(gòu)400?;陬愋捅?30、由程序124提供的一個(gè)或多個(gè)參數(shù)136,或數(shù)據(jù)結(jié)構(gòu)128自身,庫(kù)120確定如何將二叉樹數(shù)據(jù)結(jié)構(gòu)400劃分為多個(gè)部分且在多級(jí)存儲(chǔ)器系統(tǒng)101之間分配。在所示出的實(shí)施方案中,描繪兩個(gè)部分,第一部分表示二叉樹數(shù)據(jù)結(jié)構(gòu)400的節(jié)點(diǎn)元數(shù)據(jù)部分450,且第二部分表示二叉樹數(shù)據(jù)結(jié)構(gòu)400的節(jié)點(diǎn)數(shù)據(jù)部分452。為了易于示出,節(jié)點(diǎn)元數(shù)據(jù)部分450和節(jié)點(diǎn)數(shù)據(jù)部分452僅指示二叉樹數(shù)據(jù)結(jié)構(gòu)400的選擇節(jié)點(diǎn),然而,節(jié)點(diǎn)元數(shù)據(jù)部分450表示全部節(jié)點(diǎn)元數(shù)據(jù)402到412,且節(jié)點(diǎn)數(shù)據(jù)部分452表示全部節(jié)點(diǎn)數(shù)據(jù)422到432。
操作系統(tǒng)121將節(jié)點(diǎn)元數(shù)據(jù)部分450分配給包括具有相對(duì)較快存取時(shí)間的存儲(chǔ)器106、107的存儲(chǔ)器級(jí)別I,且將節(jié)點(diǎn)數(shù)據(jù)部分452分配給包括具有相對(duì)較慢存取時(shí)間的存儲(chǔ)器108、109的存儲(chǔ)器級(jí)別II。因此,對(duì)二叉樹數(shù)據(jù)結(jié)構(gòu)400的穿越可快速地進(jìn)行,這是因?yàn)閷木哂休^快存取時(shí)間的一個(gè)或多個(gè)存儲(chǔ)器106、107存取節(jié)點(diǎn)元數(shù)據(jù)402到412,且隨后存儲(chǔ)器控制器112可從具有較慢存取時(shí)間的存儲(chǔ)器檢索所請(qǐng)求的節(jié)點(diǎn)數(shù)據(jù)。此外,分配給具有較慢存取時(shí)間但具有增加的容量的存儲(chǔ)器對(duì)于包括相對(duì)大的大小的節(jié)點(diǎn)數(shù)據(jù)422到432的二叉樹數(shù)據(jù)結(jié)構(gòu)400的節(jié)點(diǎn)可為有益的。
在另一實(shí)施方案中,操作系統(tǒng)121基于節(jié)點(diǎn)的穿越次序而分配二叉樹數(shù)據(jù)結(jié)構(gòu)400的多個(gè)部分,使得將具有根據(jù)二叉樹數(shù)據(jù)結(jié)構(gòu)400的穿越方案的穿越次序中較早的節(jié)點(diǎn)的片段分配給具有較快存取時(shí)間的存儲(chǔ)器,而將具有根據(jù)二叉樹數(shù)據(jù)結(jié)構(gòu)400的穿越方案的穿越次序中較晚的節(jié)點(diǎn)的片段分配給具有較慢存取時(shí)間的存儲(chǔ)器。舉例來(lái)說(shuō),在層級(jí)次序穿越方案的上下文中,由于將至少比較低層級(jí)(即,更靠近分支)的節(jié)點(diǎn)元數(shù)據(jù)頻繁地(且可能更頻繁地)存取較高層級(jí)(即,更靠近根節(jié)點(diǎn))的節(jié)點(diǎn)元數(shù)據(jù),所以操作系統(tǒng)121可將前三個(gè)層級(jí)(包括節(jié)點(diǎn)元數(shù)據(jù)402到408)分配給包括具有相對(duì)較快存取時(shí)間的存儲(chǔ)器106、107的存儲(chǔ)器級(jí)別I,且將分支層級(jí)(包括元數(shù)據(jù)409到412)分配給包括具有相對(duì)較慢存取時(shí)間的存儲(chǔ)器108、109的存儲(chǔ)器級(jí)別II。因此,對(duì)節(jié)點(diǎn)數(shù)據(jù)427的存儲(chǔ)器存取將僅需要存取級(jí)別I的一個(gè)或多個(gè)存儲(chǔ)器106、107,而對(duì)節(jié)點(diǎn)數(shù)據(jù)430的存儲(chǔ)器存取將需要存取用于節(jié)點(diǎn)元數(shù)據(jù)402到408的級(jí)別I的一個(gè)或多個(gè)存儲(chǔ)器106、107,以及用于節(jié)點(diǎn)元數(shù)據(jù)409、410的級(jí)別II的一個(gè)或多個(gè)存儲(chǔ)器108、109。由于從具有相對(duì)較快存取時(shí)間的存儲(chǔ)器106、107存取節(jié)點(diǎn)元數(shù)據(jù)402到408,所以處理器102能夠相對(duì)快速地穿越前三個(gè)層級(jí),從而允許對(duì)二叉樹數(shù)據(jù)結(jié)構(gòu)400的更有效的存儲(chǔ)器存取。
可將這些二叉樹數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)器分配技術(shù)應(yīng)用于任何類型的圖表數(shù)據(jù)結(jié)構(gòu),例如,三叉樹結(jié)構(gòu)、B+樹結(jié)構(gòu)、有向無(wú)環(huán)圖(DAG),或類似者。此外,節(jié)點(diǎn)元數(shù)據(jù)402到412和節(jié)點(diǎn)數(shù)據(jù)422到432可在或可不在給定存儲(chǔ)器內(nèi)鄰接地分配。雖然所示出的實(shí)例描繪被劃分為兩個(gè)部分的二叉樹數(shù)據(jù)結(jié)構(gòu)400,所述兩個(gè)部分表示分配給兩個(gè)不同存儲(chǔ)器級(jí)別(I、II)的節(jié)點(diǎn)元數(shù)據(jù)部分450和節(jié)點(diǎn)數(shù)據(jù)部分452,但庫(kù)120可確定二叉樹數(shù)據(jù)結(jié)構(gòu)400的任何數(shù)目的部分,且可將所述部分分配給任何數(shù)目的存儲(chǔ)器級(jí)別或個(gè)別存儲(chǔ)器。此外,在一些實(shí)施方案中,庫(kù)120可基于由程序124提供的一個(gè)或多個(gè)參數(shù)136而作出其分配決策。舉例來(lái)說(shuō),參數(shù)136可指示如何將二叉樹數(shù)據(jù)結(jié)構(gòu)400劃分為多個(gè)部分、應(yīng)創(chuàng)建多少部分、要使用哪些存儲(chǔ)器級(jí)別(I、II)、要使用哪些存儲(chǔ)器106、107、108、109、應(yīng)將二叉樹數(shù)據(jù)結(jié)構(gòu)400的多個(gè)部分分配給哪些存儲(chǔ)器106、107、108、109或哪些級(jí)別(I、II)、穿越方案,或類似者。
圖5是示出根據(jù)一些實(shí)施方案的用于在多級(jí)存儲(chǔ)器系統(tǒng)的存儲(chǔ)器之間的數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)器分配的示例性方法500的流程圖。為了易于參考,下文在圖1的多級(jí)存儲(chǔ)器系統(tǒng)101的示例性上下文中描述了方法500。方法500在框502處起始,借此當(dāng)處理器核心111執(zhí)行包括對(duì)庫(kù)120的存儲(chǔ)器分配函數(shù)調(diào)用126的軟件程序124以將存儲(chǔ)器分配給數(shù)據(jù)結(jié)構(gòu)128時(shí),處理系統(tǒng)100接收存儲(chǔ)器分配函數(shù)調(diào)用126。
在框504處,處理系統(tǒng)100經(jīng)由API 122存取庫(kù)120。庫(kù)120通過API 122向程序員或其他用戶提供數(shù)據(jù)結(jié)構(gòu)、算法,以及其它服務(wù),使得庫(kù)120的后端實(shí)施動(dòng)態(tài)地處置存儲(chǔ)器分配決策。這允許基于將如何存取數(shù)據(jù)的較高層級(jí)語(yǔ)義或域?qū)S械闹R(shí)作出分配決策。舉例來(lái)說(shuō),在一些實(shí)施方案中,庫(kù)120可使用多層級(jí)存儲(chǔ)器知曉的軟件接口選擇性地將數(shù)據(jù)結(jié)構(gòu)分配給多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108 109,或其可維持來(lái)自不同存儲(chǔ)器層級(jí)的存儲(chǔ)器頁(yè)的其自身的池,且在其認(rèn)為適合時(shí)明確地處置數(shù)據(jù)結(jié)構(gòu)向這些頁(yè)的分配。庫(kù)120可為透明地管理存儲(chǔ)器分配的任何庫(kù),例如,C++標(biāo)準(zhǔn)模板庫(kù)(STL)、Java標(biāo)準(zhǔn)庫(kù)、C#和.NET框架、自定義庫(kù)、域?qū)S袔?kù),和類似者。
在框506處,庫(kù)120基于(例如)與存儲(chǔ)器分配函數(shù)調(diào)用、探試程序或類似者一起包括的一個(gè)或多個(gè)參數(shù)136而識(shí)別數(shù)據(jù)結(jié)構(gòu)128的類型。在至少一個(gè)實(shí)施方案中,庫(kù)120參考數(shù)據(jù)結(jié)構(gòu)類型表130以確定與在多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108、109之間分配數(shù)據(jù)結(jié)構(gòu)128相關(guān)的信息。舉例來(lái)說(shuō),根據(jù)框508,庫(kù)120可使用類型表130來(lái)識(shí)別數(shù)據(jù)結(jié)構(gòu)128的多個(gè)部分。庫(kù)120基于數(shù)據(jù)結(jié)構(gòu)類型而識(shí)別數(shù)據(jù)結(jié)構(gòu)128的部分132、132。在一些實(shí)施方案中,庫(kù)120基于由程序124提供的一個(gè)或多個(gè)參數(shù)136而識(shí)別數(shù)據(jù)結(jié)構(gòu)128的部分132、134??苫诖嫒☆l率、數(shù)據(jù)大小或類似者來(lái)確定所述部分。庫(kù)120向操作系統(tǒng)121指示將如何基于部分132、134來(lái)分配數(shù)據(jù)結(jié)構(gòu)128。
在框510處,操作系統(tǒng)121在多級(jí)存儲(chǔ)器系統(tǒng)101的多個(gè)存儲(chǔ)器106、109之間分配數(shù)據(jù)結(jié)構(gòu)的部分132、134。所述分配可基于數(shù)據(jù)結(jié)構(gòu)的類型的動(dòng)態(tài)存取模式(例如,應(yīng)將更頻繁使用的部分分配給具有較快存取時(shí)間的存儲(chǔ)器)、每個(gè)存儲(chǔ)器106、107、108、109或級(jí)別中可用的存儲(chǔ)器的量(例如,只要它們具有可用的存儲(chǔ)器空間,應(yīng)將盡可能多的數(shù)據(jù)結(jié)構(gòu)128分配給具有較快存取時(shí)間的存儲(chǔ)器)、這些的組合,和類似者。在至少一個(gè)實(shí)施方案中,部分132、134分別表示數(shù)據(jù)結(jié)構(gòu)128的元數(shù)據(jù)和數(shù)據(jù),使得將元數(shù)據(jù)部分132分配給多個(gè)存儲(chǔ)器106、107、108、109中的第一組存儲(chǔ)器106,且將數(shù)據(jù)部分134分配給多個(gè)存儲(chǔ)器106、107、108、109中的第二組存儲(chǔ)器109??勺鞒龃朔峙鋪?lái)提高處理器102的性能,這是因?yàn)閿?shù)據(jù)結(jié)構(gòu)128的元數(shù)據(jù)小于數(shù)據(jù)、因?yàn)樵獢?shù)據(jù)比數(shù)據(jù)被更頻繁地存取、這些原因的組合,和類似者。
圖6是根據(jù)一些實(shí)施方案的圖1的處理系統(tǒng)100執(zhí)行用于在多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108、109之間分配數(shù)據(jù)結(jié)構(gòu)128的存儲(chǔ)器分配的框圖。在所示出的實(shí)施方案中,庫(kù)620提供用于軟件624的接口以將存儲(chǔ)器位置信息、偏好和類似者傳送到基礎(chǔ)系統(tǒng)軟件(例如,操作軟件(OS)、管理程序等)。也就是說(shuō),所述庫(kù)通過API 622提供數(shù)據(jù)結(jié)構(gòu)、算法和其它服務(wù),使得程序員或其他用戶可使用函數(shù)調(diào)用602、604來(lái)指示操作系統(tǒng)621將如何在多級(jí)存儲(chǔ)器系統(tǒng)101的存儲(chǔ)器106、107、108、109之間分配數(shù)據(jù)結(jié)構(gòu)128。舉例來(lái)說(shuō),在至少一個(gè)實(shí)施方案中,API 622包括對(duì)每個(gè)存儲(chǔ)器106、107、108、109、每個(gè)存儲(chǔ)器級(jí)別(I、II)、每個(gè)存儲(chǔ)器層級(jí),或每個(gè)存儲(chǔ)器類型的函數(shù)調(diào)用602。函數(shù)調(diào)用602包括存儲(chǔ)器指示符(描繪為“I-1”)以向存儲(chǔ)器106指示存儲(chǔ)器分配。函數(shù)調(diào)用602可進(jìn)一步包括參數(shù)以指示將把數(shù)據(jù)結(jié)構(gòu)或其它存儲(chǔ)器對(duì)象分配給此存儲(chǔ)器106、數(shù)據(jù)大小準(zhǔn)則、哪一存儲(chǔ)器(如果函數(shù)調(diào)用存儲(chǔ)器指示符指示除特定存儲(chǔ)器之外的存儲(chǔ)器級(jí)別、層級(jí)或類型),或類似者。
在一些實(shí)施方案中,API 622包括接受參數(shù)的通用存儲(chǔ)器分配函數(shù)調(diào)用604,包括將被分配的數(shù)據(jù)結(jié)構(gòu)128(在函數(shù)調(diào)用604中描繪為“DS”)和用以指示將把數(shù)據(jù)結(jié)構(gòu)128分配給哪一存儲(chǔ)器106的存儲(chǔ)器指示符(“I-1”)。在一些實(shí)施方案中,存儲(chǔ)器指示符(“I-1”)可指示存儲(chǔ)器級(jí)別(I、II)、多個(gè)存儲(chǔ)器、多個(gè)存儲(chǔ)器級(jí)別,或類似者。此外,不同的實(shí)施方案可允許或需要若干參數(shù)中的任一者,例如,數(shù)據(jù)結(jié)構(gòu)類型、數(shù)據(jù)結(jié)構(gòu)部分、分配大小限制,和類似者。如所示出,當(dāng)處理器核心111執(zhí)行包括經(jīng)由API 622對(duì)庫(kù)620的存儲(chǔ)器分配函數(shù)調(diào)用602、604、606中的任一者的軟件程序624時(shí),庫(kù)620指示操作系統(tǒng)621將把數(shù)據(jù)結(jié)構(gòu)128分配給由存儲(chǔ)器指示符(“I-1”)識(shí)別的存儲(chǔ)器106。雖然所示出的實(shí)施方案針對(duì)存儲(chǔ)器分配函數(shù)調(diào)用602、604使用標(biāo)準(zhǔn)C庫(kù)“malloc”,但還可容易將這些技術(shù)應(yīng)用于其它編程語(yǔ)言及其相應(yīng)的存儲(chǔ)器分配接口。在一些實(shí)施方案中,使用指令606或其它注釋類語(yǔ)法以通過經(jīng)由存儲(chǔ)器指示符直接向編譯器指定特定存儲(chǔ)器或存儲(chǔ)器級(jí)別而指定存儲(chǔ)器分配。舉例來(lái)說(shuō),在一些實(shí)施方案中,指令606由編譯器處理,且將信息傳遞到庫(kù)620或操作系統(tǒng)621。
不同的實(shí)施方案可采用不同的約定來(lái)處置分配。舉例來(lái)說(shuō),在一些實(shí)施方案中,由函數(shù)調(diào)用602、604或指令606的存儲(chǔ)器指示符指定的存儲(chǔ)器分配是嚴(yán)格要求,使得如果所指示的存儲(chǔ)器106不具有足夠的可用存儲(chǔ)器空間來(lái)滿足存儲(chǔ)器分配請(qǐng)求,那么分配將失敗(例如,函數(shù)調(diào)用602、604可使“空”指針與“I-1”存儲(chǔ)器指示符一起返回)。在其它實(shí)施方案中,由函數(shù)調(diào)用602、604或指令606指定的存儲(chǔ)器分配更多地被看作建議,使得如果所指示的存儲(chǔ)器106不具有足夠的可用存儲(chǔ)器空間來(lái)滿足存儲(chǔ)器分配請(qǐng)求,那么操作系統(tǒng)621分配除了(例如)根據(jù)其它探試程序、任意地或類似者所指定的數(shù)據(jù)結(jié)構(gòu)之外的數(shù)據(jù)結(jié)構(gòu)128。至少一個(gè)實(shí)施方案中,如果不遵循由函數(shù)調(diào)用或指令指定的存儲(chǔ)器分配,那么處理系統(tǒng)100向程序員或其他用戶返回關(guān)于實(shí)際分配的額外信息。
庫(kù)620的一些實(shí)施方案提供“realloc”或“remap”函數(shù)調(diào)用,其命令(或建議)OS應(yīng)將現(xiàn)有的分配重新分配給新的存儲(chǔ)器層級(jí)(任選地同時(shí)重新設(shè)定分配的大小)。變體可包括用以允許重新映射現(xiàn)有的存儲(chǔ)器分配的子集或區(qū)的接口。此外,庫(kù)620的一些實(shí)施方案提供額外的接口功能以幫助區(qū)分分配來(lái)自哪里。舉例來(lái)說(shuō),在一個(gè)實(shí)施方案中,如果“ptr”與存儲(chǔ)器106中的物理存儲(chǔ)器位置相關(guān)聯(lián),那么函數(shù)調(diào)用“類型whichMemory(ptr)”返回“I-1”。在一些實(shí)施方案中,這些存儲(chǔ)器分配技術(shù)與基于不一致存儲(chǔ)器地址(NUMA)的存儲(chǔ)器分配方案組合使用。
圖7是示出根據(jù)一些實(shí)施方案的用于在多級(jí)存儲(chǔ)器系統(tǒng)的存儲(chǔ)器之間的數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)器分配的示例性方法700的流程圖。為了易于參考,下文在圖6的多級(jí)存儲(chǔ)器系統(tǒng)101的示例性上下文中描述了方法700。方法700在框702處起始,借此當(dāng)處理器核心111執(zhí)行包括對(duì)庫(kù)620的存儲(chǔ)器分配函數(shù)調(diào)用602、604的軟件程序624以將存儲(chǔ)器分配給數(shù)據(jù)結(jié)構(gòu)128時(shí),處理系統(tǒng)100接收存儲(chǔ)器分配函數(shù)調(diào)用602、604。
在框704處,處理系統(tǒng)100經(jīng)由API 622存取庫(kù)620。庫(kù)620通過API 622向程序員或其他用戶提供數(shù)據(jù)結(jié)構(gòu)、算法,以及其它服務(wù),使得其充當(dāng)用于軟件624的接口以將存儲(chǔ)器位置信息、偏好和類似者傳送到基礎(chǔ)系統(tǒng)軟件。因此,庫(kù)620有助于程序員或其他用戶經(jīng)由函數(shù)調(diào)用來(lái)指定存儲(chǔ)器分配。
在框706處,處理系統(tǒng)100識(shí)別函數(shù)調(diào)用602、604的存儲(chǔ)器指示符(在圖6中描繪為“I-1”)以確定分配的指定位置。舉例來(lái)說(shuō),存儲(chǔ)器指示符(“I-1”)可指定一個(gè)或多個(gè)存儲(chǔ)器106、107、108、109、一個(gè)或多個(gè)級(jí)別(I、II)、一個(gè)或多個(gè)存儲(chǔ)器層級(jí)、一個(gè)或多個(gè)存儲(chǔ)器類型,或類似者。存儲(chǔ)器指示符(“I-1”)可包括經(jīng)由函數(shù)調(diào)用傳遞的參數(shù)、與函數(shù)調(diào)用分開的語(yǔ)法指示符,或函數(shù)調(diào)用自身。
在框708處,處理系統(tǒng)100基于函數(shù)調(diào)用126的參數(shù)而識(shí)別數(shù)據(jù)結(jié)構(gòu)128的多個(gè)部分。在一些實(shí)施方案中,所述參數(shù)可通過識(shí)別以下各者來(lái)指定數(shù)據(jù)結(jié)構(gòu)128的所述部分:數(shù)據(jù)結(jié)構(gòu)128的類型、所述部分的邊界、所述部分的數(shù)據(jù)大小、所述部分的數(shù)據(jù)類型,或類似者??蓪?shù)據(jù)結(jié)構(gòu)128劃分為任何數(shù)目的任何大小的數(shù)據(jù)部分,包括表示整個(gè)數(shù)據(jù)結(jié)構(gòu)128的單個(gè)部分。
在框710處,操作系統(tǒng)621基于存儲(chǔ)器指示符(“I-1”)而在多級(jí)存儲(chǔ)器系統(tǒng)101的多個(gè)存儲(chǔ)器106、107、108、109之間分配數(shù)據(jù)結(jié)構(gòu)128的多個(gè)部分。舉例來(lái)說(shuō),響應(yīng)于函數(shù)調(diào)用604包括存儲(chǔ)器指示符“I-1”和參數(shù)“DS”,操作系統(tǒng)621將整個(gè)數(shù)據(jù)結(jié)構(gòu)128分配給級(jí)別I的第一存儲(chǔ)器106。在一些實(shí)施方案中,處理系統(tǒng)100可將函數(shù)調(diào)用602、604及其指定的存儲(chǔ)器指示符“I-1”和參數(shù)看作建議而不是要求。一般來(lái)說(shuō),方法700通過以下操作而促進(jìn)對(duì)多級(jí)存儲(chǔ)器系統(tǒng)的有效利用:允許程序員或其他用戶(包括應(yīng)用軟件)使用包括存儲(chǔ)器指示符的函數(shù)調(diào)用或指令來(lái)管理數(shù)據(jù)結(jié)構(gòu)在多級(jí)存儲(chǔ)器系統(tǒng)的多個(gè)存儲(chǔ)器之間的分配。
在一些實(shí)施方案中,上文所描述的技術(shù)的某些方面可由執(zhí)行軟件的處理系統(tǒng)的一個(gè)或多個(gè)處理器實(shí)施。所述軟件包括存儲(chǔ)在或另外有形地體現(xiàn)在非暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)媒體上的一或多組可執(zhí)行命令。所述軟件可包括命令和某些數(shù)據(jù),其當(dāng)由一個(gè)或多個(gè)處理器執(zhí)行時(shí)會(huì)操縱所述一個(gè)或多個(gè)處理器執(zhí)行上文所描述的技術(shù)的一個(gè)或多個(gè)方面。所述非暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)媒體可包括(例如)磁盤或光盤存儲(chǔ)裝置、固態(tài)存儲(chǔ)裝置,例如快閃存儲(chǔ)器、高速緩沖存儲(chǔ)器、隨機(jī)存取存儲(chǔ)器(RAM),或其它非易失性存儲(chǔ)器裝置,和類似者。存儲(chǔ)在非暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)媒體上的可執(zhí)行命令可呈由一個(gè)或多個(gè)處理器解譯或可以其它方式執(zhí)行的源代碼、匯編語(yǔ)言代碼、目標(biāo)代碼,或其它命令格式。
應(yīng)注意,不需要上文在一般描述中所描述的所有活動(dòng)或要素,可能不需要特定活動(dòng)或裝置的一部分,且可執(zhí)行一個(gè)或多個(gè)其它活動(dòng),或包括除了所描述的要素之外的要素。此外,列舉活動(dòng)的次序不一定是執(zhí)行活動(dòng)的次序。而且,已經(jīng)參考特定實(shí)施方案描述了概念。然而,本領(lǐng)域技術(shù)人員應(yīng)了解,可在不脫離所附權(quán)利要求書中所陳述的本公開的范圍的情況下作出各種修改和改變。因此,可在說(shuō)明性意義而不是限制性意義上對(duì)待說(shuō)明書和圖,且希望所有此類修改包括在本公開的范圍內(nèi)。
上文已關(guān)于特定實(shí)施方案描述了益處、其它優(yōu)勢(shì)和問題的解決方案。然而,這些益處、優(yōu)勢(shì)、問題的解決方案以及可導(dǎo)致任何益處、優(yōu)勢(shì)或解決方案發(fā)生或變得更加突出的任何特征不應(yīng)被解釋為任何或所有權(quán)利要求的關(guān)鍵、所需或?qū)嵸|(zhì)特征。另外,上文公開的特定實(shí)施方案僅是說(shuō)明性的,因?yàn)樗_的標(biāo)的可以按受益于本文教導(dǎo)的本領(lǐng)域技術(shù)人員顯而易見的不同但等效的方式加以修改和實(shí)踐。除了所附權(quán)利要求書中所描述的內(nèi)容之外,不希望對(duì)本文示出的構(gòu)造或設(shè)計(jì)的細(xì)節(jié)進(jìn)行限制。因此顯然的是,可更改或修改上文所公開的特定實(shí)施方案,且所有此類變化都被視為在所公開的標(biāo)的的范圍內(nèi)。因此,本文尋求的保護(hù)在所附權(quán)利要求書中予以陳述。