專利名稱:存儲器管理方法、信息處理裝置、程序的生成方法以及程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通過多個(gè)處理器核心構(gòu)成的多處理器系統(tǒng)中的存儲器的管理
方法,特別涉及根據(jù)編譯器(compiler)所取得的信息將被處理器訪問的數(shù)據(jù)
分配到存儲器的被分割后的區(qū)域中的方法。
背景技術(shù):
將多個(gè)處理器核心集成到一個(gè)芯片上而成的多核處理器(芯片多處理器) 不斷被各個(gè)微處理器廠家發(fā)布。除了超級計(jì)算機(jī)、服務(wù)器、臺式計(jì)算機(jī)以及 PC服務(wù)器領(lǐng)域之外,信息家電以及裝置組裝領(lǐng)域(例如,移動(dòng)電話機(jī)、游戲 機(jī)、車輛導(dǎo)航系統(tǒng)、數(shù)字影像接收機(jī)、HDD/DVD記錄器.播放器等)中,也 看到了微處理器的多核化的趨勢。
這樣,當(dāng)前在從信息家電到超級計(jì)算機(jī)幾乎所有的信息設(shè)備中,都使用多 核處理器,并且認(rèn)為今后會(huì)有更多的信息設(shè)備組裝多核處理器。
不僅是細(xì)粒度命令級(fine grain instruction level)的并4亍性,即使是并行 性更大的循環(huán)(loop)級的并行性、粒度更粗的循環(huán)間的并行性、以及函數(shù)間 的粗粒度任務(wù)并行性也能夠應(yīng)用多核處理器。這樣,多核處理器在通過利用更 大的并行性能夠提高處理器的處理性能這一點(diǎn)上很有利。另外,多核處理器能 夠使用n臺處理器核心來實(shí)現(xiàn)同一性能,因此,使時(shí)鐘頻率為n分之一,施加 的電壓也降低,由此,能夠?qū)⒑碾?以電壓的平方增大)抑制得較低,多核處 理器在這一方面也是有利的。
另外,在軟件方面,多處理器用的并行程序設(shè)計(jì)(programing)的調(diào)試 (tuning)通常需要大量的時(shí)間,因此,應(yīng)用軟件的開發(fā)非常困難。但是,在 集成了比較少的處理器的當(dāng)前時(shí)期,通過逐次使程序自動(dòng)并行化的自動(dòng)并行化 編譯器能夠獲得高性能。在信息家電領(lǐng)域,應(yīng)用程序的質(zhì)量和數(shù)量決定了在市 場上的竟?fàn)幜?,因此,如果能夠通過編譯器實(shí)現(xiàn)4核、8核、16核的多處理器 用的程序的自動(dòng)并行化,則多核的優(yōu)越性會(huì)升高。另夕卜,在多粒度并行(multi-grain parallelizing )化中,將語句級 (sentence-level )、循環(huán)級(loop-level )、更粗級別(例如,循環(huán)間、子程序 (subroutine)間、基本塊(basicblock)間)的所有的并行性組合起來,通過
可最早執(zhí)行條件解析來提取并行性的技術(shù)已經(jīng)在特開2001-175619號公報(bào)中公開。
發(fā)明內(nèi)容
以往就進(jìn)行了這種局部存儲器(local memory )的最佳化。但是,以往的 局部存儲器的最佳化只是在并行循環(huán)連續(xù)的情況下,通過連續(xù)地執(zhí)行能夠并行
的循環(huán),來循環(huán)使用存儲器上的數(shù)據(jù)。
但是,在一個(gè)循環(huán)中使用的數(shù)據(jù)大小比局部存儲器的大小要大的情況很 多,在循環(huán)中產(chǎn)生了數(shù)據(jù)的裝載以及存儲。此時(shí),處理器需要等待處理直到接 下來使用的數(shù)據(jù)準(zhǔn)備好,從而產(chǎn)生了處理器的處理的系統(tǒng)開銷(overhead)。
另外,根據(jù)一邊使用局部存儲器上的數(shù)據(jù)一 邊執(zhí)行程序的數(shù)據(jù)局部化 (localization),為了僅使用局部存儲器來進(jìn)行處理,必須將時(shí)序(sequential) 的循環(huán)以及基本塊中使用的大的數(shù)據(jù)也存儲在局部存儲器中。沒有載入局部存 儲器中的數(shù)據(jù)保存在共享存儲器中。因此,希望在整個(gè)程序中對數(shù)據(jù)應(yīng)用局部 化。
另外,在靜態(tài)調(diào)度(static scheduling)時(shí)和生成動(dòng)態(tài)調(diào)度碼時(shí),也使用用 于將各處理器上的局部存儲器或者分散共享存儲器有效地進(jìn)行利用、將處理器 間的數(shù)據(jù)轉(zhuǎn)發(fā)量最小化的數(shù)據(jù)局部化(data localization )。
另夕卜,當(dāng)處理器的集成度變高、一個(gè)芯片中包含的處理器核心數(shù)量增多時(shí), 即使將程序并行化也幾乎不會(huì)提高處理性能。之所以這樣說是因?yàn)楫a(chǎn)生了如下 的存儲墻(memory wall)的問題處理器的動(dòng)作變快,處理器的處理速度與 存儲器的存儲器存取速度的差變大,因此無法將處理器使用的數(shù)據(jù)在適當(dāng)?shù)亩?時(shí)提供給存儲器。
因此,需要很好地使用與處理器接近地設(shè)置的存儲器。即,由于與處理器 接近的存儲器的存儲容量較小,因此,在需要大型數(shù)據(jù)的情況下,需要將數(shù)據(jù) 分割開裝載到存儲器中。而且,由于存儲器之間的數(shù)據(jù)轉(zhuǎn)發(fā)需要時(shí)間,因此, 要求進(jìn)行對處理器的程序順序進(jìn)行了設(shè)計(jì)的調(diào)度,以便循環(huán)使用裝載于存儲器中的數(shù)據(jù)。并且,當(dāng)在存儲器之間轉(zhuǎn)發(fā)數(shù)據(jù)時(shí),需要使用DMA控制器來隱藏 系統(tǒng)開銷。編譯器在對通過處理器執(zhí)行的程序的并行性進(jìn)行解析時(shí),取得程序內(nèi)的任 務(wù)的執(zhí)行順序的信息,還解析任務(wù)之間的數(shù)據(jù)的依存關(guān)系(定義、參照的關(guān)系)。 另外,當(dāng)決定分支(branch)時(shí),可知使用相同數(shù)據(jù)的程序。這樣,通過編譯 器所取得的信息,可知使用存儲在存儲器中的數(shù)據(jù)的定時(shí),從而能夠在多個(gè)任 務(wù)之間循環(huán)使用數(shù)據(jù)。即,在本發(fā)明中,為了在持續(xù)進(jìn)行處理時(shí)盡可能連續(xù)地長時(shí)間保持在配置 于處理器附近的高速存儲器中保存的數(shù)據(jù),而高效率地配置數(shù)據(jù)。具體來說, 將需要的數(shù)據(jù)保存在處理器附近的高速存儲器中,將不需要的數(shù)據(jù)依次轉(zhuǎn)發(fā)到 雖然低速但是容量大的存儲器中。而且,在本發(fā)明中,對數(shù)據(jù)進(jìn)行分割后分配 給局部存儲器。另外,為了能夠長時(shí)間使用存儲在局部存儲器中的數(shù)據(jù),根據(jù) 編譯器所帶有的信息(數(shù)據(jù)在何時(shí)在何處使用的信息),來決定將哪個(gè)數(shù)據(jù)逐 出。另外,調(diào)度DMA以便先裝載需要的數(shù)據(jù)。另外,本發(fā)明不僅能夠應(yīng)用于同一種類的處理器中的存儲器的管理,還能 夠應(yīng)用于不同種類的異種'多處理器中的存儲器管理。根據(jù)本發(fā)明,存儲器的存儲區(qū)域的管理變得容易,因此,能夠使數(shù)據(jù)在局 部存儲器以及分散共享存儲器中的配置最佳化。由此,能夠循環(huán)使用存儲器中 裝載的數(shù)據(jù),能夠減少存儲器之間的數(shù)據(jù)轉(zhuǎn)發(fā)。
圖l是本發(fā)明實(shí)施方式的單芯片多核處理器的結(jié)構(gòu)圖。圖2是本發(fā)明實(shí)施方式的多粒度并行處理的說明圖。圖3是本發(fā)明實(shí)施方式的宏流程圖的說明圖。圖4是本發(fā)明實(shí)施方式的的局部存儲器管理的概要的說明圖。圖5是本發(fā)明實(shí)施方式的存儲器的存儲區(qū)域的分割狀態(tài)的說明圖。圖6是本發(fā)明實(shí)施方式的存儲器的清除優(yōu)先度的說明圖。圖7是本發(fā)明實(shí)施方式的存儲器中裝載的變量的推移的說明圖。圖8是本發(fā)明實(shí)施方式的循環(huán)的分割步驟的具體示例的說明圖。圖9是本發(fā)明實(shí)施方式的循環(huán)的分割步驟的具體示例的說明圖。圖10是本發(fā)明實(shí)施方式的循環(huán)的分割步驟的具體示例的說明圖。 圖11是本發(fā)明實(shí)施方式的循環(huán)的分割步驟的具體示例的說明圖。圖12是本發(fā)明實(shí)施方式的塊大小的決定步驟的具體示例的說明圖。 圖13是本發(fā)明實(shí)施方式的塊大小的決定步驟的具體示例的說明圖。 圖14是本發(fā)明實(shí)施方式的局部存儲器管理宏任務(wù)的生成的具體示例(分 配前)的i兌明圖。圖15是本發(fā)明實(shí)施方式的局部存儲器管理宏任務(wù)的生成的具體示例(分配后)的i兌明圖。圖16表示本發(fā)明實(shí)施方式的模板的生成步驟的示例。 圖17是本發(fā)明實(shí)施方式的模板被映射后的局部存儲器的狀態(tài)的說明圖。 圖18是本發(fā)明實(shí)施方式的模板被映射后的局部存儲器的狀態(tài)的說明圖。 圖19A和圖19B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)1)的說明圖。圖20A和圖20B是本發(fā)明實(shí)施方式的編碼圖^^的生成示例(狀態(tài)2)的 說明圖。圖21A和圖21B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)3)的 說明圖。圖22A和圖22B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)4)的 說明圖。圖23A和圖23B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)5)的 說明圖。圖24A和圖24B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)6)的 說明圖。圖25A和圖25B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)7)的 說明圖。圖26A和圖26B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)8)的 說明圖。圖27A和圖27B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)9)的 說明圖。9圖28A和圖28B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)10)的 說明圖。圖29A和圖29B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)11 )的 說明圖。圖30A和圖30B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)12)的 說明圖。圖31A和圖31B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)13)的 說明圖。圖32A和圖32B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)14)的 說明圖。圖33A和圖33B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)15)的 說明圖。圖34A和圖34B是本發(fā)明實(shí)施方式的編碼圖像的生成示例(狀態(tài)16)的說明圖。
具體實(shí)施方式
首先對本發(fā)明的概要進(jìn)行說明。本發(fā)明根據(jù)由編譯器通過程序解析獲得的信息來管理存儲器的存儲區(qū)域。 在編譯器編譯程序時(shí),獲取程序的信息。具體來說,編譯器通過程序解析能夠 獲得上述程序中使用的數(shù)據(jù)的信息、接下來使用上述數(shù)據(jù)的定時(shí)的信息、以及 使用上述數(shù)據(jù)的處理器的信息。即,能夠通過程序獲得使用數(shù)據(jù)的定時(shí)。本發(fā) 明的第一特征在于,根據(jù)解析程序而獲得的信息,來管理存儲器的存儲區(qū)域的 分配。具體來說,編譯器具有程序(例如嵌套(nest)的各層處理)的執(zhí)行調(diào)度 的信息,因此能夠獲得數(shù)據(jù)什么時(shí)候被訪問的信息。于是,能夠根據(jù)程序的執(zhí) 行調(diào)度將存儲器的存儲區(qū)域最佳地分配給數(shù)據(jù),所以能夠使數(shù)據(jù)的轉(zhuǎn)發(fā)最小 化。另外,能夠獲得哪個(gè)處理器什么時(shí)候需要分配給存儲器的數(shù)據(jù)的信息。由 此,能夠在不影響處理器的處理的情況下通過DMA控制器將數(shù)據(jù)連續(xù)地提供 給(裝載到)存儲器。由此,處理器并不為了等待數(shù)據(jù)被提供給存 器而停止。另外,編譯器能夠獲得數(shù)據(jù)被程序什么時(shí)候訪問的信息,因此,能夠確定已經(jīng)不需要的數(shù)據(jù)或者不被立即訪問的數(shù)據(jù),從而能夠通過DMA控制器將不需要的數(shù)據(jù)或者不被立即訪問的數(shù)據(jù)從存儲器的存儲區(qū)域清除(存儲)。,基于該將來信息的數(shù)據(jù)的清除與以往使用的LRU ( Least Recently Used)不同,不 將最近沒有使用但是可能馬上使用的數(shù)據(jù)清除,使存儲器的利用最佳化,能夠 減少存儲器之間的數(shù)據(jù)轉(zhuǎn)發(fā)。即,本發(fā)明的第二特征在于,根據(jù)解析程序而獲取的信息,來決定向存儲 器和/或從存儲器轉(zhuǎn)發(fā)數(shù)據(jù)的定時(shí)。為了如上所述地管理存儲器的存儲區(qū)域,將存儲器的存儲區(qū)域分割成固定 大小的塊(block),并對每個(gè)塊分配數(shù)據(jù)。關(guān)于割存儲區(qū)域的塊的大小,根據(jù) 編譯時(shí)獲取的程序的特性(程序中使用的數(shù)組的大小、數(shù)組的形狀、程序的執(zhí) 行模式等)來確定適當(dāng)?shù)拇笮?。另外,塊的大小可以為整數(shù)倍(例如,2的倍 數(shù))的關(guān)系。即,本發(fā)明的第三特征在于,根據(jù)解析程序而獲取的信息,將存儲器的存 儲區(qū)域分割成適當(dāng)大小的塊,來分配數(shù)據(jù)。根據(jù)程序的特性將存儲區(qū)域分割成 固定大小的塊通過硬件或OS (操作系統(tǒng))無法實(shí)現(xiàn)。這是因?yàn)橥ㄟ^硬件或OS 來分割存儲區(qū)域時(shí),總是以確定的大小進(jìn)行分割。另外,根據(jù)要訪問的數(shù)據(jù)的種類和范圍,程序中使用的數(shù)據(jù)的大小有時(shí)不 同,于是要準(zhǔn)備多個(gè)大小的塊以便適合程序中使用的數(shù)據(jù)的大小。并且,改變 所分配的塊的大小以適合數(shù)據(jù)的大小。另外,與程序執(zhí)行時(shí)所必需的數(shù)據(jù)(將在某個(gè)瞬間必須裝載到存儲器上的 數(shù)據(jù)稱為"工作組"(working set))的分割相一致地,也分割程序。例如,將 循環(huán)分割成二分之一時(shí),使用的數(shù)據(jù)也成為二分之一。本發(fā)明的第四特征在于,根據(jù)解析程序獲取的信息,來決定程序的分割數(shù)以便將工作組裝載于存儲器的 存儲區(qū)域。例如,程序的分割是對一個(gè)大的循環(huán)進(jìn)行分割然后反復(fù)執(zhí)行細(xì)小單 位的循環(huán)。另外,在多重循環(huán)中,通常使用多維數(shù)(dimension)數(shù)組變量。在對具 有一維數(shù)地址空間的固定大小的塊分配多維數(shù)組變量時(shí),對一維數(shù)的塊分配多 維數(shù)組模板(template )。該多維數(shù)組模板的形狀以及大小根據(jù)程序中使用的數(shù)組變量的形狀以及大小而決定。本發(fā)明的第五特征在于,根據(jù)解析程序獲取的信息,來決定分配給塊的模板。由此,能夠在避免轉(zhuǎn)換數(shù)組變量的索引(index) 的麻煩以及程序的復(fù)雜化的同時(shí)將任意數(shù)組分配到存儲器上的任意的地址。另夕卜,在以下的本發(fā)明的實(shí)施方式中,對數(shù)據(jù)的使用進(jìn)行具體說明,但是, 除了處理器對數(shù)據(jù)的使用(參照)之外,數(shù)據(jù)的定義(計(jì)算數(shù)據(jù)然后保存到存 儲器中)中的存儲器管理也在本發(fā)明的范疇之內(nèi)。即,本發(fā)明能夠應(yīng)用于包含 數(shù)據(jù)的使用以及定義兩者的數(shù)據(jù)訪問。下面,參照附圖對本發(fā)明的實(shí)施方式進(jìn)行-說明。圖l是本發(fā)明的實(shí)施方式的單芯片多核處理器的結(jié)構(gòu)圖。本發(fā)明的實(shí)施方式的單芯片多核處理器10具備包括多個(gè)處理器核心(PC0、 PC1.....PCn) 16的多核芯片(CMP0.....CMPm) 10;多個(gè)集中共享存儲器(CSMO.....CSMj) 14;進(jìn)行輸入輸出控制的多個(gè)輸入輸出用芯片(I/OCSP0..... I/OCSPk) 18;以及芯片間結(jié)合網(wǎng)(InterCCN) 12。芯片間結(jié)合網(wǎng)12通過現(xiàn)有的連接技術(shù)(交叉開關(guān)(crossbar switch)、總 線、多級網(wǎng)絡(luò)等)實(shí)現(xiàn),其將多個(gè)處理器核心16、多個(gè)集中共享存儲器14以 及輸入輸出用芯片18連接起來。集中共享存儲器14由系統(tǒng)中的所有處理器核 心16共享,是可以從各處理器核心16進(jìn)行訪問的存儲器。集中共享存儲器 14補(bǔ)充多核芯片10內(nèi)具有的集中共享存儲器28。各多核芯片IO具有多個(gè)處理器核心(PC) 16、集中共享存儲器(CSM/L2 Cache) 28以及芯片內(nèi)結(jié)合網(wǎng)(IntraCCN) 34。各處理器核心16具有CPU20、 分散共享存儲器(DSM:distributed shared memory) 22、局部程序存儲器 (LPM/I-Cache ) 24、局部數(shù)據(jù)存儲器(LDM/D-cache ) 26、數(shù)據(jù)轉(zhuǎn)發(fā)控制器 (DTC) 30、網(wǎng)絡(luò)接口 (NI) 32以及電力控制寄存器(FVR) 36。CPU20只要能夠進(jìn)行整數(shù)運(yùn)算以及浮動(dòng)小數(shù)點(diǎn)運(yùn)算即可,沒有特別限定。 例如,可以使用數(shù)據(jù)的裝載(Load)以及存儲(Store)的體系結(jié)構(gòu)(architecture ) 為單純的單片(single issue) RISC體系結(jié)構(gòu)的CPU。'另外,也可以使用超標(biāo) 量處理器(superscalarprocessor)、 VLIW處理器等。分散共享存儲器(DSM) 22用雙口存儲器構(gòu)成,能夠從其他處理器核心 16經(jīng)過數(shù)據(jù)轉(zhuǎn)發(fā)控制器30對分散共享存儲器22直接進(jìn)行數(shù)據(jù)讀寫,從而用。局部程序存儲器(LPM) 24按照由調(diào)度程序(scheduler)決定的任務(wù)的 執(zhí)行順序先從其他存儲器讀取應(yīng)該執(zhí)行的命令并進(jìn)行高速緩沖存儲。另外,根 據(jù)程序的特征還能夠用作通常的數(shù)據(jù)高速緩沖存儲器,還用作用于減少命中錯(cuò) 誤(hit miss )的高速緩沖存儲器。局部數(shù)據(jù)存儲器(LDM) 26是僅能夠在各處理器核心16內(nèi)進(jìn)行訪問的存 儲器,其保存分配給各處理器核心16的任務(wù)中使用的數(shù)據(jù)(例如,數(shù)組變量)。 另外,局部數(shù)據(jù)存儲器26能夠切換成L1數(shù)據(jù)高速緩沖存儲器。數(shù)據(jù)轉(zhuǎn)發(fā)控制器(DTC) 30由公知的DMA控制器構(gòu)成,其按照由調(diào)度程 序決定的定時(shí),在存儲器之間轉(zhuǎn)發(fā)應(yīng)該執(zhí)行的命令或使用的數(shù)據(jù)。具體來說, 在自身或其他的處理器核心16上的局部存儲器26、自身以及其他處理器核心 16上的分散共享存儲器22、自身以及其他處理器核心IO上的集中共享存儲器 28、以及設(shè)于其他芯片的集中共享存儲器14之間轉(zhuǎn)發(fā)數(shù)據(jù)。另外,局部數(shù)據(jù)存儲器26與數(shù)據(jù)轉(zhuǎn)發(fā)控制器30之間的虛線表示可以構(gòu)成 為能夠根據(jù)單芯片多核處理器的用途由數(shù)據(jù)轉(zhuǎn)發(fā)控制器30來訪問局部數(shù)據(jù)存 儲器26。在該情況下,CPU20能夠?qū)⑥D(zhuǎn)發(fā)指示經(jīng)局部數(shù)據(jù)存儲器26提供給數(shù) 據(jù)轉(zhuǎn)發(fā)控制器30。另外,CPU20能夠在轉(zhuǎn)發(fā)結(jié)束后將對所轉(zhuǎn)發(fā)的數(shù)據(jù)進(jìn)行檢 查。CPU20經(jīng)過局部數(shù)據(jù)存儲器26、分散共享存儲器22或者專用的緩沖器(省 略圖示)來對數(shù)據(jù)轉(zhuǎn)發(fā)控制器30發(fā)出數(shù)據(jù)轉(zhuǎn)發(fā)指示。另外,數(shù)據(jù)轉(zhuǎn)發(fā)控制器 30經(jīng)過局部數(shù)據(jù)存儲器26、分散共享存儲器22或者專用的緩沖器(省略圖示) 向CPU20報(bào)告數(shù)據(jù)轉(zhuǎn)發(fā)結(jié)束。此時(shí),使用哪個(gè)存儲器或者緩沖器根據(jù)處理器 的用途在處理器的設(shè)計(jì)時(shí)決定?;蛘咭部梢詼?zhǔn)備多個(gè)硬件上的方法,根據(jù)程序 的特性由編譯器或者用戶在軟件方面靈活使用。關(guān)于發(fā)給數(shù)據(jù)轉(zhuǎn)發(fā)控制器30的數(shù)據(jù)轉(zhuǎn)發(fā)指示(例如,從哪個(gè)地址將幾字 節(jié)的數(shù)據(jù)存儲或裝載到哪里,以及數(shù)據(jù)轉(zhuǎn)發(fā)的模式(連續(xù)數(shù)據(jù)轉(zhuǎn)發(fā)、進(jìn)展 (stride )轉(zhuǎn)發(fā)等)),理想的是,編譯器將數(shù)據(jù)轉(zhuǎn)發(fā)命令保存到存儲器或者專 用緩沖器,在程序執(zhí)行時(shí)僅發(fā)出執(zhí)行哪個(gè)數(shù)據(jù)轉(zhuǎn)發(fā)命令的指示,從而削減用于 驅(qū)動(dòng)數(shù)據(jù)轉(zhuǎn)發(fā)控制器30的系統(tǒng)開銷(overhead )。13網(wǎng)絡(luò)接口 (NI)32為了能夠在各單芯片多核處理器10內(nèi)的處理器核心16 之間機(jī)進(jìn)行通信而與芯片內(nèi)結(jié)合網(wǎng)34連接。芯片內(nèi)結(jié)合網(wǎng)34與芯片間結(jié)合網(wǎng) 12連接。處理器核心16通過芯片間結(jié)合網(wǎng)12能夠與其他單芯片多核處理器 10內(nèi)的處理器核心16進(jìn)行通信。處理器核心16經(jīng)過芯片內(nèi)結(jié)合網(wǎng)34與集中共享存儲器14連接。集中共 享存儲器14與芯片間結(jié)合網(wǎng)12連接。另外,網(wǎng)絡(luò)接口 32能夠不經(jīng)過芯片內(nèi)結(jié)合網(wǎng)34而直接與芯片間結(jié)合網(wǎng) 12連接。這樣的結(jié)構(gòu)能夠使系統(tǒng)中的所有處理器核心16對分散配置在各芯片 上的集中共享存儲器28以及分散共享存儲器22進(jìn)行平等的訪問。另外,通過 設(shè)置直接連接的總線,即使在芯片間的數(shù)據(jù)轉(zhuǎn)發(fā)量多的情況下,也能夠提高系 統(tǒng)整體的數(shù)據(jù)轉(zhuǎn)發(fā)能力。電力控制寄存器(FVR) 3 6被設(shè)定了提供給處理器核心16的電源電壓和 時(shí)鐘頻率,以便控制處理器核心16的工作頻率以及工作電壓。另外,如圖所 示,電力控制寄存器不僅設(shè)置于處理器核心16,還設(shè)置于單芯片多核處理器 10、芯片間結(jié)合網(wǎng)12、集中共享存儲器14、輸出輸出用芯片18、集中共享存 儲器28以及芯片內(nèi)結(jié)合網(wǎng)34,用于控制這些各結(jié)構(gòu)的工作頻率以及工作電壓 的數(shù)據(jù)保存在電力控制寄存器中。圖2是說明本發(fā)明的實(shí)施方式的多粒度并行處理的圖。所謂多粒度并行處理,是指分層地利用粗粒度并行性、中粒度并行性、以 及近細(xì)粒度并行性的并行處理方式。所謂粗粒度并行性是子程序(subroutine) 之間、循環(huán)之間、以及基本塊之間的并行性,所謂中粒度并行性是循環(huán)的迭代 (iteration)之間的并行性,近細(xì)粒度并行性是語句(statement)之間以及命 令之間的并行性。通過該多粒度并行處理,與以往進(jìn)行的局部且單一粒度的并 行化(循環(huán)的并行化以及命令級的并行化等)不同,能夠進(jìn)行覆蓋整個(gè)程序的 全面且多粒度的柔性并行處理。在多粒度并行處理中,按照以下步驟進(jìn)行并行化處理。1) 從源程序生成宏任務(wù)。2) 解析宏任務(wù)之間的控制流程以及數(shù)據(jù)依存生成宏流程圖表。3) 通過可最早執(zhí)行條件解析生成宏任務(wù)圖表。下面具體說明該步驟。在利用單一程序中的子程序、循環(huán)、基本塊之間的并行性的多粒度并行處理中,將成為源的例如FORTRAN程序作為粗粒度任務(wù)(宏任務(wù))分解為重復(fù) 塊(RB: repetition block )、子程序塊(SB: subroutine block)以及偽賦值語句 塊(BPA:block of pseudo assignment statements )三種宏任務(wù)(MT )。重復(fù)塊是 各層中的最外層的循環(huán)。另外,偽賦值語句塊是考慮到調(diào)度系統(tǒng)開銷以及并行性來進(jìn)行結(jié)合和/或 分割的基本塊。這里,偽賦值語句塊基本上是通常的基本塊,但是也可以為了 并行性提取而將單一的基本塊分割成多個(gè)。另外,在一個(gè)偽賦值語句塊的處理 時(shí)間短、無法忽略動(dòng)態(tài)調(diào)度時(shí)的系統(tǒng)開銷的時(shí)候,結(jié)合多個(gè)偽賦值語句塊來生 成一個(gè)偽賦值語句塊。在作為最外側(cè)循環(huán)的重復(fù)塊是Doall循環(huán)的情況下,通過分割循環(huán)索引 (loop index)來分割成多個(gè)部分Doall循環(huán),將分割后的Doall循環(huán)新定義為 重復(fù)塊。在重復(fù)塊為non-Doall循環(huán)的情況下,也可以將分層的宏數(shù)據(jù)流程處 理應(yīng)用于重復(fù)塊內(nèi)的并4亍性。子程序塊盡可能地內(nèi)聯(lián)(inline)展開即可。但是,考慮到編碼長度,將 無法有效地內(nèi)聯(lián)展開的子程序直接作為子程序塊。在該情況下,可以將分層的 宏數(shù)據(jù)流程處理應(yīng)用于子程序塊內(nèi)的并行性。接下來,解析宏任務(wù)之間的控制流程以及數(shù)據(jù)依存,生成如圖3所示的宏 任務(wù)圖表(MTG)。在宏流程圖表中,表示宏任務(wù)(MT)之間的控制流程。 在生成宏任務(wù)圖表時(shí),同時(shí)解析宏任務(wù)之間的控制依存以及數(shù)據(jù)依存,以各宏 任務(wù)能夠最早地執(zhí)行的條件(可最早執(zhí)行條件)的形式檢測宏任務(wù)之間的并行 性。另外,以圖表表現(xiàn)該可最早執(zhí)行條件的是宏任務(wù)圖表。并且,編譯器將宏任務(wù)圖表上的宏任務(wù)分配給處理器集群(processor cluster)(由編譯器或者用戶定義的處理器的組)。在該任務(wù)的分配時(shí),有編譯 時(shí)分配的靜態(tài)調(diào)度和執(zhí)行時(shí)分配的動(dòng)態(tài)調(diào)度,在動(dòng)態(tài)調(diào)度的情況下,使用動(dòng)態(tài) CP算法來生成動(dòng)態(tài)調(diào)度碼,將生成的動(dòng)態(tài)調(diào)度碼植入到程序中,另外,在動(dòng) 態(tài)調(diào)度時(shí),在到執(zhí)行時(shí)為止,并不知道哪個(gè)宏任務(wù)被那個(gè)處理器執(zhí)行,因此, 在宏任務(wù)之間共享的數(shù)據(jù)分配到從所有處理器都能夠等距離地看到的集中共15享存儲器14中即可。在多粒度并行化中,關(guān)于通過宏數(shù)據(jù)流程處理而分配給處理器集群的循環(huán)塊,在該循環(huán)塊為Doall循環(huán)或者Doacross循環(huán)的情況下,以由處理器集群內(nèi) 的多個(gè)處理器核心16進(jìn)行處理的方式,在迭代級分割循環(huán),使循環(huán)并行化。在循環(huán)的重建時(shí),可以直接利用語句的執(zhí)行順序的變更、循環(huán)分配(loop distribution), 節(jié)點(diǎn)戈'J分才示量(node splitting scalar)、 ^廣展(expansion),循環(huán) 互換(loop interchange ),循環(huán)展開(loop unrolling )、剝離開采(strip mining )、 陣列私有化(Array Privatization)以及單模(unimodular)變換(循環(huán)倒換(loop reversal )、排列(Permutation)、排隊(duì)(queuing))等現(xiàn)有才支術(shù)。另外,在不能應(yīng)用循環(huán)并行處理的循環(huán)中,應(yīng)用近細(xì)粒度并行處理或者將 循環(huán)的主體部分層地分割成宏任務(wù)的粗粒度任務(wù)并行處理。在分配給處理器集群的宏任務(wù)是偽賦值語句塊、或者是循環(huán)并行化和分層 的宏數(shù)據(jù)流程處理都無法應(yīng)用的循環(huán)塊的情況下,將偽賦值語句塊內(nèi)的語句或 者命令作為近細(xì)粒度任務(wù)在處理器集群內(nèi)的處理器中并行進(jìn)行處理。在多處理器系統(tǒng)的近細(xì)粒度并行處理中,將近細(xì)粒度任務(wù)調(diào)度到處理器中實(shí)現(xiàn)高效率的并行處理。另外,在該近細(xì)粒度并行處理中所要求的調(diào)度中,由 于在近細(xì)粒度任務(wù)之間存在基于數(shù)據(jù)依存的執(zhí)行順序的限制,因此,任務(wù)的執(zhí) 行順序成問題。將這樣生成的近細(xì)粒度任務(wù)圖表靜態(tài)地調(diào)度到各處理器中。此時(shí),作為調(diào) 度算法,為了考慮數(shù)據(jù)轉(zhuǎn)發(fā)系統(tǒng)開銷而使執(zhí)行時(shí)間最小.,使用公知的試探 (heuristics)算法(CP/DT/MISF法,CP/ETF/MISF法、ETF/CP法、或者DT/CP 法)來確定最佳的調(diào)度。在調(diào)度結(jié)束后,編譯器按順序排列分配給處理器核心的任務(wù)的命令列,并 將數(shù)據(jù)轉(zhuǎn)發(fā)命令或同步命令插入到必要的地方,由此,生成各處理器用的機(jī)器 代碼。此時(shí),所插入的數(shù)據(jù)轉(zhuǎn)發(fā)命令根據(jù)宏任務(wù)之間的控制依存和數(shù)據(jù)依存, 來確定在局部存儲器6中保存數(shù)據(jù)和從局部存儲器26中清除數(shù)據(jù)的定時(shí)。在近細(xì)粒度任務(wù)之間的同步中可以使用版本號(version number)法通過 接收側(cè)處理器核心的忙等待(busywait)來進(jìn)行同步標(biāo)記的接收。這里,數(shù)據(jù)16轉(zhuǎn)發(fā)指示以及同步標(biāo)記的設(shè)定可以通過由發(fā)送側(cè)的處理器直接寫入到接收側(cè)的處理器核心16上的分散共享存儲器22上來以較低的系統(tǒng)開銷進(jìn)行。 <局部存儲器管理>圖4是說明本發(fā)明的實(shí)施方式的局部存儲器管理的概要的圖。程序一般通過子程序和多重循環(huán)而劃分為多層。于是,考慮在程序的執(zhí)行 時(shí)將所需要的數(shù)據(jù)在哪個(gè)定時(shí)轉(zhuǎn)發(fā)是非常重要的,例如,在循環(huán)中,可以在循 環(huán)的前后轉(zhuǎn)發(fā)數(shù)據(jù)。具體來說,在循環(huán)的執(zhí)行前將數(shù)據(jù)轉(zhuǎn)發(fā)到局部存儲器,在 循環(huán)的執(zhí)行后將數(shù)據(jù)從局部存儲器進(jìn)行轉(zhuǎn)發(fā)。然后,在循環(huán)內(nèi)將數(shù)據(jù)裝載于局 部存儲器的狀態(tài)下,以能夠執(zhí)行循環(huán)的方式配置數(shù)據(jù)即可。這樣,將在數(shù)據(jù)裝 載于局部存儲器的狀態(tài)下可執(zhí)行的程序的單位稱為"局部存儲器管理宏任務(wù)"。即,在局部存儲器管理宏任務(wù)中處理的數(shù)據(jù)一定是裝載于局部存儲器上的 大小的數(shù)據(jù)。另夕卜,局部存儲器管理宏任務(wù)的執(zhí)行所需要的數(shù)據(jù)在局部存儲器 管理宏任務(wù)的執(zhí)行前或者執(zhí)行后的適當(dāng)?shù)亩〞r(shí)轉(zhuǎn)發(fā)(裝載、存儲)。另外,將 局部存儲器管理宏任務(wù)決定成在任務(wù)內(nèi)不會(huì)產(chǎn)生數(shù)據(jù)的轉(zhuǎn)發(fā)。而且,關(guān)于無法將所需要的全部數(shù)據(jù)裝載到局部存儲器上的循環(huán),在該循 環(huán)中,將使用的所有數(shù)據(jù)裝載到局部存儲器上的部分定義為局部存儲器管理宏 任務(wù)。即,將程序分割成將所需要的全部數(shù)據(jù)裝載到局部存儲器上,并決定局 部存儲器管理宏任務(wù)。這樣決定局部存儲器管理宏任務(wù)后,將局部存儲器管理 宏任務(wù)的執(zhí)行所需的數(shù)據(jù)在宏任務(wù)的執(zhí)行前后進(jìn)行轉(zhuǎn)發(fā)(裝載到局部存儲器、 從局部存儲器存儲到集中共享存儲器)。因此,在宏任務(wù)內(nèi),不產(chǎn)生數(shù)據(jù)的轉(zhuǎn) 發(fā)。以上對循環(huán)進(jìn)行了說明,而程序中的基本塊以及子程序也是相同的。另外,對于子程序存在后述的例外情況。另外,在本說明書中,對局部存儲器的管理進(jìn)行說明,但是只要是容量有 限(存儲容量小于使用的數(shù)據(jù))的存儲器,都能夠應(yīng)用本發(fā)明。例如除了局部 存儲器26之外,處理器核心16內(nèi)的分散共享存儲器22、芯片內(nèi)(on-chip) 的集中共享存儲器28以及芯片外(off-chip)的集中共享存儲器14也能夠應(yīng) 用本發(fā)明。參照圖4對分割以上所說明的程序并生成局部存儲器 理宏任務(wù)的方法進(jìn)行說明。假定在局部存儲器上裝載有1000個(gè)數(shù)組變量的要素。另夕卜,如圖4所示,該程序包含基于變量i、 j的雙重循環(huán)。在循環(huán)中,數(shù)組變量A[l:30,l:20]使用 600要素,數(shù)組變量B[1:30]使用30要素,數(shù)組變量C[l:30,l:20]使用600要素, 合計(jì)在該循環(huán)中使用1230個(gè)數(shù)組要素。于是,無法將所有的數(shù)據(jù)裝載到局部 存儲器來執(zhí)行該循環(huán)。因此,本發(fā)明的實(shí)施方式的編譯器將變量i的循環(huán)分割為i=l~10以及 i-ll 20兩個(gè)循環(huán),這時(shí),在各循環(huán)中訪問的數(shù)據(jù)變成630要素,因此,能夠 在將所有數(shù)據(jù)裝載于局部存儲器的情況下將循環(huán)從最開始執(zhí)行到最后。該分割 后的循環(huán)是局部存儲器管理宏任務(wù)。并且,在該宏任務(wù)執(zhí)行前后裝載和存儲需 要的數(shù)據(jù)。也可以不是在宏任務(wù)的即將執(zhí)行之前執(zhí)行數(shù)據(jù)向局部存儲器的轉(zhuǎn)發(fā)(裝 載),而是考慮到其他數(shù)據(jù)向塊的分配而在更靠前的時(shí)刻執(zhí)行。將像這樣在到 開始執(zhí)行使用數(shù)組變量(數(shù)據(jù))的宏任務(wù)之前為止的任意定時(shí)把該宏任務(wù)中使 用的數(shù)組變量裝載到存儲器中稱為"預(yù)裝載(preload)"。該預(yù)裝載即使是在其 他宏任務(wù)的執(zhí)行過程中,只要應(yīng)該裝載該數(shù)據(jù)的塊為空,就能夠通過DMA來 轉(zhuǎn)發(fā)數(shù)據(jù)。這樣,根據(jù)塊的空閑狀態(tài),即使是宏任務(wù)的執(zhí)行前也能夠裝載數(shù)據(jù), 能夠在程序執(zhí)行前準(zhǔn)備數(shù)據(jù)。因此,能夠削減由于需要的數(shù)據(jù)沒有裝載于存儲 器而導(dǎo)致的處理器等待的時(shí)間。(存儲),而是考慮到其他數(shù)據(jù)向塊的分配而在更靠后的時(shí)刻執(zhí)行。將像這樣 在使用數(shù)組變量(數(shù)據(jù))的宏任務(wù)結(jié)束后的任意定時(shí)把該宏任務(wù)中使用的數(shù)組 變量裝載到存儲器中稱為"后存儲(poststore)"。該后存儲即使是在其他宏任 務(wù)的執(zhí)行過程中,也能夠通過DMA將數(shù)據(jù)從局部存^fr者器中轉(zhuǎn)發(fā)到集中共享存 儲器中。這樣,通過在任意的定時(shí)存儲數(shù)據(jù),能夠避免DMA的負(fù)荷集中于宏 任務(wù)的執(zhí)行前后。下面,對上述子程序中的例外進(jìn)行說明。如上所述, 一般在局部存儲器管理宏任務(wù)內(nèi)不會(huì)發(fā)生數(shù)據(jù)的轉(zhuǎn)發(fā)。但是, 在子程序?yàn)榫植看鎯ζ鞴芾砗耆蝿?wù)的情況下,以及,在內(nèi)部調(diào)用子程序的循環(huán)為局部存儲器管理宏任務(wù)的情況兩種情況下,在子程序內(nèi)需要轉(zhuǎn)發(fā)(裝載和/ 或存儲)數(shù)據(jù)。具體來說,在子程序的開始時(shí),裝載子程序調(diào)用源中使用的數(shù)組變量。例如,當(dāng)使用FORTRAN中的保存、共有(common)以及數(shù)據(jù)變量、C語言中 的靜態(tài)變量以及全局變量時(shí),這些變量在調(diào)用源中無法進(jìn)行管理。于是,需要 在宏任務(wù)內(nèi)的子程序的處理結(jié)束后將使用的變量轉(zhuǎn)發(fā)到共享存儲器中。在子程 序結(jié)束時(shí),如果不將變量從局部存儲器中讀出并寫入到共享存儲器中,則無法 獲取數(shù)據(jù)的匹配性。另外,宏任務(wù)通過一個(gè)物理處理器來執(zhí)行,因此,即使在 宏任務(wù)內(nèi)裝載和存儲數(shù)據(jù),也可以保證正確的值。 <存儲區(qū)域的分割>圖5是說明本發(fā)明的實(shí)施方式的存儲器的存儲區(qū)域的分割狀態(tài)的圖。 在本發(fā)明中,成為存儲區(qū)域的管理對象的存儲器是局部存儲器以及分散共 享存儲器。這些管理對象存儲器的存儲區(qū)域被分割成多個(gè)塊(還包括子塊等) 101~104。圖5表示將局部存儲器的存儲區(qū)域分割而得的塊。塊101是將局部存儲器 的存儲區(qū)域分割成2的冪數(shù)分之一 (圖示的狀態(tài)為八分之一 )的固定程度的區(qū) 域。另外,塊4~7被分割成塊大小的一半的子塊(subblock) 8-15 (102)。 而且,子塊12~15被分割成子塊大小的一半的子子塊(subsubblock) 24-31(103)。而且,子子塊28~31被分割成子子塊大小的一半的子子子塊(subsubsubblock) 56 ~ 63 ( 104 )。塊101、子塊102、子子塊103以及子子子塊104被獨(dú)立地進(jìn)行管理。編 譯器能夠在存儲器的各地址空間中設(shè)定任意大小的塊。編譯器根據(jù)被編譯的程 序來設(shè)定適當(dāng)大小的塊等。即,在處理大的數(shù)據(jù)的程序中,準(zhǔn)備大尺寸的塊, 在處理小數(shù)據(jù)的程序中準(zhǔn)備小尺寸的塊,由此,能夠無浪費(fèi)且高效率地使用局 部存儲器。另外,為了使塊的管理容易,對子塊等也從存儲區(qū)域的開頭地址賦予序列 號。因此,通過一個(gè)地址表示的區(qū)域包含在多個(gè)塊、子塊中。例如,塊0、子 塊0~1、子子塊0~3、以及子子子塊0~7表示相同的存儲器空間(地址0~ 127)。這樣,通過將多種塊設(shè)定為存儲器空間的相同地址,能夠?qū)⒋鎯ζ鞴芾沓呻S時(shí)使用適當(dāng)種類的塊等。這樣設(shè)定的子塊的大小為塊的大小的1/2,子子塊的大小為塊的大小的1/4,子子子塊的大小為塊的大小的1/8。即,存儲器的存儲區(qū)域被分割成大小 為2的冪數(shù)的關(guān)系(相鄰的大小的塊為2倍的關(guān)系)的多個(gè)大小的塊,分割出 的多個(gè)大小的塊被作為存儲區(qū)域提供。另外,塊大小根據(jù)編譯器編譯程序時(shí)獲取的程序的信息來決定,因此,在 從程序執(zhí)行開始到結(jié)束為止期間內(nèi)不發(fā)生變更。但是,當(dāng)編譯器編譯別的程序 時(shí),塊的數(shù)量以及大小是不同的,以適應(yīng)編譯對象的程序的特性。即,成為本 發(fā)明的局部存儲器的存儲區(qū)域的管理單位的塊不是完全固定的大小,根據(jù)編譯 器解析程序而獲得的信息,能夠決定與在程序中使用的數(shù)據(jù)大小最適合的塊大 小。塊大小在程序內(nèi)是固定的,但是根據(jù)每個(gè)程序選擇最佳的塊大小。另外,也可以在程序執(zhí)行過程中改變塊大小。具體來說,在到程序的某步 驟為止使用較大的數(shù)組數(shù)據(jù),而在某步驟以后使用較小的標(biāo)量數(shù)據(jù)( 一維變量) 時(shí),也可以在數(shù)組數(shù)據(jù)的使用結(jié)束時(shí)分割塊來形成子塊。另夕卜,通過改變模板 的分配,能夠變更裝載在塊中的數(shù)組變量的大小。模板向塊的的分配將在后面 敘述。在本發(fā)明中,將塊大小決定成使得在一個(gè)局部存儲器管理宏任務(wù)中使用的 所有數(shù)據(jù)能夠保存在一個(gè)塊中。換言之,根據(jù)塊的大小來確定局部存儲器管理 宏任務(wù)的大小。另外,關(guān)于在所確定的塊大小存取數(shù)據(jù)的定時(shí),之后根據(jù)宏任 務(wù)的執(zhí)行定時(shí)由調(diào)度程序確定。這樣,通過將局部存儲器的存儲區(qū)域分割成多個(gè)大小的塊,在與局部存儲 器管理宏任務(wù)中使用的數(shù)據(jù)最相適合的大小的塊中裝載需要的數(shù)插。另夕卜,通 過以固定大小的區(qū)域管理局部存儲器的存儲區(qū)域,能夠避免以可變大小的區(qū)域 進(jìn)行管理時(shí)的產(chǎn)生的碎片化(fragmentation)的問題。在圖4所示的分割后的循環(huán)的示例中,數(shù)組變量A收納在局部存儲器的 一個(gè)塊中。并且,數(shù)組變量B收納在一個(gè)子塊中。換言之,塊的大小由編譯 器根據(jù)程序的性質(zhì)決定。更具體來說,以數(shù)組變量A收納在局部存儲器的一 個(gè)塊中的方式來決定塊大小并分割循環(huán)。并且,通常塊的大小從編譯對象的程 序的開始時(shí)到結(jié)束時(shí)為止是不變的。20<數(shù)據(jù)的裝載以及存儲>接下來,對數(shù)據(jù)向塊中的寫入(裝載)、讀出(存儲)以及塊的分配進(jìn)行 說明。在如圖5所示的分割了存儲區(qū)域的存儲器中,裝載局部存儲器管理宏任務(wù) 中使用的數(shù)據(jù)。首先,調(diào)度程序決定裝載數(shù)據(jù)的存儲器是局部存儲器還是分散 共享存儲器。此時(shí),將由多個(gè)處理器核心共享的數(shù)據(jù)裝載到分散共享存儲器中 即可。接下來,調(diào)度器在存在已經(jīng)裝載了需要的數(shù)據(jù)的塊的情況下,直接使用在 該塊中裝載的數(shù)據(jù)。另一方面,在需要的數(shù)據(jù)沒有裝載在任何一個(gè)塊中的情況 下,將空的塊分配給該要裝載的數(shù)據(jù),將需要的數(shù)據(jù)裝載到所分配的塊中。另外,如果沒有空的塊,則從局部存儲器26中讀出清除優(yōu)先度最高的數(shù)據(jù),并 寫入到集中共享存儲器28或者14中,將所需要的數(shù)據(jù)裝載到成為了空閑塊的 存儲區(qū)域中。圖6是說明本發(fā)明的實(shí)施方式的存儲器的清除優(yōu)先度的圖,橫軸表示時(shí)間 的經(jīng)過。在本發(fā)明的實(shí)施方式中,清除優(yōu)先度按照以下順序確定。1) 以后不訪問的數(shù)據(jù)。2) 通過其他處理器訪問,^f旦是自身的處理器不訪問的數(shù)據(jù)。3) 自身的處理器會(huì)再次使用,但是在靠后的時(shí)間使用的數(shù)據(jù)。4) 在自身處理器中馬上使用的數(shù)據(jù)。以后不訪問的數(shù)據(jù)例如是新再次計(jì)算出來的變量。這種已經(jīng)死掉的變量不 需要留下,因此,清除優(yōu)先度最高。通過其他處理器訪問、但是自身的處理器 今后不再訪問的數(shù)據(jù)轉(zhuǎn)發(fā)到需要該數(shù)據(jù)的處理器核心16的分散共享存儲器22 中即可,因此,清除優(yōu)先度第二高。雖然通過其他處理器訪問的數(shù)據(jù)立即轉(zhuǎn)發(fā) 到分散共享存儲器22即可,但是根據(jù)其他處理器核心16的存儲器的狀況,在無法馬上轉(zhuǎn)發(fā)的情況下,稍微使時(shí)間錯(cuò)開后轉(zhuǎn)發(fā)到分散共享存儲器22,或者 轉(zhuǎn)發(fā)到集中共享存儲器28或14。這樣,為了使從局部存儲器26轉(zhuǎn)發(fā)數(shù)據(jù)的 定時(shí)具有自由度,將清除優(yōu)先度比不訪問的數(shù)據(jù)設(shè)定得低。最后,對于通過自身處理器再次訪問的凝:據(jù),才艮據(jù)到下一次使用為止的時(shí)間來確定優(yōu)先度。使用該數(shù)據(jù)的時(shí)間越靠后,清除優(yōu)先度越高,使即將使用的 數(shù)據(jù)的清除優(yōu)先度低,盡量將其以裝載在存儲器中的狀態(tài)下保留。參照圖6隨著時(shí)間的經(jīng)過對存儲器的清除優(yōu)先度進(jìn)行說明。在圖6中,當(dāng)前,在處理器核心0 (PC0)中執(zhí)行的局部存儲器管理宏任務(wù)中,考慮將數(shù)組 變量A、 B、 C以及D裝載在局部存^f渚器中的狀態(tài)(1001)。在該局部存儲器管理宏任務(wù)中,開始,通過處理器核心0 (PC0)定義數(shù) 組變量A(DefA),并使用數(shù)組變量(A) ( 1002)。接下來,在處理器核心1 (PC1)中,定義別的數(shù)組變量A( 1003 )。這時(shí), 裝載在PCO的局部存儲器中的數(shù)組變量A已經(jīng)改變,因此今后不會(huì)再訪問。 因此,其清除優(yōu)先度最高。這是因?yàn)椋c高速緩沖存儲器的連貫性(coherence) 控制一樣,無法取得一致性的數(shù)據(jù)被判斷為不需要的數(shù)據(jù)。接下來,研究后面應(yīng)該執(zhí)行的宏任務(wù)。數(shù)組變量B由其他的處理器(PC1 ) 使用(1004)。數(shù)組變量C和D由自身的處理器(PCO)使用(1005、 1006)。 因此,數(shù)組變量B的清除優(yōu)先度比數(shù)組變量C和D的清除優(yōu)先度高。對數(shù)組變量C和數(shù)組變量D進(jìn)行比較,數(shù)組變量D比數(shù)組變量C先使用。 因此,數(shù)組變量C的清除優(yōu)先度比數(shù)組變量D的清除優(yōu)先度高。另外,數(shù)組 變量C和D在以后利用,因此,臨時(shí)寫回到集中共享存儲器CSM中,在下一 次需要時(shí)進(jìn)行裝載即可。因此,清除優(yōu)先度為A、 B、 C、 D的順序。圖7是說明本發(fā)明的實(shí)施方式的存儲器中裝載的變量的推移的圖。 圖7表示在一個(gè)處理器核心上,在一個(gè)層執(zhí)行包含兩個(gè)局部存儲器管理宏 任務(wù)(MT1、 MT2)的程序的情況下,程序執(zhí)行開始前的存儲器狀態(tài)、宏任務(wù) (MT1 )的執(zhí)行結(jié)束時(shí)的存儲器狀態(tài)、宏任務(wù)(MT2)的執(zhí)行開始時(shí)的存儲器 狀態(tài)、以及宏任務(wù)(MT2)的執(zhí)行結(jié)束時(shí)的存儲器狀態(tài)。另外,局部存儲器的 存儲區(qū)域如圖5所示那樣分割。在宏任務(wù)(MT1 )的執(zhí)行開始前,所有的存儲器的存儲區(qū)域(塊)為空的 狀態(tài)(1011 )。然后,在宏任務(wù)1的開始時(shí),對宏任務(wù)1中需要的數(shù)據(jù)(數(shù)組 變量A、 B、 C、 D、 E、 F)分配塊,各數(shù)組變量被裝載到存儲器中。然后, 開始基于宏任務(wù)l的處理。具體來說,根據(jù)聲明語句(declaration statement)def A將數(shù)組變量A分配給塊O。同樣地,將數(shù)組變量B分配給塊l,將數(shù)組 變量C分配給塊2,將數(shù)組變量D分配該塊3,將數(shù)組變量E分配給塊8,將 數(shù)組變量F分配塊9。在宏任務(wù)l的執(zhí)行結(jié)束時(shí),將各數(shù)組變量裝載到塊中(1012)。 在宏任務(wù)2 (MT2)的執(zhí)行開始時(shí),需要使在宏任務(wù)2中使用的所有數(shù)據(jù) 都裝載在存儲器中。在宏任務(wù)2中,使用數(shù)組變量A、 B、 C、 G、 E、 H、 I 以及J,因此需要四個(gè)塊和四個(gè)子塊。需要的數(shù)組變量中的數(shù)組變量A、 B、 C 和E由于已經(jīng)裝載在局部存儲器中,因此,在宏任務(wù)2的執(zhí)行時(shí)應(yīng)該新裝載 的數(shù)組變量為數(shù)組變量G、 H、 I和J。其中,數(shù)組變量H在宏任務(wù)2的執(zhí)行 開始前裝載在子塊10中。并且,子塊ll是空的。因此,在宏任務(wù)2的執(zhí)行開 始的階段,需要空出一個(gè)塊和一個(gè)子塊。所以,為了確保裝載所需要數(shù)據(jù)的塊,按照清除優(yōu)先度將數(shù)組變量D從 塊3中清除,將數(shù)組變量F從子塊9中清除。由此,確保了一個(gè)空的塊和一個(gè) 空的子塊(1014)。因此,在宏任務(wù)l的執(zhí)行結(jié)束后,在宏任務(wù)2的執(zhí)行前,需要將數(shù)組變量 D和F轉(zhuǎn)發(fā)到集中共享存儲器,以及將數(shù)組變量H轉(zhuǎn)發(fā)到局部存儲器(1013 )。在宏任務(wù)2的執(zhí)行開始前,數(shù)組變量G被分配給塊3,數(shù)組變量I被分配 給子塊9,數(shù)組變量J被分配給塊ll。然后,執(zhí)行宏任務(wù)2,在宏任務(wù)2中使 用數(shù)組變量G、 I和J ( 1014)。這樣,根據(jù)所述的優(yōu)先度從存儲器將數(shù)據(jù)存儲到分散共享存儲器或者集中 共享存儲器,因此,與以往的LRU不同,能夠使存儲器的利用最佳,能夠減 少存儲器間的數(shù)據(jù)轉(zhuǎn)發(fā)。即,根據(jù)以往的LRU,最近不使用但是有可能馬上 使用的數(shù)據(jù)也從存儲器轉(zhuǎn)發(fā)出去。但是,如本發(fā)明那樣,根據(jù)編譯器獲取的信 息,可知該數(shù)據(jù)下一次使用的定時(shí),能夠使存儲器最優(yōu)地使用。 <循環(huán)的分割>接下來,參照圖8到圖ll對循環(huán)的分割步驟的具體示例進(jìn)行說明。 循環(huán)的分割是縱觀多個(gè)循環(huán)進(jìn)行匹配分割。解析在多重化的循環(huán)中訪問的 最廣范圍,作為全局索引范圍(globe index range )。即,由于具有訪 局部存 儲器即可的范圍和必須與相鄰的處理器進(jìn)行通信的范圍,因此,解析數(shù)據(jù)的訪問范圍,對其進(jìn)行劃分。因此,解析程序的結(jié)構(gòu)、選擇目標(biāo)循環(huán)組(targetloop group )。在本實(shí)施方式中,與用于連續(xù)地執(zhí)行基于以往的編譯器的并行的循環(huán) 的解析不同,解析在多個(gè)循環(huán)的范圍內(nèi)如何訪問存^f渚器。 這里,兩個(gè)循環(huán)匹配是指滿足以下所有條件。1 )各循環(huán)是Doall循環(huán)、Reduction循環(huán)、以及基于循環(huán)傳遞(loop-carried ) 數(shù)據(jù)依存(遞歸)的S叫uectial循環(huán)中的某一個(gè)。2) 在循環(huán)之間存在數(shù)組變量的數(shù)據(jù)依存。3) 各循環(huán)的循環(huán)控制變量在同一數(shù)組的相同維數(shù)的索引式中使用,維數(shù) 的數(shù)組索引用循環(huán)控制變量的一次式表示。4) 對于將數(shù)據(jù)依存導(dǎo)向循環(huán)之間的各數(shù)組,數(shù)組索引中的循環(huán)控制變量 系數(shù)的循環(huán)之間的比是固定的。此時(shí),沒有選擇的單一的循環(huán)也全部作為目標(biāo)循環(huán)組,容許目標(biāo)循環(huán)組的 嵌套,還選擇包括間接參照的循環(huán)。即,在被選為目標(biāo)循環(huán)組的循環(huán)的內(nèi)側(cè)也 存在循環(huán)的情況下,對于內(nèi)側(cè)的循環(huán)也生成目標(biāo)循環(huán)組。并且,關(guān)于無法與其 他循環(huán)匹配的循環(huán),《義在該循環(huán)中生成目標(biāo)循環(huán)組。所謂目標(biāo)循環(huán)組,是在宏任務(wù)上能夠應(yīng)用循環(huán)匹配分割的重復(fù)塊(RB) 的集合,是在宏任務(wù)標(biāo)記上具有直接數(shù)據(jù)依存在先、后續(xù)關(guān)系的重復(fù)塊的集合。 這是因?yàn)?,?zhí)行時(shí)的花費(fèi)(存儲器以及處理器等資源的消耗)大的重復(fù)塊和在 該重復(fù)塊上具有直接數(shù)據(jù)依存在先、后續(xù)關(guān)系的重復(fù)塊處理大的數(shù)據(jù),所以分 割的效果高。由此,當(dāng)在循環(huán)之間使用相同數(shù)據(jù)時(shí),循環(huán)使用相同的區(qū)域,能 夠防止高速緩沖錯(cuò)誤。具體來說,在圖8所示的程序中,基于變量i的兩個(gè)循環(huán)為TLG1,各TLG1 內(nèi)的基于變量j的循環(huán)為TLG1-1和TLGl-2。并且,TLG1-1內(nèi)的基于變量k 的循環(huán)為TLG1-1-1, TLG1-1內(nèi)的基于變量k的循環(huán)為TLGl-l-2。接下來,如圖9所示,生成TLG集合。在TLG滿足以下的所有生成條件 的情況下生成TLG集合。1 )具有至少一個(gè)以上共享數(shù)組(還考慮依存關(guān)系)。2) 共享數(shù)組的匹配維數(shù)全部一致。3) 在跨子程序的情況下,共享數(shù)組的形狀一致。24下面如圖10所示生成分割候補(bǔ)TLG集合。這是在具有成為嵌套的TLG 的情況下選擇花費(fèi)最大的TLG集合,將所選擇的TLG集合作為分割候補(bǔ)。然 后,針對每個(gè)分割候補(bǔ)TLG集合計(jì)算GIR。這樣,能夠覆蓋程序中的所有的 編碼。具體來說,TLG集合l成為分割候補(bǔ)TLG集合l, GIR為[1:30]。接下來,確定分割基準(zhǔn)區(qū)域。分割基準(zhǔn)區(qū)域是必須收納在各TLG集合中 使用的數(shù)據(jù)的存儲區(qū)域。具體來說,計(jì)算在分割候補(bǔ)TLG集合中使用的數(shù)據(jù) 大小的比。這里,有三個(gè)分割候補(bǔ)TLG,若在集合1中使用的數(shù)據(jù)大小為300k, 在集合2中使用的數(shù)據(jù)大小為200k,集合3中使用的數(shù)據(jù)大小為100k,則數(shù) 據(jù)大小的比為3:2:1。根據(jù)該比,將最小存儲器區(qū)域(局部存儲器和分散共享存儲器中的容量小 的一方)分配給各分割候補(bǔ)TLG集合。具體來說,將分割候補(bǔ)TLG集合分割 成使在分割候補(bǔ)TLG集合中使用的數(shù)據(jù)收納在比最小存儲器區(qū)域要小的區(qū)域 中。另外,實(shí)際上,此時(shí)在除了所分配的區(qū)域以外的區(qū)域中也能夠裝載在分割 候補(bǔ)TLG集合中使用的數(shù)據(jù),但是,作為分割用的粗略估計(jì),進(jìn)行這樣的處 理。由此,能夠?qū)⒃诜指詈蟮姆指詈蜓a(bǔ)TLG集合中使用的數(shù)據(jù)同時(shí)裝載到局 部存儲器中。另外,實(shí)際上是否將數(shù)據(jù)裝載到存儲器中由調(diào)度以及存儲器管理 例程(routine)確定。下面確定塊大小。首先,將花費(fèi)最大的分割候補(bǔ)TLG集合作為決定塊大小的基準(zhǔn)。其中, 在需要多重分割的情況下,在分割候補(bǔ)TLG集合中采用最大分割數(shù)。這里, 所謂最大分割數(shù),是在考慮到了分配的處理器循環(huán)(PG)內(nèi)的處理器核心(PC ) 的結(jié)構(gòu)以及基于并行處理的系統(tǒng)開銷的情況下的最大分割數(shù)。CPU的數(shù)量為 一個(gè)時(shí),最大分割數(shù)為循環(huán)的迭代數(shù)。以后,需要多重分割的TLG集合不選 擇為分割候補(bǔ)TLG集合。然后再次生成分割候補(bǔ)TLG集合。具體來說,如圖11所示,由于TLG集合1以最大分割數(shù)被分割,因此, 下一 TLG集合2被選為分割候補(bǔ)TLG集合。成為了分割候補(bǔ)的TLG集合2 的GIR為[1:20]。下面,對塊大小的決定步驟進(jìn)行說明。首先,執(zhí)行塊大小確定前處理。計(jì)算使被成為基準(zhǔn)的分割候補(bǔ)TLG集合訪問的數(shù)據(jù)成為比分割基準(zhǔn)區(qū)域要小的大小的分割數(shù)。這里,僅考慮要訪問的 數(shù)據(jù)大小,對于間接參照的數(shù)據(jù)的訪問不予考慮。分割數(shù)選擇成處理器組的數(shù)量的整數(shù)倍。利用所求出的分割數(shù)對TLG集合內(nèi)的各循環(huán)試行分割。具體來說,在最外循環(huán)(i的循環(huán))試行4分割。被訪問的數(shù)組變量A和B的大小為[k,j,ih[l:30,l:20,l:3]??倲?shù)據(jù)大小為30 x 20 x 3 x 2 = 3600。 接下來,確定塊大小。根據(jù)分割后的數(shù)組訪問范圍,生成TLG集令中的所有局部數(shù)組的模板, 將生成的模板的大小作為臨時(shí)塊大小。模板的生成的詳細(xì)情況將在后文敘述。 這里,也不考慮間接參照的數(shù)組數(shù)據(jù)的訪問。在模板的生成失敗的情況下,增 大分割數(shù),從塊大小確定前處理開始重新進(jìn)行。使用所確定的臨時(shí)塊大小,判斷能否分配給各分割基準(zhǔn)區(qū)域。在該步驟中, 在間接地參照了數(shù)據(jù)的情況下,關(guān)于下一維數(shù),使用數(shù)組的聲明大小來判定。 在間接參照的數(shù)組沒有收納在塊中的情況下,可以決定放置到共享存儲器中。在TLG集合中使用的數(shù)據(jù)能夠分配成臨時(shí)塊大小時(shí),采用生成模板時(shí)的 分割數(shù)(即,不進(jìn)一步分割)。然后,將臨時(shí)塊大小確定為塊大小。另一方面,當(dāng)在TLG集合中使用的數(shù)據(jù)無法分配成臨時(shí)塊大小時(shí),增大 分割數(shù),從塊大小確定前處理開始重新進(jìn)行。另外,在即使用最大分割數(shù)也無 法分配的情況下,采用最大分割數(shù),以后,無法分配的TLG集合不會(huì)被選為 分割候補(bǔ)TLG集合。然后再次生成分割候補(bǔ)TLG集合。接下來,確定分割數(shù)。針對每個(gè)分割候補(bǔ)TLG集合,根據(jù)先前確定的塊大小,計(jì)算通過分割基 準(zhǔn)區(qū)域確定而確定的區(qū)域中能夠確保幾個(gè)塊,求出能夠分配的分割數(shù)。其結(jié)果 為,在某一分割候補(bǔ)TLG集合的分配失敗的時(shí)候,再次生成分割候補(bǔ)TLG集 合。此時(shí),無法分配的分割候補(bǔ)TLG集合采用最大分割數(shù),以后,無法分割 的TLG集合不會(huì)被選為分割候補(bǔ)TLG集合,塊大小不再計(jì)算。從局部存儲器 的大小減去已經(jīng)確定了分割數(shù)的分割候補(bǔ)TLG集合的數(shù)據(jù)大小,根據(jù)還剩下 的分割候補(bǔ)TLG集合的數(shù)據(jù)大小的比,再次分配TLG集合。然后,將確定了分割數(shù)的分割候補(bǔ)TLG集合內(nèi)的各循環(huán)作為局部存儲器管理宏任務(wù)候補(bǔ)。具體來說,考慮在TLG集合1中使用的數(shù)據(jù)大小為300k,在TLG集合2 中使用的數(shù)據(jù)大小為200k,在TLG集合3中使用的數(shù)據(jù)大小為100k的示例。 設(shè)能夠以TLG集合1為基準(zhǔn)確定塊大小。在即使用最大分割數(shù)分配TLG集合 2也失敗的情況下,當(dāng)在TLG集合2中有TLG集合4、 TLG集合5以及TLG 集合6時(shí),將它們加到下一分割候補(bǔ)TLG集合中。在確定了使所有的數(shù)據(jù)都能夠配置在局部存儲器中的循環(huán)的分割數(shù)的情 況下,為了將數(shù)據(jù)分配給局部存儲器,預(yù)先存儲假定哪個(gè)數(shù)據(jù)用哪個(gè)模式訪問、 以及哪個(gè)數(shù)據(jù)使用多大的塊等進(jìn)行分割的信息。接下來,進(jìn)行宏任務(wù)的分割以及循環(huán)的重建。這里進(jìn)行的處理使宏任務(wù)的 分割、循環(huán)分配、循環(huán)融合(loopflision)以及循環(huán)的重建。這里,所謂循環(huán)分配(Loop distribution),具體來說將在圖14和圖15中 敘述,但是其是在進(jìn)行多重分割時(shí)用于循環(huán)使用數(shù)據(jù)的處理。所謂循環(huán)融合是 用于循環(huán)使用寄存器的處理。并且,在循環(huán)的重建(Loop restructuring)之后,從外側(cè)層的循環(huán)起依次 尋找分割數(shù)已經(jīng)確定的宏任務(wù),并將發(fā)現(xiàn)的宏任務(wù)作為局部存儲器管理宏任 務(wù)。在設(shè)定成局部存儲器管理宏任務(wù)的宏任務(wù)的內(nèi)側(cè)不進(jìn)行宏任務(wù)的尋找。 <^莫纟反的生成>接下來說明模板的生成步驟。在本實(shí)施方式中,所謂模板是將數(shù)組變量分配給局部存儲器的單位。編譯 器對應(yīng)程序訪問數(shù)據(jù)的模式來準(zhǔn)備模板。所提供的模板的大小與塊或者子塊的 大小相同。此外,按維數(shù)(1維數(shù)組、2維數(shù)組、3維數(shù)組......)來準(zhǔn)備模板,才莫;〖反的大小為^皮程序訪問的大小以上的大小。在使用塊來管理局部存儲器的情況下,需要向同一地址區(qū)域的塊載入各種 數(shù)據(jù)(形狀、維數(shù)不同的數(shù)組等)。即,即使數(shù)據(jù)大小是收納在塊中的大小, 也可以是聲明為1維數(shù)的標(biāo)壹變量、或2維數(shù)、3維數(shù)的數(shù)組變量的情況。此 外,還存在是相同維數(shù)的數(shù)據(jù)但各維數(shù)的大小不相同的情況。為了將這些裝載 到相同地址空間的塊中,將所有的數(shù)據(jù)變換成1維數(shù)據(jù)從而可以使其與存儲器 地址相一致。但是,在數(shù)組變量的情況下,需要索引變換,成為與用戶寫入的程序不同。若進(jìn)行這樣的索引變換,則程序變得難以理解,難以進(jìn)行程序調(diào)試(debugger),并行性的解析變得難以理解。因此,為了在保持程序的可讀性的情況下管理局部存儲器,而使用和塊等 的大小相同大小的模板。所謂模板是存儲數(shù)組變量的模板。通過在模板中存儲 所需要的數(shù)據(jù)可以實(shí)現(xiàn)向局部存儲器上的任意塊裝載數(shù)據(jù)。 通過以下步驟來生成模板。首先,關(guān)于TLG集合內(nèi)的所有數(shù)組,求出比各維數(shù)的訪問大小大、并且 最小的2的冪數(shù)。然后,生成求出各維數(shù)后的大小的臨時(shí)模板。在上述例子中,用最外的變量i的循環(huán)來試行4分割。例如,如果分割成 i=l~3、 4~6、 7~8、 9 10四個(gè)循環(huán),則得到轉(zhuǎn)3圈的兩個(gè)循環(huán)、轉(zhuǎn)2圈的 兩個(gè)循環(huán)。分割后的循環(huán)內(nèi)的數(shù)組變量A和B的訪問大小都是[k, j, i] = [1:30, 1: 20, 1:3]。此外,第3維數(shù)選擇循環(huán)圈數(shù)中較大的一方,為3圈。接下來,計(jì)算臨時(shí)模板的大小。由于模板的各維數(shù)為比數(shù)組變量的各維數(shù) 的大小大的2的冪數(shù),所以模板大小成為32 x 32 x4-4k要素。然后,將最大 的臨時(shí)模板的大小作為塊大小。在前述的例子中,塊大小成為4k要素。然后,將分割基準(zhǔn)區(qū)域大小除以塊大小并求出商(分割基準(zhǔn)區(qū)域大小/塊 大小)。在所求出的商為1以上時(shí),通過舍棄按除法運(yùn)算而求出的商的小數(shù)點(diǎn) 以下,來求出能夠準(zhǔn)備的塊數(shù)(Block—num)。另一方面,在所求出的商不足l 時(shí),由于在該模板大小中一個(gè)塊也不能生成,所以判斷為才莫板的生成失敗。此外,將塊大小除以各模板的大小(塊大小/各模板的大小),將其商作為 子塊的數(shù)量。在前述的例子中,由于要分割的局部存儲器區(qū)域?yàn)?2k要素,所以應(yīng)該準(zhǔn) 備的塊數(shù)求出為12k/4k-3個(gè)。最終,準(zhǔn)備4k要素大小的3個(gè)模板[1:32, 1:32, 1:4, 0:2]。由于決定了模板大小和模板數(shù)量,所以循環(huán)的分割數(shù)確定為4。即,在該處理中,觀察程序整體來決定最合適的塊大小。由此,決定用于 將在宏任務(wù)中使用的數(shù)據(jù)(工作組)裝載到局部存儲器的程序的分割數(shù)。然后, 將分割數(shù)選擇為比分割后的數(shù)據(jù)大小大的塊大小。 <局部存儲器管理宏任務(wù)的決定例1>接下來,參照圖12~13來說明塊大小的決定步驟的其它具體例子。為了決定塊大小,首先解析在循環(huán)內(nèi)要訪問的數(shù)據(jù),生成2的冪的大小的 模板。在本例中,假設(shè)局部存儲器的大小(除標(biāo)志區(qū)域外)為2kB,各數(shù)組要素 的大小為4B/要素,不考慮分散共享存儲器的存在。 首先,考慮用最大分割數(shù)來分割最外循環(huán)的情況。如圖12所示,有基于變量i的最外循環(huán)1020,在循環(huán)1020中基于變量j 的內(nèi)側(cè)循環(huán)1021。以及在循環(huán)1021中基于變量k的最內(nèi)循環(huán)1022這樣的3 重循環(huán)構(gòu)造。具體而言,在不考慮循環(huán)分割的情況下,最內(nèi)循環(huán)1022中使用的數(shù)組變 量A、 B以及C的大小為[k, j, i] = [l:10, 1:10, 1:10]。通過前述的步驟來生 成臨時(shí)模板。所生成的臨時(shí)模板的大小為[k, j, i] = [l:16, 1:16, 1:16]。該臨 時(shí)模板所需要的塊大小為16x I6x 16x4= 16kB。由于局部存儲器的大小為 2kB,所以一個(gè)塊也無法準(zhǔn)備。因此,考慮分割最外循環(huán)1020。如圖13所示,用最大分割數(shù)來分割(IO分割)最外循環(huán)(變量i) 1020。 最大分割數(shù)為循環(huán)的迭代數(shù)。此外,在即使將外側(cè)循環(huán)分割到極限也無法確保 所需要的塊數(shù)時(shí),考慮分割內(nèi)側(cè)的循環(huán)。此時(shí),在最內(nèi)循環(huán)1022中使用的數(shù)組變量A、 B和C的大小為[k, j, i] =[1:10, 1:10, l:l]。通過前述的步驟而生成的臨時(shí)模板的大小為[k,j,i]-[l:16, 1:16, l:l]。該臨時(shí)才莫板所需要的塊大小為16x 16x l x4-lkB。由于局部存 儲器的大小為2kB,所以能夠準(zhǔn)備的塊數(shù)為分割基準(zhǔn)區(qū)域大小(2kB)/塊大小 (lkB) =2個(gè)。由于在該循環(huán)中使用3個(gè)數(shù)組變量,所以在該狀態(tài)下無法確 保所需要的塊。因此,接下來考慮分割內(nèi)側(cè)循環(huán)1021。在將內(nèi)側(cè)循環(huán)1021分割成2份(2等分)時(shí),在最內(nèi)循環(huán)1022中使用的 數(shù)組變量A、 B和C的大小為[k, j, i]-[l:10, 1:5, l:l]。通過前述的步驟而 生成的臨時(shí)模板的大小為[k, j, i] = [l:16, 1:8, l:l]。該臨時(shí)模板所需要的塊 大小為16x8x 1 x4 = 512B。由于局部存儲器的大小為2kB,所以通過分割基 準(zhǔn)區(qū)域大小(2kB) /塊大小(512B)求出能夠準(zhǔn)備的塊數(shù),能夠準(zhǔn)備的塊數(shù) 為4個(gè)。由此,因?yàn)槟軌虼_保分割在該循環(huán)中使用的3個(gè)數(shù)組變量的塊,所以決定塊的大小以及個(gè)數(shù)。生成的^^板為[1:16, 1:8, 1:1, 0:3]。
然后,將內(nèi)側(cè)循環(huán)1021分成j-1:5、」=6:10的循環(huán)成為局部存儲器管理
宏任務(wù)。
同樣地分割循環(huán)1030、 1031。
這樣,在分割外側(cè)循環(huán)失敗時(shí),通過在內(nèi)側(cè)(其它維數(shù))循環(huán)中也進(jìn)行分 割(多維數(shù)分割)可以決定適合于局部存儲器大小的局部存儲器管理宏任務(wù)。 <局部存儲器管理宏任務(wù)的決定例2> ,
接下來參照圖14~ 15來說明局部存儲器管理宏任務(wù)的生成的其它具體例子。
本例中與上述例子一樣,假設(shè)局部存儲器的大小(除標(biāo)志區(qū)域外)為2kB, 各數(shù)組要素的大小為4B/要素,不考慮分散共享存儲器的存在。
如圖14所示該程序具有基于變量i、 j、 k的三重循環(huán)。基于變量i的最外 循環(huán)1041內(nèi)含有內(nèi)側(cè)循環(huán)1042 (j = 1:10)和內(nèi)側(cè)循環(huán)1043 (j = 11:20)。同樣 地,在基于變量i的最外循環(huán)1051內(nèi)含有內(nèi)側(cè)循環(huán)1052 (j = l:10)和內(nèi)側(cè)循 環(huán)薦(j = 11:20)。
在循環(huán)1041后執(zhí)行循環(huán)1051。此外,循環(huán)1042和循環(huán)1052使用相同的 數(shù)據(jù)(數(shù)組變量A[1:30, 1:10, l:l]和數(shù)組變量B[l:30, 1:10, l:l]),循環(huán)1043 和循環(huán)1053使用相同的數(shù)據(jù)(數(shù)組變量A[1:30, 11:20, l:l]和數(shù)組變量B[l:30, 11:20, 1:1])。
但是,在該程序中由于按照循環(huán)1042、循環(huán)1043、循環(huán)1052、循環(huán)1053 的順序來執(zhí)行,所以無法在將數(shù)據(jù)裝載到局部存儲器的情況下來循環(huán)使用相同 數(shù)據(jù)。因此,如圖15所示,將最外循環(huán)1041分割成內(nèi)側(cè)循環(huán)1042 (j = 1:10) 和內(nèi)側(cè)循環(huán)1043 (j = 11:20)。同樣地,將最外循環(huán)1051分割成內(nèi)側(cè)循環(huán)1052 (j = l:10)和內(nèi)側(cè)循環(huán)1053 (j = 11:20)。
通過該分割,能夠按順序執(zhí)行分割后的最外循環(huán)1041A和最外循環(huán)1051A (即,按順序執(zhí)行內(nèi)側(cè)循環(huán)1042和內(nèi)側(cè)循環(huán)1052)。因此,能夠在循環(huán)1052 中直接使用在循環(huán)1042中所使用的數(shù)組數(shù)據(jù)。即,在循環(huán)1041A的執(zhí)行結(jié)束 時(shí)和循環(huán)1051A的執(zhí)行開始時(shí)之間,不產(chǎn)生數(shù)據(jù)(數(shù)組變量)的轉(zhuǎn)發(fā)。
同樣地,能夠按順序執(zhí)行分割后的最外循環(huán)1041B和最外循環(huán)1051B(即,
30按順序執(zhí)行內(nèi)側(cè)循環(huán)1043和內(nèi)側(cè)循環(huán)1053 )。因此,能夠在循環(huán)1053中直接 使用在循環(huán)1043中所使用的數(shù)組數(shù)據(jù)。即,在循環(huán)1041B的執(zhí)行結(jié)束時(shí)和循 環(huán)1051B的執(zhí)行開始時(shí)之間,不產(chǎn)生數(shù)據(jù)(數(shù)組變量)的轉(zhuǎn)發(fā)。
這樣,在程序的執(zhí)行順序和該程序中使用的數(shù)據(jù)不匹配時(shí),通過執(zhí)行循環(huán) 分配,連續(xù)地執(zhí)行處理相同數(shù)據(jù)的循環(huán)。由此,可以在循環(huán)執(zhí)行時(shí)不產(chǎn)生數(shù)據(jù) 的轉(zhuǎn)發(fā)。
<^莫板的生成步驟的例子>
圖16表示本發(fā)明的實(shí)施方式的模板的生成步驟的例子。
模板(template)是為了在宏任務(wù)上處理局部存儲器而對局部存儲器分配
數(shù)組變量的單位。
模板準(zhǔn)備有1維數(shù)組、2維數(shù)組、3維數(shù)組......等,其形式根據(jù)在宏任務(wù)
中使用的數(shù)組變量而有多種形式。例如,在設(shè)為2維數(shù)組時(shí),準(zhǔn)備有數(shù)組變量 的各索引最大值相等的正方形、索引最大值不同的長方形(縱長、橫長),以 便與在宏任務(wù)中使用的數(shù)組變量的大小相匹配。
模板的大小大于局部存儲器管理宏任務(wù)中使用的數(shù)據(jù)大小。進(jìn)而,模板的 各維數(shù)的索引的最大值大于局部存儲器管理宏任務(wù)中使用的數(shù)組變量的各維 數(shù)的索引的最大值,并且選擇最小的2的冪數(shù)。因此,即使模板的形式改變, 模板的大小也與塊以及子塊等中的某一個(gè)的大小相等。
由此,模板的大小成為與塊大小相等或者塊大小的2的冪大小分之一。由 此,生成收納數(shù)據(jù)的最小大小的模板,并將程序(循環(huán))分割成在這樣生成的 模板中收納數(shù)據(jù)。并且,當(dāng)對局部存儲器分配數(shù)組變量時(shí),能夠分配成相同大 小的塊等,可以沒有浪費(fèi)地使用局部存儲器的存儲容量。
通過使用分配后的模板,分配給塊O的模板使用塊O的存儲器空間,分配 給塊1的模板使用塊1的存儲器空間。
準(zhǔn)備塊數(shù)個(gè)形狀相同的模板。然后,根據(jù)塊序號改變要使用的模板數(shù)組。 為此,所準(zhǔn)備的模板就成為實(shí)際上生成并列了多個(gè)相同模板的形態(tài)(裝載數(shù)據(jù) 而使用的數(shù)組變量的維數(shù)+ 1維數(shù))的模板。新生成的維數(shù)為塊指定用的維數(shù), 要素?cái)?shù)量為塊數(shù)。
即,模板的維數(shù)比數(shù)組變量的維數(shù)大l維數(shù)。這是由于,通過模板的追加后的維數(shù)的索引值,來切換多個(gè)數(shù)組變量,改變要訪問的塊。此外,對局部存 儲器的不同塊分配(不同的地址)分配各模板。當(dāng)數(shù)組變量的形狀以及大小相 同時(shí),可以使用相同模板。例如,分割成等分的模板,由于使用相同的形狀以 及大小的數(shù)組變量,所以準(zhǔn)備這樣的模板是有效的。
例如,在塊數(shù)為8個(gè)、各個(gè)塊的大小為[1:2,1:16,1:4]的情況下,將 tempA[l:2,l:16,l:4,0:7]的模板分配給局部存儲器。此外,在這時(shí)候,在程序中 出現(xiàn)的數(shù)組變量為5個(gè)的情況下,作為tempA[l:2,l:16,l:4,0:4],僅對塊0到4 分配模板。其它塊可以進(jìn)一步分割后作為子塊來利用。
圖17表示模板被映射后的局部存儲器的狀態(tài)。
在模板的映射中,例如在FORTRAN中,使用EQUIVALENCE語句。具 體而言,通過聲明為EQUIVALENCE(LM(l),tempA(l,l,l,O)),可以將模板A 分配給局部存儲器的塊O。
模板A是3維數(shù)組用的模板,各維數(shù)是tempA[l:2,l:16,l:4,0:7]。因此, 對塊0 (地址0~127)分配tempA[l,l,l,O],對塊1 (地址128-255)分配 tempA[l,l,l,l]。
即,如上所述,模板的最外側(cè)的第4維數(shù)不是模板自身的維數(shù),而是表示 模板被分配的塊序號。
若更具體地舉例,則通過執(zhí)行 do dim3 = 1 , 4 dodim2=l, 16 do diml = 1 , 2
tempA (diml, dim2, dim3, 2) -GA(diml, dim2, dim3) enddo enddo enddo
將數(shù)組變量GA的數(shù)據(jù)存儲在局部存儲器的塊2中。 圖18表示其它模板被映射后的局部存儲器的狀態(tài)。 與上述例子不同,在程序中表示出現(xiàn)的數(shù)組大小為[1:2,1:8,1:4]的情況下, 將適合于子塊大小的模板temp—subA[l:2,l:8,l:4,0:15]分配給局部存儲器。這樣,通過最外側(cè)的要素值可以改變要訪問的子塊。
與上述 一 樣地使用 EQUIVALENCE , 通過聲明為 EQUIVALENCE(LM(l),temp—subA(l,l,l,O)),可以將模板(子塊)A分配給局 部存儲器的子塊0。
模板A是3維數(shù)組用的模板,其大小為temp—subA[l:2,l:8,l:4,0:15]。因 此,.對子塊0 (地址0 ~ 63 )分配temp_subA [l,l,l,O],對子塊1 (地址64 ~ 127 ) 分配temp—subA [1,1,1 ,l]。
若更具體地舉例,則通過執(zhí)行
do dim3 = 1 , 4 do dim2 =1,8 do diml = 1, 2
temp—sub A (dim 1, diml, dim3, 4) FGA(diml, dim2, dim3 ) enddo enddo enddo
將數(shù)組變量GA的數(shù)據(jù)存儲在局部存儲器的子塊4中。 這樣,根據(jù)由編譯器解析程序而取得的信息,確定在程序中使用的數(shù)組變 量的形式來生成模板,并決定對哪個(gè)模板分配該變量。由此,可以將存儲器的 1維數(shù)的地址空間看作多維數(shù),并能夠?qū)⒊绦蛑惺褂眠^的多維數(shù)組以原有的形 式分配給存儲器。
使用了模板數(shù)組的編碼圖像(code image )的生成
接下來,參照圖19到圖34來說明使用了模板數(shù)組的編碼圖像的生成的具 體例子。圖19到圖34的說明表示,在將局部存儲器大小分割為1024、設(shè)塊 大小為128、將局部存儲器的區(qū)域分割為4個(gè)塊101、 4個(gè)子塊102、 4個(gè)子子 塊103、 8個(gè)子子子塊104的情況下,編譯器改寫編碼的情形以及程序執(zhí)行時(shí) 的局部存儲器的狀態(tài)。
圖19表示編譯前的原始編碼以及局部存儲器的狀態(tài)(狀態(tài)1)。在該原始 編碼中包含三個(gè)循環(huán)以及兩個(gè)子程序調(diào)用,這些循環(huán)以及子程序調(diào)用為局部存 儲器管理宏任務(wù)。圖20表示將模板設(shè)定成塊等的狀態(tài)(狀態(tài)2 )。定義LM區(qū)域以及模板數(shù) 組,通過EQUIVALENCE語句將模板分配給局部存儲器的地址空間。通過該 分配,局部存儲器和模板指示相同的區(qū)域。并且,通過改變模板的索引(0~7) 來改變對應(yīng)的區(qū)域。此外,通過模板數(shù)組來進(jìn)行聲明,但由于tempi (1, 4) 以后為被分配給子塊等的區(qū)域,所以不作為塊來使用。
具體而言,將以下語句插入到程序中。 -
Integer a (128), b(128), c ( 128 ), d(128), e ( 128 )
Integer LM ( 1024)
Integer tempi ( 128, 0:7)
EQUIVALENCE (LM, tempi)
由此,將沖莫板分配給局部存儲器。
圖21表示變換成模板數(shù)組的狀態(tài)(狀態(tài)3)。將想要裝載到局部存儲器中 來使用的數(shù)組變換成新定義的模板數(shù)組。通過使原始編碼中的數(shù)組為模板數(shù) 組,來使用局部存儲器。通過改變用于指定塊的維數(shù)的值(索引),可以改變 要使用的塊(局部存儲器的地址)。
具體而言,將原始編碼中的數(shù)組名a (i), b (i), c (i)改寫成tempi (i, 0), tempi (i, 1 ), tempi (i, 2)。
圖22表示從塊中清除數(shù)據(jù)的狀態(tài)(狀態(tài)4)。在第二個(gè)宏任務(wù)中,由于使 用四個(gè)數(shù)組b、 c、 d以及e所以需要四個(gè)塊。在第一個(gè)宏任務(wù)結(jié)束的時(shí)刻,在 沒有空出接下來要執(zhí)行的宏任務(wù)中所需要的塊數(shù)的情況下,按照清除優(yōu)先度空 出所需數(shù)量的塊。具體而言,三個(gè)數(shù)組a、 b以及c被裝載在局部存儲器上, 但數(shù)組b和c繼續(xù)被使用。因此,為了裝載數(shù)組e而將數(shù)組a清除。要清除的 塊中所存儲的數(shù)據(jù)被轉(zhuǎn)發(fā)到集中共享存儲器28或14。由此,將在模板數(shù)組中 所存儲的數(shù)據(jù)轉(zhuǎn)發(fā)到集中共享存儲器28或14的數(shù)組的命令被插入到原始編碼 中。
圖23表示變換成模板數(shù)組的狀態(tài)(狀態(tài)5 )。與狀態(tài)3 (圖21 )所示的狀 態(tài)相同,將想要裝載到局部存儲器中來使用的數(shù)組變換成新定義后的模板數(shù) 組。將數(shù)組a從塊0中清除,存儲數(shù)組d。
圖24表示解析子程序的狀態(tài)(狀態(tài)6 )。解析子程序的自變量和子程序內(nèi)的處理所需要的塊數(shù)。在圖示的例子中,在子程序SUbl中使用自變量數(shù)組X
和作為自動(dòng)變量的數(shù)組y。即,自變量用需要一個(gè)塊,內(nèi)部處理用需要一個(gè)塊。
總計(jì)需妾兩個(gè)塊。
圖25表示變換成在子程序內(nèi)使用了塊指定變量的模板數(shù)組的狀態(tài)(狀態(tài) 7)。這里,如上所述,由于有可能從多個(gè)地方調(diào)用子程序,所以當(dāng)通過常數(shù)來 指定才莫板數(shù)組的塊指定維數(shù)時(shí),存儲器管理上的限制變強(qiáng)。因此,使用塊指定 變量block一nol來變換模板數(shù)組以便將模板置于任意的位置。
圖26表示確保子程序處理用的塊的狀態(tài)(狀態(tài)8)。由于子程序內(nèi)的解析 已經(jīng)結(jié)束、已經(jīng)知道在子程序中所需要的塊數(shù),所以在子程序調(diào)用時(shí)空出所需 數(shù)量的塊,來確保子程序處理用的塊。在沒有空出所需數(shù)量的塊的情況下,清 除已經(jīng)裝載的數(shù)據(jù)。按照清除優(yōu)先度來決定要清除的數(shù)據(jù)。
具體而言,在該子程序中,需要一個(gè)自變量塊和一個(gè)內(nèi)部處理用塊。在存 儲器上裝載有數(shù)組b、 c、 d,但將數(shù)組e用作自變量。因此,需要為了內(nèi)部處 理用而空出l個(gè)塊。若考慮到清除優(yōu)先度,則由于數(shù)組c和d將立即被使用, 所以清除數(shù)組b。
圖27表示設(shè)定塊指定變量的狀態(tài)(狀態(tài)9)。在子程序內(nèi)使用的內(nèi)部處理 用的數(shù)組通過塊指定變量block—nol可以使用任意的塊。由此,將分配給內(nèi)部 處理用的數(shù)組變量的塊序號設(shè)定成指定變量。
圖28表示執(zhí)行子程序的狀態(tài)(狀態(tài)10)。通過子程序調(diào)用時(shí)設(shè)定的塊指 定變量來決定要使用的塊。即,塊l被分配給內(nèi)部處理用的數(shù)組y,塊3被分 配給自變量用的數(shù)組x。在子程序中使用所指定的塊來進(jìn)行子程序的處理。
圖29表示子程序的執(zhí)行結(jié)束時(shí)的狀態(tài)(狀態(tài)11 )。若子程序的處理結(jié)束, 則內(nèi)部處理用的塊為NULL。自變量用塊返回到作為自變量而收到的原來的數(shù) 組。
圖30表示變換成才莫板數(shù)組的狀態(tài)(狀態(tài)12 )。與狀態(tài)3 (圖21)和狀態(tài)5 (圖23)所示的狀態(tài)相同,將想要裝載到局部存儲器中來使用的數(shù)組變換成 新定義了的模板數(shù)組。
圖31表示確保子程序處理用的塊的狀態(tài)(狀態(tài)13)。由于子程序內(nèi)的解 析已經(jīng)結(jié)束、已經(jīng)知道在子程序中所需要的塊數(shù),所以在子程序調(diào)用時(shí)空出所
35需數(shù)量的塊,來確保子程序處理用的塊。在沒有空出所需數(shù)量的塊的情況下, 清除已經(jīng)裝載的數(shù)據(jù)。按照清除優(yōu)先度來決定要清除的數(shù)據(jù)。
具體而言,在下一宏任務(wù)(子程序調(diào)用)中,為了子程序的內(nèi)部處理用而
需要空出一個(gè)塊。在裝載到局部存儲器中的數(shù)組d、 a、 c和e中,數(shù)組a被用 作子程序的自變量。由于數(shù)組d、 c和e的清除優(yōu)先度相同,所以清除塊序號 最小的塊0中存儲的數(shù)組d。此外,由于已經(jīng)知道接下來的宏任務(wù)中需要數(shù)組 a,所以通過數(shù)據(jù)轉(zhuǎn)發(fā)單元將數(shù)組a轉(zhuǎn)發(fā)到局部存儲器的空閑的塊1中。
圖32表示設(shè)定塊指定變量的狀態(tài)(狀態(tài)14)。在子程序內(nèi)使用的內(nèi)部處 理用的數(shù)組通過塊指定變量block—nol可以使用任意的塊。由此,在子程序調(diào) 用時(shí),將分配給內(nèi)部處理用的數(shù)組變量的塊序號設(shè)定成指定變量。能夠設(shè)定與 前面的子程序調(diào)用時(shí)(圖27所示的狀態(tài)9)不同的塊序號。
圖33表示執(zhí)行子程序的狀態(tài)(狀態(tài)15)。通過子程序調(diào)用時(shí)設(shè)定的塊指 定變量來決定要使用的塊。即,塊O被分配給內(nèi)部處理用的數(shù)組y,塊l被分 配給自變量用的數(shù)組x。在子程序中使用所指定的塊來進(jìn)行子程序的處理。在 與前面的子程序調(diào)用時(shí)(圖28所示的狀態(tài)10)不同的區(qū)域進(jìn)行處理。
圖34表示子程序的執(zhí)行結(jié)束時(shí)的狀態(tài)(狀態(tài)16)。圖34所示的編碼是編 譯結(jié)束時(shí)的編碼。若子程序的處理結(jié)束,則內(nèi)部處理用的塊為NULL。自變量 用的塊返回到作為自變量而接收到的原來的數(shù)組。 產(chǎn)業(yè)上的可利用性
本發(fā)明可以應(yīng)用于由處理器使用的存儲器存儲區(qū)域的管理中,尤其是適用 于由多任務(wù)處理器使用的存儲器存儲區(qū)域的管理中。
權(quán)利要求
1.一種存儲器管理方法,用于管理由處理器使用的存儲器的存儲區(qū)域,其特征在于,所述處理器與保存任務(wù)執(zhí)行時(shí)訪問的數(shù)據(jù)的存儲器連接,將所述存儲器的存儲區(qū)域分割成多個(gè)不同大小的塊,選擇與所述任務(wù)執(zhí)行時(shí)訪問的數(shù)據(jù)相適合的大小的塊,在所述選擇的塊中,保存所述任務(wù)執(zhí)行時(shí)訪問的數(shù)據(jù)。
2. 才艮據(jù)權(quán)利要求1所述的存儲器管理方法,其特征在于, 將所述塊分割成才艮據(jù)解析包含所述任務(wù)的程序所獲取的信息而確定的大小。
3. 根據(jù)權(quán)利要求1所述的存儲器管理方法,其特征在于, 所述塊包括多個(gè)大小的塊,所述塊的多個(gè)大小為整數(shù)倍的關(guān)系。
4. 根據(jù)權(quán)利要求1所述的存儲器管理方法,其特征在于,在確定了將所述數(shù)據(jù)分配給所述選擇的塊之后,通過數(shù)據(jù)轉(zhuǎn)發(fā)單元將所述 數(shù)據(jù)保存在所述選擇的塊中,在所述塊的釋^L定時(shí)以前,通過所述數(shù)據(jù)轉(zhuǎn)發(fā)單元來讀出在所述選擇的塊 中保存的數(shù)據(jù),并保存到其他儲器中。
5. 根據(jù)權(quán)利要求1所述的存儲器管理方法,其特征在于, 在所述任務(wù)中訪問的數(shù)據(jù)中含有n維數(shù)的數(shù)組數(shù)據(jù)的情況下,將為了與所述任務(wù)中訪問的數(shù)組數(shù)據(jù)匹配而選擇出的n+l維數(shù)的模板分配給所述塊,在指定保存數(shù)據(jù)的塊的情況下,根據(jù)所述相加而得到的維數(shù)的值來將維數(shù) 的值不同的所述模板分配給所述各塊,以使訪問的塊不同。
6. —種存儲器管理方法,是處理器管理存儲器的存儲區(qū)域的方法,其特 征在于,所述處理器與保存程序執(zhí)行時(shí)訪問的數(shù)據(jù)的存儲器連接, 在所述方法中,將所述存儲器的存儲區(qū)域分割成塊,將根據(jù)解析所述程序獲得的信息而確定的多個(gè)形狀和大小的模板分配給合適大小的塊,將形狀和大小與所述分配的模板相適合的數(shù)據(jù)保存到所述模板中。
7. 根據(jù)權(quán)利要求6所述的程序的生成方法,其特征在于, 在分配所述模板的步驟中,從能夠分配給各塊的多種模板中,分配如下模板該模板具有在通過所述 程序訪問的數(shù)組數(shù)據(jù)的維數(shù)上加上1而得的維數(shù),并且各維數(shù)的最大值比通過 所述程序訪問的數(shù)組數(shù)據(jù)的各維數(shù)的最大值要大,根據(jù)所述相加而得到的維數(shù)的值,將多個(gè)所述模板分配給多個(gè)所述塊,以 使訪問的塊不同。
8. —種信息處理裝置,其具有處理器以及保存被所述處理器訪問的數(shù)據(jù) 的存儲器,其特征在于,所述存儲器的存儲區(qū)域被分割成多個(gè)大小的塊,所述多個(gè)大小根據(jù)解析由 所述處理器執(zhí)行的程序而獲得的信息來確定,分配給所述塊的模板的形狀以及大小,根據(jù)解析所述程序而獲得的信息來 確定,所述處理器將所述存儲器的存儲區(qū)域分割成多個(gè)大小的塊,該多個(gè)大小的 塊根據(jù)解析由所述處理器執(zhí)行的程序而獲得的信息來確定,所述處理器將形狀以及大小根據(jù)解析所述程序所獲得的信息而確定的模 板分配給合適大小的塊,所述處理器將形狀和大小與所述分配的模板相適合的數(shù)據(jù)保存到所述模 板中。
9. 根據(jù)權(quán)利要求8所述的信息處理裝置,其特征在于, 分配如下模板該模板具有在通過所述程序訪問的數(shù)組數(shù)據(jù)的維數(shù)上加上1而得的維數(shù),并且除了相加而得維數(shù)以外的各維數(shù)的最大值在通過所述程序 訪問的數(shù)組數(shù)據(jù)的各維數(shù)的最大值以上,根據(jù)所述相加而得到的維數(shù)的值,將多個(gè)所述模板分配給多個(gè)所述塊,以 使訪問的塊不同。
10. —種程序的生成方法,是能夠通過處理器執(zhí)行的程序的生成方法,其 特征在于,由編譯器解析程序的信息,確定執(zhí)行所述程序中包含的各任務(wù)所需要的數(shù)據(jù),按照所迷任務(wù)的執(zhí)行定時(shí)確定將需要的數(shù)據(jù)讀寫到存儲器中的定時(shí), 將在所迷確定的數(shù)據(jù)寫入定時(shí)以前分配所述存儲器的區(qū)域的命令,追加到 編譯的程序中。
11. 根據(jù)權(quán)利要求IO所述的程序的生成方法,其特征在于,根據(jù)解析所述程序而獲得的信息來確定釋放的所述區(qū)域以及釋放所述區(qū) 域的定時(shí),為了釋放所述分配的區(qū)域,將在所述確定的定時(shí)以前讀出寫入在所述存儲 器中的數(shù)據(jù)的命令,追加到所述編譯的程序中。
12. 根據(jù)權(quán)利要求11所述的程序的生成方法,其特征在于, 將下述兩個(gè)命令追力口到所述編譯的程序中,該兩個(gè)命令是在分配所述存儲器的區(qū)域之后,通過數(shù)據(jù)轉(zhuǎn)發(fā)單元將所述數(shù)據(jù)保存到所述存儲器中的命令; 以及在所述存儲器的區(qū)域的釋放定時(shí)以前,通過所述數(shù)據(jù)轉(zhuǎn)發(fā)單元讀出保存在 所述存儲器中的數(shù)據(jù)并保存到其他存儲器中的命令。
13. 根據(jù)權(quán)利要求IO所述的程序的生成方法,其特征在于, 解析所述程序而獲得的信息包括通過所述程序訪問的數(shù)據(jù)的信息、所述數(shù)據(jù)下一次被訪問的定時(shí)的信息、以及訪問所述數(shù)據(jù)的處理器的信息中的至少一 個(gè)。
14. 根據(jù)權(quán)利要求IO所述的程序的生成方法,其特征在于, 所述處理器是具有多個(gè)處理器核心的多處理器,在所述方法中,確定使哪個(gè)處理器何時(shí)執(zhí)行所述任務(wù),并將向所述確定的 處理器分配所述任務(wù)的命令追加到所述編譯的程序中。
15. 根據(jù)權(quán)利要求IO所述的程序的生成方法,其特征在于,所述存儲器的區(qū)域是所述存儲器的存儲區(qū)域被分割成固定大小的塊而得 到的區(qū)域。
16. 根據(jù)權(quán)利要求15所述的程序的生成方法,其特征在于, 所述存儲器的區(qū)域是被分割成多個(gè)不同大小的塊而得到的區(qū)域, 關(guān)于所述多個(gè)大小,所述塊的多個(gè)大小為整數(shù)倍的關(guān)系。
17. 根據(jù)權(quán)利要求15所述的程序的生成方法,其特征在于, 根據(jù)所述編譯器解析程序而獲得的信息來確定所述塊的大小。
18. 根據(jù)權(quán)利要求15所述的程序的生成方法,其特征在于, 對所述程序進(jìn)行分割,以便將所述任務(wù)中訪問的數(shù)據(jù)收納到所述一個(gè)塊中。
19. 根據(jù)權(quán)利要求18所述的程序的生成方法,其特征在于, 所述程序包含多重循環(huán),判斷通過外側(cè)循環(huán)的分割而生成的任務(wù)中訪問的數(shù)據(jù)是否收納在所述塊述塊內(nèi),則通過進(jìn)一步分割內(nèi)側(cè)的循環(huán)來變更所述凄t據(jù)的大小。
20. 根據(jù)權(quán)利要求IO所述的程序的生成方法,其特征在于, 在所述程序中訪問的數(shù)據(jù)中含有n維數(shù)的數(shù)組數(shù)據(jù)的情況下,分配為了與通過所述程序訪問的數(shù)組數(shù)據(jù)匹配而選擇出的n+l維數(shù)的模板,在指定保存數(shù)據(jù)的區(qū)域的情況下,通過所述相加而得到的維數(shù)的值,將多 個(gè)所述模板分配給多個(gè)區(qū)域,以指定被訪問的區(qū)域。
21. —種程序,是能夠由處理器執(zhí)行的程序,其特征在于, 所述程序由編譯器通過以下步驟而生成 解析程序的信息;確定所述程序中包含的各任務(wù)的執(zhí)行所需要的數(shù)據(jù);按照所述任務(wù)的執(zhí)行定時(shí)確定將需要的數(shù)據(jù)讀寫到存儲器中的定時(shí);以及 追加在所述確定的數(shù)據(jù)的讀寫定時(shí)以前分配所述存儲器的區(qū)域的命令。
全文摘要
本發(fā)明提供一種存儲器管理方法、信息處理裝置、程序的生成方法以及程序。所述存儲器管理方法是管理由處理器使用的存儲器的存儲區(qū)域的方法,所述處理器與保存任務(wù)執(zhí)行時(shí)使用的數(shù)據(jù)的存儲器連接,將所述存儲器的存儲區(qū)域分割成多個(gè)不同大小的塊,選擇與所述任務(wù)的執(zhí)行時(shí)使用的數(shù)據(jù)相適合的大小的塊,并在所述選擇的塊中保存所述任務(wù)的執(zhí)行時(shí)使用的數(shù)據(jù),從而能夠高效地在存儲器中配置數(shù)據(jù)。
文檔編號G06F12/06GK101601017SQ200880003780
公開日2009年12月9日 申請日期2008年2月27日 優(yōu)先權(quán)日2007年2月28日
發(fā)明者三浦剛, 中野啟史, 丸山貴紀(jì), 仁藤拓實(shí), 木村啟二, 田川友博, 笠原博德 申請人:學(xué)校法人早稻田大學(xué)