片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法
【專利摘要】本發(fā)明公開一種片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,步驟包括:1)在處理器啟動后,利用數(shù)據(jù)位置向量表記錄被取入處理器上片上Cache網(wǎng)絡(luò)中的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息;2)當(dāng)處理器核在執(zhí)行到程序中的預(yù)取指示指令時,跳轉(zhuǎn)執(zhí)行步驟3);3)在數(shù)據(jù)位置向量表中查找預(yù)取指示指令的目標(biāo)數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息,預(yù)取出目標(biāo)數(shù)據(jù)后存儲至預(yù)取指示指令指定的Cache塊中,并更新目標(biāo)數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息。本發(fā)明能夠?qū)崿F(xiàn)針對眾核處理器片上Cache網(wǎng)絡(luò)中的數(shù)據(jù)預(yù)取,具有實現(xiàn)原理簡單、預(yù)取準(zhǔn)確率高且靈活性強的優(yōu)點。
【專利說明】片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及眾核處理器的存儲訪問【技術(shù)領(lǐng)域】,尤其涉及一種片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法。
【背景技術(shù)】
[0002]存儲墻是指處理器訪問存儲器獲取指令和數(shù)據(jù)的時間遠(yuǎn)遠(yuǎn)高于處理器內(nèi)指令執(zhí)行的時間,是制約處理器性能發(fā)揮的主要因素之一。目前,隨著片上多核甚至眾核體系結(jié)構(gòu)的迅速發(fā)展,眾核核處理器的存儲墻問題變得更為突出。為了緩解存儲墻問題,通常是在處理器芯片上設(shè)計多級Cache (高速緩存),眾核處理器的每個處理器核心通常就匹配設(shè)計了本地Cache,眾多處理器核的片上Cache構(gòu)成了片上Cache網(wǎng)絡(luò)。在處理器工作過程中,將主存儲器取出的數(shù)據(jù)分別緩存于處理器芯片上的Cache網(wǎng)絡(luò)中。
[0003]片上Cache網(wǎng)絡(luò)通過二維網(wǎng)絡(luò)方式連接的處理器體系結(jié)構(gòu)模型如圖1所示,在其他的處理器中,也可能為環(huán)形網(wǎng)絡(luò),如Intel的XEON Phi的眾核協(xié)處理器,其片上Cache網(wǎng)絡(luò)就采用了環(huán)形網(wǎng)絡(luò)連接。片上Cache網(wǎng)絡(luò)中無論采用何種互聯(lián)方式,每個Cache塊都對應(yīng)了一個或兩個處理器核心作為處理器核心的本地Cache,處理器核訪問本地Cache的延遲要小于訪問對應(yīng)于其他處理器核的非本地Cache。
[0004]數(shù)據(jù)預(yù)取是指在處理器處理數(shù)據(jù)之前就將即將要處理的數(shù)據(jù)從遠(yuǎn)離處理器核的存儲層次(通常是片外存儲器)預(yù)先取到處理器片上的高速緩存(Cache)中,這樣處理器核進(jìn)行數(shù)據(jù)處理時就能從速度較快的片上Cache獲取數(shù)據(jù),減少了計算時訪問數(shù)據(jù)的時間。數(shù)據(jù)預(yù)取優(yōu)化是針對處理器多級存儲層次進(jìn)行存儲訪問優(yōu)化的有效手段。
[0005]目前,在高性能微處理器中普遍實現(xiàn)了硬件數(shù)據(jù)預(yù)取機制和軟件數(shù)據(jù)預(yù)取機制,其中硬件預(yù)取是通過處理器的存儲控制器根據(jù)處理器一段時間內(nèi)的存儲訪問行為,推斷未來一段時間內(nèi)處理器的訪存行為,從而自動實施存儲器的預(yù)取操作,但硬件預(yù)取的方法靈活性以及對應(yīng)用的適應(yīng)性較差。通常在硬件可以實現(xiàn)預(yù)取的情況下,多種處理器設(shè)計實現(xiàn)了軟件預(yù)取,通過在軟件中插入預(yù)取指令,實現(xiàn)軟件預(yù)取。軟件預(yù)取提升了預(yù)取操作的靈活性和適應(yīng)性,因而在編譯優(yōu)化或應(yīng)用程序編寫中通常是采用軟件預(yù)取機制來提高存儲訪問的性能。軟件預(yù)取方法雖然提高了預(yù)取的靈活性和適應(yīng)性,但是需要程序編寫人員或編譯器來插入預(yù)取操作,增加了編程的難度或者增加了編譯器實現(xiàn)的復(fù)雜度;另外,軟件預(yù)取的效果也極大地依賴于軟件預(yù)取的準(zhǔn)確性。
[0006]片上Cache網(wǎng)絡(luò)中的眾多Cache塊相對于一個特定的處理器核而言,其數(shù)據(jù)讀取時間有很大差異,需要將預(yù)取的數(shù)據(jù)放置在盡可能靠近處理器核的Cache塊中,因而針對片上眾核處理器的片上Cache網(wǎng)絡(luò),軟件預(yù)取非常復(fù)雜,不僅要考慮預(yù)取的時機還需要考慮預(yù)取數(shù)據(jù)存儲于片上Cache網(wǎng)絡(luò)中位置。
【發(fā)明內(nèi)容】
[0007]本發(fā)明要解決的技術(shù)問題是克服現(xiàn)有技術(shù)的不足,提供一種能夠?qū)崿F(xiàn)針對眾核處理器片上Cache網(wǎng)絡(luò)中數(shù)據(jù)預(yù)取的片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,具有實現(xiàn)原理簡單、預(yù)取準(zhǔn)確率高且靈活性強的優(yōu)點。
[0008]為解決上述技術(shù)問題,本發(fā)明提出的技術(shù)方案為:
一種片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,步驟包括:
1)在處理器啟動后,利用數(shù)據(jù)位置向量表記錄被取入處理器上片上Cache網(wǎng)絡(luò)中的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息;
2)當(dāng)處理器核在執(zhí)行到程序中的預(yù)取指示指令時,跳轉(zhuǎn)執(zhí)行步驟3);
3)在數(shù)據(jù)位置向量表中查找所述預(yù)取指示指令的目標(biāo)數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息,當(dāng)從存儲器中預(yù)取出目標(biāo)數(shù)據(jù)后存儲至預(yù)取指示指令指定的目的Cache塊中,并更新目標(biāo)數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息。
[0009]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟I)的具體實施步驟為:
1.1)在處理器初始化時建立用于記錄各個處理器核所訪問的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中位置的數(shù)據(jù)位置向量表且初始化為空,所述數(shù)據(jù)位置向量表的每一個表項的字段包括處理器核編號和Cache塊標(biāo)識;
1.2)在處理器啟動后,當(dāng)一個處理器核發(fā)出訪問指令時,如果所訪問的數(shù)據(jù)不在片上Cache網(wǎng)絡(luò)中,則處理器的存儲控制單元在將數(shù)據(jù)取入片上Cache網(wǎng)絡(luò)的同時在所述數(shù)據(jù)位置向量表中增加一條記錄,通過該記錄標(biāo)記該處理器核所處理的數(shù)據(jù)位于片上Cache網(wǎng)絡(luò)中的哪些Cache塊中。
[0010]作為本發(fā)明的進(jìn)一步改進(jìn),所述數(shù)據(jù)位置向量表的每一個表項的Cache塊位置字段的位數(shù)與Cache網(wǎng)絡(luò)中的Cache塊的數(shù)目相同且一一對應(yīng),且所述Cache塊位置字段以對應(yīng)位為O或I表示處理器核所訪問的數(shù)據(jù)是否位于Cache網(wǎng)絡(luò)中對應(yīng)的Cache塊中。
[0011]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟2)中的預(yù)取指示指令的字段包括讀寫標(biāo)識W/R、處理器核標(biāo)識CorelD、目標(biāo)數(shù)據(jù)起始地址Addr以及預(yù)取數(shù)據(jù)長度LTH ;所述讀寫標(biāo)識W/R為指定預(yù)取目標(biāo)數(shù)據(jù)的讀寫操作類型,所述處理器核標(biāo)識CoreID指定預(yù)取目標(biāo)數(shù)據(jù)目的存儲位置對應(yīng)的處理器核。
[0012]作為本發(fā)明的進(jìn)一步改進(jìn):如果所述預(yù)取指示指令的目標(biāo)數(shù)據(jù)為標(biāo)量數(shù)據(jù)或為寫操作類型的向量數(shù)據(jù),則所述處理器核標(biāo)識CoreID對應(yīng)為訪問所述目標(biāo)數(shù)據(jù)的處理器核;如果所述預(yù)取指示指令的目標(biāo)數(shù)據(jù)為讀操作類型的標(biāo)量數(shù)據(jù),則所述處理器核標(biāo)識CoreID對應(yīng)為訪問所述目標(biāo)數(shù)據(jù)的處理器核以外的其他處理器核。
[0013]作為本發(fā)明的進(jìn)一步改進(jìn),所述預(yù)取指示指令的字段中讀寫標(biāo)識W/R為I位、處理器核標(biāo)識CoreID為8位、目標(biāo)數(shù)據(jù)起始地址Addr為40位以及預(yù)取數(shù)據(jù)長度LTH為15位。
[0014]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟2)程序中嵌入的預(yù)取指示指令具體是指用戶編程嵌入或者使用編譯器編譯嵌入。
[0015]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于:
I)本發(fā)明結(jié)合眾核處理器的片上Cache網(wǎng)絡(luò)結(jié)構(gòu),利用數(shù)據(jù)位置向量表記錄每個處理核所訪問的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息,在需要執(zhí)行數(shù)據(jù)預(yù)取時根據(jù)記錄的Cache塊信息實現(xiàn)預(yù)取,能夠有效提高數(shù)據(jù)預(yù)取的準(zhǔn)確率,并通過預(yù)取指示指令給與預(yù)取提示同時指示預(yù)取數(shù)據(jù)的目的存儲位置,實現(xiàn)片上Cache網(wǎng)絡(luò)中快速、高效的數(shù)據(jù)預(yù)取。
[0016]2)本發(fā)明通過預(yù)取指示指令區(qū)分?jǐn)?shù)據(jù)的類型、數(shù)據(jù)讀寫訪問類型,將預(yù)取數(shù)據(jù)指定存儲至不同的位置,指定標(biāo)量數(shù)據(jù)以及寫操作的向量數(shù)據(jù)預(yù)取至處理器核的本地Cache中,而讀操作的向量數(shù)據(jù)指定預(yù)取至其他處理器核對應(yīng)的本地Cache中,即可以減少讀操作的向量數(shù)據(jù)和寫操作的向量數(shù)據(jù)在處理器核的本地Cache中的沖突,也可以保證向量數(shù)據(jù)盡可能地放置到眾核處理器的片上Cache中。
【專利附圖】
【附圖說明】
[0017]圖1是二維網(wǎng)絡(luò)連接的片上Cache網(wǎng)絡(luò)處理器體系結(jié)構(gòu)的結(jié)構(gòu)示意圖。
[0018]圖2是本實施例片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法的實現(xiàn)流程示意圖。
[0019]圖3是本實施例中數(shù)據(jù)位置向量表的結(jié)構(gòu)示意圖。
[0020]圖4是本實施例中預(yù)取指示指令的結(jié)構(gòu)示意圖。
[0021]圖5是本實施例中預(yù)取指示指令的實現(xiàn)原理示意圖。
【具體實施方式】
[0022]以下結(jié)合說明書附圖和具體優(yōu)選的實施例對本發(fā)明作進(jìn)一步描述,但并不因此而限制本發(fā)明的保護(hù)范圍。
[0023]如圖2所述,本實施例中片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,步驟包括:
1)在處理器啟動后,基于數(shù)據(jù)位置向量表記錄被取入處理器上片上Cache網(wǎng)絡(luò)中的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息;
2)當(dāng)處理器核在執(zhí)行到程序中嵌入的預(yù)取指示指令時,跳轉(zhuǎn)執(zhí)行步驟3);
3)在數(shù)據(jù)位置向量表中查找預(yù)取指示指令的目標(biāo)數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息,當(dāng)從存儲器中預(yù)取出目標(biāo)數(shù)據(jù)后存儲至預(yù)取指示指令指定的目的Cache塊中,并更新目標(biāo)數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息。
[0024]本實施例中,步驟I)的具體實施步驟為:
1.1)在處理器初始化時建立用于記錄各個處理器核所訪問的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中位置的數(shù)據(jù)位置向量表且初始化為空,數(shù)據(jù)位置向量表的每一個表項的字段包括處理器核編號和Cache塊標(biāo)識;
1.2)在處理器啟動后,當(dāng)一個處理器核發(fā)出訪問指令時,如果所訪問的數(shù)據(jù)不在片上Cache網(wǎng)絡(luò)中,則處理器的存儲控制單元在將數(shù)據(jù)取入片上Cache網(wǎng)絡(luò)的同時在數(shù)據(jù)位置向量表中增加一條記錄,通過該記錄標(biāo)記該處理器核所處理的數(shù)據(jù)位于片上Cache網(wǎng)絡(luò)中的哪些Cache塊中。
[0025]本實施例通過建立一個數(shù)據(jù)位置向量表記錄每個處理器核執(zhí)行的計算任務(wù)所訪問的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中Cache塊信息,即記錄所訪問的數(shù)據(jù)存儲在片上Cache網(wǎng)絡(luò)的哪些Cache塊中,數(shù)據(jù)位置向量表由處理器的存儲控制單元(MCU)管理、填寫和使用,當(dāng)需要執(zhí)行數(shù)據(jù)預(yù)取時由MCU根據(jù)數(shù)據(jù)位置向量表從記錄的對應(yīng)Cache塊中將數(shù)據(jù)取出,數(shù)據(jù)取出后相應(yīng)的更新數(shù)據(jù)位置向量。
[0026]如圖3所示,本實施例中數(shù)據(jù)位置向量表的每個表項的字段包括處理器核編號CorelD、Cache塊標(biāo)識CacheBlockMask,其中處理器核編號CoreID的位數(shù)由處理核的數(shù)量確定,例如本實施例處理器核編號CoreID取8位,則對應(yīng)最多可表示128個處理器核;Cache塊標(biāo)識CacheBlockMask表示與編號為CoreID的處理器核所訪問的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的哪些Cache塊中,CacheBlockMask為一個位向量,且位數(shù)根據(jù)片上Cache網(wǎng)絡(luò)中Cache塊的數(shù)目確定。
[0027]本實施例中,數(shù)據(jù)位置向量表的每一個表項的Cache塊標(biāo)識字段的位數(shù)與Cache網(wǎng)絡(luò)中的Cache塊的數(shù)目相同且一一對應(yīng),且Cache塊標(biāo)識字段以對應(yīng)位為O或I表示處理器核所訪問的數(shù)據(jù)是否位于Cache網(wǎng)絡(luò)中對應(yīng)的Cache塊中。例如芯片包括16個Cache塊時,CacheBlockMask的每一位對應(yīng)一個Cache塊,當(dāng)處理器核編號為O的處理器核所訪問的數(shù)據(jù)位于0,1,4 Cache塊中時,則設(shè)置數(shù)據(jù)位置向量表中對應(yīng)表項為000000001100100000000000。
[0028]本實施例結(jié)合眾核處理器的片上Cache網(wǎng)絡(luò)結(jié)構(gòu),通過數(shù)據(jù)位置向量表主動記錄每個處理核所訪問的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中位置,在需要執(zhí)行數(shù)據(jù)預(yù)取時再根據(jù)記錄的Cache塊位置信息實現(xiàn)預(yù)取,使得在數(shù)據(jù)預(yù)取過程中能夠?qū)崿F(xiàn)預(yù)取數(shù)據(jù)的位置感知,從而能夠快速、高效的預(yù)取到數(shù)據(jù),有效提高數(shù)據(jù)預(yù)取的準(zhǔn)確性,從而提升數(shù)據(jù)預(yù)取的效果。
[0029]本實施例通過預(yù)取指不指令(Posit1nAware Prefetch Instruct1n,PAPI)提示預(yù)取的執(zhí)行,如圖4所示,步驟2)中的預(yù)取指示指令的字段包括讀寫標(biāo)識W/R、處理器核標(biāo)識CorelD、目標(biāo)數(shù)據(jù)起始地址Addr以及預(yù)取數(shù)據(jù)長度LTH ;其中,讀寫標(biāo)識W/R指定預(yù)取數(shù)據(jù)的讀、寫操作類型,處理器核標(biāo)識CoreID指定預(yù)取數(shù)據(jù)目的存儲Cache塊對應(yīng)的處理器核。如果預(yù)取指示指令的目標(biāo)數(shù)據(jù)為標(biāo)量數(shù)據(jù)或為寫操作類型的向量數(shù)據(jù),則處理器核標(biāo)識CoreID對應(yīng)為訪問目標(biāo)數(shù)據(jù)的處理器核;如果預(yù)取指示指令的目標(biāo)數(shù)據(jù)為讀操作類型的標(biāo)量數(shù)據(jù),則處理器核標(biāo)識CoreID對應(yīng)為訪問目標(biāo)數(shù)據(jù)的處理器核以外的其他處理器核。通過處理器核標(biāo)識CoreID來區(qū)分處理器核處理的數(shù)據(jù)所對應(yīng)的為本地Cache塊或為非本地Cache塊,對于存儲至處理器核的非本地Cache塊中的數(shù)據(jù),則可以由硬件存取部件按照硬件預(yù)取機制實施預(yù)取,使得可以不用考慮片上具體有多少Cache塊,從而有利于體系結(jié)構(gòu)的擴展。
[0030]參見圖4,本實施例中眾核處理器包括有64個處理器核且每個處理器核擁有一個本地L2 Cache,預(yù)取指示指令的字段中讀寫標(biāo)識W/R為I位、處理器核標(biāo)識CoreID為8位、目標(biāo)數(shù)據(jù)起始地址Addr為40位以及預(yù)取數(shù)據(jù)長度LTH為15位,共64位。預(yù)取指示指令各字段數(shù)據(jù)位數(shù)還可根據(jù)實際需求進(jìn)行設(shè)定。
[0031 ] 本實施例中,步驟2)程序中的預(yù)取指示指令具體是指用戶編程嵌入或者使用編譯器編譯嵌入,由編譯器將預(yù)取指示函數(shù)轉(zhuǎn)換成預(yù)取指示指令。
[0032]如圖5所示,預(yù)取指示指令中首先區(qū)分標(biāo)量數(shù)據(jù)和向量數(shù)據(jù)將預(yù)取出的數(shù)據(jù)存儲至目的Cache塊中,對于標(biāo)量數(shù)據(jù),無論對標(biāo)量數(shù)據(jù)讀還是寫,均指定標(biāo)量數(shù)據(jù)預(yù)取到處理該數(shù)據(jù)的處理器核對應(yīng)的本地L2 Cache中;再區(qū)分向量數(shù)據(jù)的讀寫預(yù)取,對于寫操作,指定預(yù)取到處理該數(shù)據(jù)的處理器核的本地L2 Cache,對于讀操作,則指定預(yù)取到當(dāng)前處理器核的非本地Cache塊中,即為其他處理器核對應(yīng)的本地Cache中。按上述規(guī)則得到的預(yù)取指示函數(shù)插入程序中指定預(yù)取位置中,由編譯器編譯得到對應(yīng)的預(yù)取指示指令。
[0033]本實施例軟件預(yù)取實現(xiàn)中通過區(qū)分?jǐn)?shù)據(jù)的類型、數(shù)據(jù)讀寫訪問類型將預(yù)取數(shù)據(jù)指定存儲至不同的位置,其中標(biāo)量數(shù)據(jù)以及寫操作的向量數(shù)據(jù)指定預(yù)取至處理器核的本地Cache中,而將讀操作的向量數(shù)據(jù)指定預(yù)取至其他處理器核對應(yīng)的本地Cache中,由于標(biāo)量數(shù)據(jù)讀寫頻繁且只讀數(shù)據(jù)相對于寫數(shù)據(jù)而言不會造成Cache污染,這樣即可以減少讀操作的向量數(shù)據(jù)和寫操作的向量數(shù)據(jù)在處理器核的本地Cache中的沖突,也可以保證向量數(shù)據(jù)盡可能地放置到眾核處理器的片上Cache中。
[0034]以下以包含標(biāo)量數(shù)據(jù)、向量數(shù)據(jù)讀寫預(yù)取的具體實施例說明預(yù)取指示指令實現(xiàn)的具體流程,其中需要執(zhí)行預(yù)取的源程序如下所示:
int sp, sk;
int a [N], b [N];
for( i=0; i〈N; i++ )
{
a[i] = sp * a[i] + sk * b[i];
}
首先,對于其中標(biāo)量數(shù)據(jù)sp和sk都指定存儲至執(zhí)行上述程序的處理器核的本地L2Cache塊中,同時為了保證預(yù)取到本地L2 Cache中,對變量sp和sk均指定為寫操作。變量sp和sk的預(yù)取指示函數(shù)如下所示:
—prefetch ( —Write, selfCorelD,&sp,4);
—prefetch ( —Write, selfCorelD,&sk,4);
其中,—Write表示寫操作,selfCorelD為執(zhí)行當(dāng)前程序的處理器核編號,&sp和&sk分別為變量sp和sk的首地址,4為變量sp和sk的字節(jié)長度。
[0035]由于對于向量數(shù)據(jù)a既包含讀操作也包含寫操作,則指定向量數(shù)據(jù)a為寫操作類型,且指定存儲至當(dāng)前處理器核的本地L2 Cache中;對于向量數(shù)據(jù)b,由于為只讀向量,則指定向量數(shù)據(jù)b為讀操作類型,并指定存儲至其他處理器核對應(yīng)的L2 Cache。向量數(shù)據(jù)a和b的預(yù)取指示函數(shù)如下所示:
—prefetch( —Write, selfCorelD, &a,Cacheline);
—prefetch( —Read, otherCoreID, &b,Cacheline);
其中,—Write表示對變量為寫操作,—Read表示讀操作,selfCorelD為當(dāng)前處理器核編號,otherCoreID為其他處理核編號,&a是向量數(shù)據(jù)a的首地址,預(yù)取的數(shù)據(jù)長度為Cacheline,Cacheline為L2 Cache行長度的整數(shù)倍;&b是向量b的首地址,預(yù)取的數(shù)據(jù)長度為 Cacheline0
[0036]如下所示將各預(yù)取指示函數(shù)插入至程序中: int sp, sk;
int a [N], b [N];
—prefetch ( —Write, selfCorelD, &sp,4);
—prefetch ( —Write, selfCorelD, &sk,4);
—prefetch( —Write, selfCorelD, &a,Cacheline);
—prefetch( —Read, otherCoreID, &b,Cacheline); for( i=0; i〈N; i++ )
{
a[i] = sp * a[i] + sk * b[i];
}
本實施例通過預(yù)取指示指令指示預(yù)取的執(zhí)行,并指定待預(yù)取數(shù)據(jù)的信息以及目的存儲Cache塊,包括指示待預(yù)取數(shù)據(jù)所需要執(zhí)行的讀寫操作類型、預(yù)取的數(shù)據(jù)大小以及預(yù)取完成后的目的存儲位置。預(yù)取指示指令是作為存儲器的訪問示意(hint)通過處理器發(fā)送給存儲控制單元(MCU),以提示MCU執(zhí)行數(shù)據(jù)預(yù)取,MCU則根據(jù)預(yù)取指示指令預(yù)先讀取處理器即將訪問的數(shù)據(jù)到指定的Cache塊中。
[0037]本實施例中,當(dāng)處理器核執(zhí)行到程序中嵌入的預(yù)取指示指令時,由MCU解析指令編碼后,識別出目標(biāo)數(shù)據(jù)以及指定的預(yù)取操作類型、處理器核編號,預(yù)取指示指令只是發(fā)給MCU的預(yù)取提示,預(yù)取與否、如何預(yù)取的具體實現(xiàn)則是由MCU根據(jù)數(shù)據(jù)位置向量、Cache塊的數(shù)據(jù)存儲情況來進(jìn)行預(yù)取,處理器核從對應(yīng)Cache塊中預(yù)取出目標(biāo)數(shù)據(jù)后存儲至預(yù)取指示指令指定的目的存儲Cache塊中,并更新目標(biāo)數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中位置。
[0038]上述只是本發(fā)明的較佳實施例,并非對本發(fā)明作任何形式上的限制。雖然本發(fā)明已以較佳實施例揭露如上,然而并非用以限定本發(fā)明。因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明技術(shù)實質(zhì)對以上實施例所做的任何簡單修改、等同變化及修飾,均應(yīng)落在本發(fā)明技術(shù)方案保護(hù)的范圍內(nèi)。
【權(quán)利要求】
1.一種片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,其特征在于步驟包括: 1)在處理器啟動后,利用數(shù)據(jù)位置向量表記錄被取入處理器上片上Cache網(wǎng)絡(luò)中的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息; 2)當(dāng)處理器核在執(zhí)行到程序中的預(yù)取指示指令時,跳轉(zhuǎn)執(zhí)行步驟3); 3)在數(shù)據(jù)位置向量表中查找所述預(yù)取指示指令的目標(biāo)數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息,當(dāng)從存儲器預(yù)取出目標(biāo)數(shù)據(jù)后存儲至預(yù)取指令指定的目的Cache塊中,并更新目標(biāo)數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中的Cache塊信息。
2.根據(jù)權(quán)利要求1所述的片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,其特征在于,所述步驟I)的具體實施步驟為: 1.1)在處理器初始化時建立用于記錄各個處理器核所訪問的數(shù)據(jù)在片上Cache網(wǎng)絡(luò)中位置的數(shù)據(jù)位置向量表且初始化為空,所述數(shù)據(jù)位置向量表的每一個表項的字段包括處理器核編號和Cache塊標(biāo)識; 1.2)在處理器啟動后,當(dāng)一個處理器核發(fā)出訪問指令時,如果所訪問的數(shù)據(jù)不在片上Cache網(wǎng)絡(luò)中,則處理器的存儲控制單元在將數(shù)據(jù)從存儲器取入片上Cache網(wǎng)絡(luò)的同時在所述數(shù)據(jù)位置向量表中增加一條記錄,通過該記錄標(biāo)記該處理器核所處理的數(shù)據(jù)位于片上Cache網(wǎng)絡(luò)中的哪些Cache塊中。
3.根據(jù)權(quán)利要求2所述的片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,其特征在于:所述數(shù)據(jù)位置向量表的每一個表項的Cache塊位置字段的位數(shù)與Cache網(wǎng)絡(luò)中的Cache塊的數(shù)目相同且一一對應(yīng),且所述Cache塊位置字段以對應(yīng)位為O或I表示處理器核所訪問的數(shù)據(jù)是否位于Cache網(wǎng)絡(luò)中對應(yīng)的Cache塊中。
4.根據(jù)權(quán)利要求1或2或3所述的片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,其特征在于:所述步驟2)中的預(yù)取指示指令的字段包括讀寫標(biāo)識W/R、處理器核標(biāo)識CorelD、目標(biāo)數(shù)據(jù)起始地址Addr以及預(yù)取數(shù)據(jù)長度LTH ;所述讀寫標(biāo)識W/R為指定預(yù)取目標(biāo)數(shù)據(jù)的讀寫操作類型,所述處理器核標(biāo)識CoreID指定預(yù)取目標(biāo)數(shù)據(jù)目的存儲位置對應(yīng)的處理器核。
5.根據(jù)權(quán)利要求4所述的片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,其特征在于:如果所述預(yù)取指示指令的目標(biāo)數(shù)據(jù)為標(biāo)量數(shù)據(jù)或為寫操作類型的向量數(shù)據(jù),則所述處理器核標(biāo)識CoreID對應(yīng)為訪問所述目標(biāo)數(shù)據(jù)的處理器核;如果所述預(yù)取指示指令的目標(biāo)數(shù)據(jù)為讀操作類型的標(biāo)量數(shù)據(jù),則所述處理器核標(biāo)識CoreID對應(yīng)為訪問所述目標(biāo)數(shù)據(jù)的處理器核以外的其他處理器核。
6.根據(jù)權(quán)利要求5中所述的片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,其特征在于:所述預(yù)取指示指令的字段中讀寫標(biāo)識W/R為I位、處理器核標(biāo)識CoreID為8位、目標(biāo)數(shù)據(jù)起始地址Addr為40位以及預(yù)取數(shù)據(jù)長度LTH為15位。
7.根據(jù)權(quán)利要求6所述的片上Cache網(wǎng)絡(luò)中基于位置感知的數(shù)據(jù)預(yù)取方法,其特征在于:所述步驟2)程序中嵌入的預(yù)取指示指令具體是指用戶編程嵌入或者使用編譯器編譯嵌入。
【文檔編號】G06F12/08GK104484286SQ201410774705
【公開日】2015年4月1日 申請日期:2014年12月16日 優(yōu)先權(quán)日:2014年12月16日
【發(fā)明者】楊燦群, 李春江, 王 鋒, 黃春, 杜云飛, 彭林, 左克, 李寬, 姜浩 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)