專利名稱:處理器可執(zhí)行的代碼的生成方法、存儲(chǔ)區(qū)域管理方法以及保存代碼生成程序的存儲(chǔ)介質(zhì)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及由多個(gè)處理元件構(gòu)成的多處理器中的存儲(chǔ)器的管理方法,特別涉及基于由編譯器取得的信息進(jìn)行控制,以保證共享存儲(chǔ)器所保存的數(shù)據(jù)的一貫性(一致性)的方法。
背景技術(shù):
將多個(gè)處理元件集成而成的多處理器不斷被各微處理器廠家發(fā)布。除了超級(jí)計(jì)算機(jī)、服務(wù)器、臺(tái)式計(jì)算機(jī)和PC服務(wù)器領(lǐng)域之外,在信息家電及裝置組裝領(lǐng)域(例如,便攜電話機(jī)、游戲機(jī)、車輛導(dǎo)航系統(tǒng)、數(shù)字電視機(jī)、HDD/DVD記錄器 播放器等)中,也看到了微處 理器的多核化的趨勢(shì)。多處理器具備多個(gè)處理元件、內(nèi)部結(jié)合網(wǎng)以及集中共享存儲(chǔ)器,各處理元件具備處理器和高速緩沖存儲(chǔ)器,獨(dú)立地進(jìn)行運(yùn)算處理。這種結(jié)構(gòu)的多處理器將集中共享存儲(chǔ)器用作主存儲(chǔ),將多個(gè)處理元件用作對(duì)集中共享存儲(chǔ)器所保存的同一數(shù)據(jù)進(jìn)行訪問(wèn)的主存儲(chǔ)共享型處理器。這時(shí),為了保證共享數(shù)據(jù)間的一致性,在某處理器正在訪問(wèn)高速緩沖存儲(chǔ)器上的共享數(shù)據(jù)時(shí),需要進(jìn)行禁止其他處理器從集中共享存儲(chǔ)器向高速緩沖存儲(chǔ)器訪問(wèn)該共享數(shù)據(jù)的一致性控制。在此,所述一致性是一種控制,用于保證在某時(shí)刻全部處理器能夠?qū)⒋鎯?chǔ)器的某個(gè)地址上所保存的值作為同一值進(jìn)行訪問(wèn),并且在主存儲(chǔ)共享型多處理器中被各處理器訪問(wèn)的存儲(chǔ)器內(nèi)容相同。用于保證一致性的功能中有通過(guò)硬件來(lái)控制存儲(chǔ)器訪問(wèn)的一致性高速緩沖存儲(chǔ)器(coherent cache)。在一致性控制中必須要解決的第一問(wèn)題是數(shù)據(jù)的過(guò)期化(Stale Data),第二問(wèn)題是偽共享(False Sharing)。圖22是說(shuō)明一致性控制中的第一問(wèn)題點(diǎn)(過(guò)期數(shù)據(jù))的圖。首先,聲明全局變量a、b、c (2200),在共享存儲(chǔ)器中保存了變量a = 0、b = 0、c =1 (2201)。然后,在某處理元件(PEO)的高速緩沖存儲(chǔ)器中保存有共享數(shù)據(jù)(a = O、b = O、c = I) (2202),在其他處理元件(PEl)的高速緩沖存儲(chǔ)器中也保存有共享數(shù)據(jù)(2203)的情況下,即使PEO中該共享數(shù)據(jù)(a = 0 — I)被更新,PEl的高速緩沖存儲(chǔ)器上的共享數(shù)據(jù)也還是未被更新的舊數(shù)據(jù)(a = 0) (2205)。若在該狀態(tài)下PEl中該共享數(shù)據(jù)被更新(c = a),則變量c就會(huì)被更新為0,而不反映正確的a的值(2206)。因此,如果進(jìn)行了一致性控制,貝u應(yīng)該是a = I、b = O、c = I的變量成為a = O、b = 0、c = O。因此,PEO的高速緩沖存儲(chǔ)器中保存的數(shù)據(jù)與PEl的高速緩沖存儲(chǔ)器中保存的數(shù)據(jù)就會(huì)不一致。因此,PEl會(huì)做出錯(cuò)誤的動(dòng)作。圖23是說(shuō)明一致性控制中的第二問(wèn)題點(diǎn)(偽共享)的圖。
首先,聲明全局變量a、b (2300),在共享存儲(chǔ)器中保存變量a = O、b = 0(2301)。該變量a和b被保存在共享存儲(chǔ)器的相同的高速緩沖存儲(chǔ)線上。此外,以線單位訪問(wèn)共享存儲(chǔ)器。然后,某處理元件(PEO)的高速緩沖存儲(chǔ)器中保存的共享數(shù)據(jù)被更新(a = 0 — I)
(2302),其他處理元件(PEl)的高速緩沖存儲(chǔ)器中保存的共享數(shù)據(jù)被更新(b= 0 — 2)
(2303)。即,各處理元件更新了同一線上所保存的不同變量。該情況下,若PEO先向共享存儲(chǔ)器寫回?cái)?shù)據(jù),則之后寫回?cái)?shù)據(jù)的PEl的數(shù)據(jù)保存在共享存儲(chǔ)器中(2304)。另一方面,若PEl先向共享存儲(chǔ)器寫回?cái)?shù)據(jù),則之后寫回?cái)?shù)據(jù)的PEO的數(shù)據(jù)保存在共享存儲(chǔ)器中(2305)。在進(jìn)行了一致性控制的情況下,會(huì)在共享存儲(chǔ)器中保存a = l、b = 2,但在不進(jìn)行一致性控制的情況下,不能確定最終哪個(gè)數(shù)據(jù)會(huì)保存在共享存儲(chǔ)器中。即,存儲(chǔ)器的內(nèi)容根據(jù)線降級(jí)(destage)定時(shí)而不同,無(wú)論哪種情況,處理元件都會(huì)進(jìn)行錯(cuò)誤的動(dòng)作。為了解決這種在共享存儲(chǔ)器與高速緩沖存儲(chǔ)器之間會(huì)產(chǎn)生不一致的問(wèn)題,通過(guò)在各處理元件和共享資源(內(nèi)部結(jié)合網(wǎng)絡(luò)、共享存儲(chǔ)器等)中設(shè)置一致性控制部,來(lái)保持存儲(chǔ)器中所保存的數(shù)據(jù)的一致性。具體而言,在某處理元件(PEO)從共享存儲(chǔ)器讀出了數(shù)據(jù)X之后,不許可其他處理元件(PEl)向共享存儲(chǔ)器寫入數(shù)據(jù)X,直到PEO從共享存儲(chǔ)器讀出數(shù)據(jù)X并將其更新后,撤銷對(duì)數(shù)據(jù)X的所有權(quán)。利用這樣的所有權(quán)控制,能夠解決數(shù)據(jù)的過(guò)期化(Stale Data)和偽共享(FalseSharing)的一致性控制的問(wèn)題?,F(xiàn)有技術(shù)文獻(xiàn)專利文獻(xiàn)專利文獻(xiàn)I :日本特開2004-30362號(hào)公報(bào)專利文獻(xiàn)2 :日本特開平9-44403號(hào)公報(bào)
發(fā)明概要發(fā)明要解決的問(wèn)題但是,在通過(guò)硬件對(duì)存儲(chǔ)器訪問(wèn)進(jìn)行所有權(quán)控制的一致性高速緩沖存儲(chǔ)器中,因?yàn)橛布某杀?,在處理器?shù)量增加時(shí)多處理器的成本會(huì)上升。此外,因?yàn)橥ㄟ^(guò)硬件來(lái)控制存儲(chǔ)器訪問(wèn),因此存儲(chǔ)器訪問(wèn)會(huì)變慢。另外,在基于硬件的一致性控制中,由于按每個(gè)事件都向全部處理器、存儲(chǔ)器和總線控制機(jī)構(gòu)發(fā)送信號(hào),因此會(huì)產(chǎn)生執(zhí)行時(shí)的開銷。該開銷與多處理器中包含的處理器數(shù)量相應(yīng)地增加。因此,在處理器數(shù)量增加了的情況下,用于一致性控制的通信會(huì)占滿總線,從而阻礙處理器的工作。
發(fā)明內(nèi)容
因此,要求一種利用更簡(jiǎn)單的硬件結(jié)構(gòu)的一致性控制,特別是利用軟件的一致性控制。用于解決問(wèn)題的手段本申請(qǐng)中公開的發(fā)明的一個(gè)代表例如下。即,一種由編譯器生成代碼的方法,所述代碼可以由多處理器系統(tǒng)所具備的處理器來(lái)執(zhí)行,所述方法的特征在于,所述多處理器系統(tǒng)具備多個(gè)處理元件以及能夠從所述各處理元件進(jìn)行訪問(wèn)的主存儲(chǔ)裝置,所述各處理元件具備進(jìn)行運(yùn)算處理的處理器以及暫時(shí)保存由所述處理器使用的數(shù)據(jù)的高速緩沖存儲(chǔ)器,所述處理元件從所述主存儲(chǔ)裝置讀入的數(shù)據(jù)暫時(shí)保存在所述高速緩沖存儲(chǔ)器中,所述處理元件結(jié)束使用的數(shù)據(jù)從所述高速緩沖存儲(chǔ)器寫回到所述主存儲(chǔ)裝置中,在所述主存儲(chǔ)裝置與所述高速緩沖存儲(chǔ)器之間,按照所述高速緩沖存儲(chǔ)器的管理單位轉(zhuǎn)送數(shù)據(jù),所述方法中,對(duì)由所述處理器執(zhí)行的程序進(jìn)行解析,對(duì)所述程序中包含的執(zhí)行各任務(wù)所需要的數(shù)據(jù)進(jìn)行解析,基于所述解析結(jié)果,在分割了所述各任務(wù)的情況下判定所述分割后的任務(wù)所使用的數(shù)據(jù)的邊界與存儲(chǔ)器的管理單位是否匹配,在判定為所述任務(wù)所使用數(shù)據(jù)的邊界與存儲(chǔ)器的管理單位不匹配的情況下,生成設(shè)置不可高速緩沖存儲(chǔ)區(qū)域的代碼,所述不可高速緩沖存儲(chǔ)區(qū)域是應(yīng)該保存在包含該邊界的管理單位中的數(shù)據(jù)不暫時(shí)保存在所述高速緩沖存儲(chǔ)器中的區(qū)域;以及將包含該邊界的管理單位中保存的運(yùn)算結(jié)果保存在所述不可高速緩沖存儲(chǔ)區(qū)域中的代碼。發(fā)明效果根據(jù)本發(fā)明的代表實(shí)施方式,能夠簡(jiǎn)化硬件。因此,能夠?qū)崿F(xiàn)低成本且低功耗的多 處理器。
圖I是本發(fā)明實(shí)施方式的多處理器的結(jié)構(gòu)圖。圖2是說(shuō)明本發(fā)明實(shí)施方式的多處理器的高速緩沖存儲(chǔ)器的各線所能取的狀態(tài)的圖。圖3A是說(shuō)明本發(fā)明實(shí)施方式的避免消耗過(guò)期數(shù)據(jù)的方法的圖。圖3B是說(shuō)明本發(fā)明實(shí)施方式的避免消耗過(guò)期數(shù)據(jù)的方法的圖。圖4是說(shuō)明本發(fā)明實(shí)施方式的避免發(fā)生偽共享的方法的概要的圖。圖5A是說(shuō)明在使用一維數(shù)組的情況下,在數(shù)組變量的要素之間發(fā)生偽共享的例子的圖。圖5B是說(shuō)明在使用一維數(shù)組的情況下,在數(shù)組變量的要素之間發(fā)生偽共享的例子的圖。圖6A是說(shuō)明本發(fā)明第一實(shí)施方式的避免發(fā)生偽共享的方法的圖。圖6B是說(shuō)明本發(fā)明第一實(shí)施方式的避免發(fā)生偽共享的方法的圖。圖7A是說(shuō)明本發(fā)明第二實(shí)施方式的避免發(fā)生偽共享的方法的圖。圖7B是說(shuō)明本發(fā)明第二實(shí)施方式的避免發(fā)生偽共享的方法的圖。圖8A是說(shuō)明本發(fā)明第三實(shí)施方式的避免發(fā)生偽共享的方法的圖。圖SB是說(shuō)明本發(fā)明第三實(shí)施方式的避免發(fā)生偽共享的方法的圖。圖SC示出本發(fā)明第三實(shí)施方式中的將不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在集中共享存儲(chǔ)器中的情況下的例子。圖8D示出本發(fā)明第三實(shí)施方式中的將不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在分散共享存儲(chǔ)器中的情況下的例子。圖9A是說(shuō)明本發(fā)明第三實(shí)施方式的避免發(fā)生偽共享的方法的變形例的圖。圖9B示出圖9A所示的變形例中的將不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在集中共享存儲(chǔ)器中的情況下的例子。圖9C示出圖9A所示的變形例中的將不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在分散共享存儲(chǔ)器中的情況下的例子。圖IOA是說(shuō)明本發(fā)明第三實(shí)施方式的避免發(fā)生偽共享的方法的變形例的圖。圖IOB是說(shuō)明本發(fā)明第三實(shí)施方式的避免發(fā)生偽共享的方法的變形例的圖。圖11是說(shuō)明本發(fā)明第四實(shí)施方式的避免發(fā)生偽共享的方法的變形例的圖。圖12A是說(shuō)明在使用多維數(shù)組的情況下,在數(shù)組變量的要素之間發(fā)生偽共享的例子的圖。圖12B是說(shuō)明在使用多維數(shù)組的情況下,在數(shù)組變量的要素之間發(fā)生偽共享的例子的圖。圖13A是說(shuō)明將第一實(shí)施方式適用于二維數(shù)組變量的例子的圖。圖13B是說(shuō)明將第一實(shí)施方式適用于二維數(shù)組變量的例子的圖。圖14A是說(shuō)明將第二實(shí)施方式適用于二維數(shù)組變量的例子的圖。圖14B是說(shuō)明將第二實(shí)施方式適用于二維數(shù)組變量的例子的圖。圖15A是說(shuō)明將第三實(shí)施方式適用于二維數(shù)組變量式的例子的圖。圖15B是說(shuō)明將第三實(shí)施方式適用于二維數(shù)組變量的例子的圖。圖16是說(shuō)明將第四實(shí)施方式適用于二維數(shù)組變量的例子的圖。圖17A是不出本發(fā)明實(shí)施方式的循環(huán)分割前處理的宏任務(wù)圖表。圖17B是不出本發(fā)明實(shí)施方式的循環(huán)分割前處理的宏任務(wù)圖表。圖17C是說(shuō)明本發(fā)明實(shí)施方式的用于檢測(cè)偽共享的代碼的例子的圖。圖18是說(shuō)明本發(fā)明實(shí)施方式的并行化編譯器生成軟件一致性控制代碼的處理的概要的圖。圖19是本發(fā)明實(shí)施方式的由編譯器執(zhí)行的處理的流程圖。圖20A是本發(fā)明實(shí)施方式的偽共享避免處理的流程圖。圖20B是本發(fā)明實(shí)施方式的偽共享避免處理的流程圖。
圖21是本發(fā)明實(shí)施方式的高速緩沖存儲(chǔ)操作指示的插入處理的流程圖。圖22是說(shuō)明一致性控制中的第一問(wèn)題點(diǎn)(過(guò)期數(shù)據(jù))的圖。圖23是說(shuō)明一致性控制中的第二問(wèn)題點(diǎn)(偽共享)的圖。
具體實(shí)施例方式圖I是本發(fā)明實(shí)施方式的多處理器的結(jié)構(gòu)圖。本發(fā)明實(shí)施方式的多處理器具備多個(gè)處理元件(PEO、PE1、……、PEn)100、110、120、內(nèi)部結(jié)合網(wǎng)150和集中共享存儲(chǔ)器160。處理元件100具備進(jìn)行運(yùn)算處理的處理器101、暫時(shí)保存數(shù)據(jù)的高速緩沖存儲(chǔ)器102、分散共享存儲(chǔ)器(DSM) 103和數(shù)據(jù)轉(zhuǎn)送控制器,獨(dú)立地進(jìn)行動(dòng)作。處理器101只要能夠進(jìn)行整數(shù)運(yùn)算和浮動(dòng)小數(shù)點(diǎn)運(yùn)算即可,其功能不受特別限定。例如,可以使用數(shù)據(jù)的裝載(load)以及存放(store)的體系結(jié)構(gòu)為單純的單發(fā)(single-issue) RISC體系結(jié)構(gòu)的CPU。此外,也可以使用超標(biāo)量處理器、VLIW處理器等。高速緩沖存儲(chǔ)器102是暫時(shí)保存由處理器101從集中共享存儲(chǔ)器160讀入的數(shù)據(jù)的存儲(chǔ)器。處理器101使用保存在高速緩沖存儲(chǔ)器102中的數(shù)據(jù)進(jìn)行運(yùn)算處理。若處理器101的運(yùn)算處理結(jié)束,則保存在高速緩沖存儲(chǔ)器102中的數(shù)據(jù)寫回到集中共享存儲(chǔ)器160中。在該高速緩沖存儲(chǔ)器102和集中共享存儲(chǔ)器160之間,按每個(gè)線讀寫數(shù)據(jù)。該線是高速緩沖存儲(chǔ)器102所保存的數(shù)據(jù)的管理單位。另外,處理元件100也可以將高速緩沖存儲(chǔ)器102用作二級(jí)高速緩沖存儲(chǔ)器,除高速緩沖存儲(chǔ)器102以外,還具備一級(jí)高速緩沖存儲(chǔ)器。該情況下,所述一級(jí)高速緩沖存儲(chǔ)器和二級(jí)高速緩沖存儲(chǔ)器(高速緩沖存儲(chǔ)器102)也可以被進(jìn)行一致性控制。即,本發(fā)明實(shí)施方式的多處理器中不具有在發(fā)揮主存儲(chǔ)作用的集中共享存儲(chǔ)器160和最外側(cè)的高速緩沖存儲(chǔ)器102之間保證數(shù)據(jù)的一致的一致性功能。分散共享存儲(chǔ)器103是能夠從其他處理元件直接讀寫所保存的數(shù)據(jù)的存儲(chǔ)器。另夕卜,若分散共享存儲(chǔ)器103由雙口存儲(chǔ)器構(gòu)成,則處理器101與數(shù)據(jù)轉(zhuǎn)送控制器能夠沒(méi)有競(jìng)爭(zhēng)地對(duì)分散共享存儲(chǔ)器進(jìn)行訪問(wèn)。另外,分散共享存儲(chǔ)器103對(duì)本實(shí)施方式的多處理器來(lái)說(shuō)不是必須的結(jié)構(gòu)。 數(shù)據(jù)轉(zhuǎn)送控制器在處理元件之間轉(zhuǎn)送處理元件所具備的存儲(chǔ)器中保存的數(shù)據(jù)。另外,處理元件100除了圖示的結(jié)構(gòu)以外,還可以具備局部程序存儲(chǔ)器、局部數(shù)據(jù)存儲(chǔ)器、網(wǎng)絡(luò)接口和功率控制寄存器。另外,處理元件110、120也具有與處理元件100相同的結(jié)構(gòu)。內(nèi)部結(jié)合網(wǎng)150由已有的連接技術(shù)(縱橫開關(guān)、總線、多級(jí)式網(wǎng)絡(luò)等)來(lái)實(shí)現(xiàn),連接多個(gè)處理元件100等以及集中共享存儲(chǔ)器160。集中共享存儲(chǔ)器160 (CSM)發(fā)揮主存儲(chǔ)功能,保存由系統(tǒng)中的全部處理元件100等共享的數(shù)據(jù),是可以從各處理元件100等進(jìn)行訪問(wèn)的存儲(chǔ)器。另外,本實(shí)施方式的多處理器不具有用于在高速緩沖存儲(chǔ)器102等與集中共享存儲(chǔ)器160之間保證數(shù)據(jù)的一致的基于硬件實(shí)現(xiàn)的一致性功能?!催^(guò)期數(shù)據(jù)的解決〉首先,關(guān)于避免發(fā)生第一問(wèn)題即過(guò)期數(shù)據(jù)的方法進(jìn)行說(shuō)明。本發(fā)明實(shí)施方式的多處理器如上所述,不具有用于在高速緩沖存儲(chǔ)器102等與集中共享存儲(chǔ)器160之間保證數(shù)據(jù)的一致的基于硬件實(shí)現(xiàn)的一致性功能。因此,在某處理元件在高速緩沖存儲(chǔ)器上更新了數(shù)據(jù)的情況下,該數(shù)據(jù)更新不會(huì)被通知到其他處理元件。此夕卜,直到寫回已更新的數(shù)據(jù)為止,更新后的數(shù)據(jù)也不被反映到集中共享存儲(chǔ)器160。因此,本發(fā)明實(shí)施方式的編譯器基于對(duì)程序的解析結(jié)果(數(shù)據(jù)控制流、數(shù)據(jù)依賴關(guān)系),生成基于軟件的明確的高速緩沖存儲(chǔ)操作代碼。生成的高速緩沖存儲(chǔ)操作代碼只是對(duì)保存在執(zhí)行該命令的處理元件的高速緩沖存儲(chǔ)器中的數(shù)據(jù)進(jìn)行操作的命令,并不是像由硬件實(shí)現(xiàn)的一致性協(xié)議中的高速緩沖存儲(chǔ)操作請(qǐng)求那樣的、對(duì)保存在其他處理元件的高速緩沖存儲(chǔ)器中的數(shù)據(jù)的狀態(tài)進(jìn)行操作的命令。生成的高速緩沖存儲(chǔ)操作代碼有回寫、自無(wú)效、清除三種?;貙?writeback)是用于將保存在高速緩沖存儲(chǔ)器102中的數(shù)據(jù)寫回到集中共享存儲(chǔ)器160中的命令。在高速緩沖存儲(chǔ)器102上數(shù)據(jù)被更新、與集中共享存儲(chǔ)器160上的對(duì)應(yīng)的地址中保存的數(shù)據(jù)不同的情況下,線的狀態(tài)成為臟(dirty),需要將高速緩沖存儲(chǔ)器102中保存的數(shù)據(jù)寫回到集中共享存儲(chǔ)器160中。
另外,通過(guò)隨著高速緩沖存儲(chǔ)器102的線更換(line Replace)的數(shù)據(jù)的寫回(auto-writeback),數(shù)據(jù)也會(huì)寫回到集中共享存儲(chǔ)器160。自無(wú)效(self-invalidate)是用于使高速緩沖存儲(chǔ)器102的線無(wú)效化的命令。被自無(wú)效后成為無(wú)效狀態(tài)的數(shù)據(jù)即使保存在高速緩沖存儲(chǔ)器中,在從集中共享存儲(chǔ)器160讀入為止也不能使用。清除(purge)是用于在將高速緩沖存儲(chǔ)器102的線中保存的數(shù)據(jù)寫回(回寫)之后執(zhí)行自無(wú)效的命令。此外,在各處理元件所執(zhí)行的任務(wù)之間發(fā)生通信之處插入高速緩沖存儲(chǔ)操作代 碼。另外,在不同的處理元件保持著同一線的數(shù)據(jù)的情況下,編譯器控制為不同時(shí)更新保存在不同的處理元件中的同一線的數(shù)據(jù)。圖2是說(shuō)明本發(fā)明實(shí)施方式的多處理器的高速緩沖存儲(chǔ)器102的各線所能取的狀態(tài)的圖。高速緩沖存儲(chǔ)器102按每個(gè)線取修改(Modified)、有效(Valid)、過(guò)期(Stale)、無(wú)效(Invalid)四種狀態(tài)。修改(Modified)是指高速緩沖存儲(chǔ)器102所保存的數(shù)據(jù)為被更新后的臟數(shù)據(jù),與集中共享存儲(chǔ)器160上的對(duì)應(yīng)的地址中保存的數(shù)據(jù)不同的狀態(tài)。該情況下,需要通過(guò)回寫來(lái)將高速緩沖存儲(chǔ)器102中保存的數(shù)據(jù)寫回到集中共享存儲(chǔ)器160中。有效(Valid)是高速緩沖存儲(chǔ)器102中保存的數(shù)據(jù)與集中共享存儲(chǔ)器160上的對(duì)應(yīng)的地址中保存的數(shù)據(jù)相一致的干凈(clean)狀態(tài)。過(guò)期(Stale)是由其他處理元件重寫了應(yīng)該與高速緩沖存儲(chǔ)器102中保存的數(shù)據(jù)同步的數(shù)據(jù)、但是該更新數(shù)據(jù)還未被寫回到集中共享存儲(chǔ)器160中、因此該高速緩沖存儲(chǔ)數(shù)據(jù)與集中共享存儲(chǔ)器160上的對(duì)應(yīng)的地址中保存的數(shù)據(jù)相一致的干凈狀態(tài)。無(wú)效(Invalid)是有可能是與高速緩沖存儲(chǔ)器102中保存的數(shù)據(jù)不一致的數(shù)據(jù)的狀態(tài)。上述四種狀態(tài)通過(guò)對(duì)高速緩沖存儲(chǔ)器102的訪問(wèn)以及高速緩沖存儲(chǔ)操作來(lái)遷移。對(duì)高速緩沖存儲(chǔ)器102的訪問(wèn)中有由處理器101從集中共享存儲(chǔ)器160讀入數(shù)據(jù)的讀入(read)和由處理器101向高速緩沖存儲(chǔ)器102寫入數(shù)據(jù)的寫入(write)。本發(fā)明實(shí)施方式的編譯器進(jìn)行控制,以使保存在多個(gè)處理元件的高速緩沖存儲(chǔ)器中的同一線的數(shù)據(jù)不同時(shí)為修改(Modified)。此外,本實(shí)施方式的編譯器還控制成不讀寫過(guò)期數(shù)據(jù)。圖3A和圖3B是說(shuō)明本發(fā)明實(shí)施方式的避免消耗過(guò)期數(shù)據(jù)的方法的圖。本發(fā)明實(shí)施方式的編譯器在存在跨處理元件的數(shù)據(jù)依賴的情況下,在數(shù)據(jù)依賴的邊緣使數(shù)據(jù)同步。例如,編譯器應(yīng)該通過(guò)程序的解析而檢測(cè)出的數(shù)據(jù)依賴的邊緣,是根據(jù)流依賴而產(chǎn)生的定義-使用(def-use)關(guān)系。例如,如圖3A所示,當(dāng)PEO在任務(wù)塊I(SBl)中定義變量A(300)后PEl在任務(wù)塊3 (SB3)中使用變量A的情況下,如圖3B所示,隨著PEO對(duì)變量A的更新,PEl將保存有變量A的線的狀態(tài)變更為無(wú)效(302)。此外,在PEO將變量A寫回到集中共享存儲(chǔ)器(301)后,PEl使用變量A。
更具體而言,編譯器在其他處理元件(PEl)中使用PEO更新的變量A之前,插入回寫命令(301)。該情況下,在接下來(lái)自身處理元件(PEO)使用變量A時(shí)不插入回寫命令,就在其他處理元件(PEl)使用變量A之前插入回寫命令即可。進(jìn)而,為了進(jìn)行使用標(biāo)志變量的處理元件間的數(shù)據(jù)同步,編譯器在同步的發(fā)送側(cè)(PEO)插入向同步標(biāo)志變量(sync_flg)中寫入表示同步的值的命令(302)、和將保存有該同步標(biāo)志變量的高速緩沖存儲(chǔ)器的線寫回到集中共享存儲(chǔ)器的命令(303)。另一方面,關(guān)于PE1,編譯器在使用由其他處理元件(PEO)更新后的變量A之前,插入自無(wú)效命令(304)。另外,插入自無(wú)效命令(403)的位置(自無(wú)效的定時(shí))優(yōu)選為使用變量A的緊前。進(jìn)而,編譯器反復(fù)進(jìn)行同步標(biāo)志變量(sync_flg)的無(wú)效和讀入,并且插入直到同步標(biāo)志變量的值被更新為表示同步的值為止在忙碌等待狀態(tài)下待機(jī)的命令(305)。 PEl由于變量A被無(wú)效而不能夠使用高速緩沖存儲(chǔ)器上的變量A,因此,從集中共享存儲(chǔ)器160向高速緩沖存儲(chǔ)器裝載變量A,取得PEO中更新后的變量A。以上關(guān)于定義-使用(def-use)的關(guān)系進(jìn)行了說(shuō)明,但在根據(jù)輸出依賴而產(chǎn)生的定義-定義(def-def)關(guān)系、使用-定義(use_def)的反依賴關(guān)系、使用-使用(use_use)的輸入依賴關(guān)系中也可能發(fā)生同樣的情況。這樣,本實(shí)施方式的編譯器按照對(duì)任務(wù)之間的流依賴和輸出依賴進(jìn)行解析的結(jié)果來(lái)插入高速緩沖存儲(chǔ)操作命令,因此,不用進(jìn)行一致性控制,而不消耗過(guò)期數(shù)據(jù)。〈偽共享的解決〉下面,關(guān)于避免發(fā)生第二問(wèn)題即偽共享的方法進(jìn)行說(shuō)明。圖4是說(shuō)明本發(fā)明實(shí)施方式的避免發(fā)生偽共享的方法的概要的圖。在本實(shí)施方式中,各變量以由各處理元件使用的變量不放置到相同的高速緩沖存儲(chǔ)器線上的方式配置(定位)在高速緩沖存儲(chǔ)器的線的開頭。另外,變量的定位既可以在數(shù)組變量的聲明中指定,也可以另行在設(shè)定文件等中進(jìn)行描述。首先,與圖23中所述同樣,聲明全局變量a、b (400),變量a = O、b = 0保存在集中共享存儲(chǔ)器160中。但是,在本發(fā)明的實(shí)施方式中與圖23中所述不同的是,聲明后的全局變量a、b配置在集中共享存儲(chǔ)器160的高速緩沖存儲(chǔ)器的線的開頭,因此,保存在不同的線上。然后,某處理元件(PEO)的高速緩沖存儲(chǔ)器上的共享數(shù)據(jù)被更新(a = 0— I)(401),其他處理元件(PEl)的高速緩沖存儲(chǔ)器上的共享數(shù)據(jù)被更新(b = 0 — 2) (402)。但是,由于各處理元件更新了不同線上所保存的不同的變量,因此,不管各處理元件在哪個(gè)定時(shí)將高速緩沖存儲(chǔ)器中保存的數(shù)據(jù)寫回到集中共享存儲(chǔ)器160(404、405),集中共享存儲(chǔ)器160中都是保存正確的數(shù)據(jù)(a = l、b = 2)。下面,關(guān)于使用一維數(shù)組的情況進(jìn)行說(shuō)明。圖5A和圖5B是說(shuō)明在使用一維數(shù)組的情況下,在數(shù)組變量的要素之間發(fā)生偽共享的例子的圖。首先,如圖5B所示,聲明全局變量a,變量a配置在集中共享存儲(chǔ)器線的開頭(高速緩沖存儲(chǔ)器的線的開頭)(500)。本實(shí)施方式中考慮高速緩沖存儲(chǔ)器的I個(gè)線是16字節(jié),能夠在I個(gè)線上保存4個(gè)變量的情況。因此,如圖5A所示,在高速緩沖存儲(chǔ)器的第一線511保存有a
至a [3],在第二線512保存有a [4]至a [7],在第五線511保存有a [16]至a[19]。然后,處理元件(PEO) 100在高速緩沖存儲(chǔ)器102上處理變量a[i] (0彡i < 18)(501),處理元件(PEl) 110在高速緩沖存儲(chǔ)器112上處理變量a[i] (18彡i < 36) (502),PEO和PEl將處理結(jié)果從高速緩沖存儲(chǔ)器102和112寫回到集中共享存儲(chǔ)器160中。從高速緩沖存儲(chǔ)器102和112向集中共享存儲(chǔ)器160的數(shù)據(jù)寫回以線單位進(jìn)行。由于在第五線515上存在由PEO處理的a[16]和a[17]以及由PEl處理的a[18]和a[19],因此,在該線上,PEO所進(jìn)行的訪問(wèn)和PEl所進(jìn)行的訪問(wèn)相競(jìng)爭(zhēng)而發(fā)生偽共享。圖6A和圖6B是說(shuō)明本發(fā)明第一實(shí)施方式的避免發(fā)生偽共享的方法的圖。在第一實(shí)施方式的方法中,如圖6A所示,通過(guò)將全局變量a的各要素配置在集中共享存儲(chǔ)器的線開頭(高速緩沖存儲(chǔ)器的線的開頭),來(lái)將各要素配置在不同的線上。因 此,處理被高速緩沖存儲(chǔ)器的邊界分割。首先,如圖6B所示,聲明全局變量a,變量a中包含的36個(gè)數(shù)組變量的各要素配置在集中共享存儲(chǔ)器線的開頭(高速緩沖存儲(chǔ)器的線的開頭)(600)。然后,處理元件(PEO) 100處理變量a[i] (0彡i < 18) (601),處理元件(PEl) 110處理變量a [i] (18彡i < 36) (602),PEO和PEl將處理結(jié)果寫回到集中共享存儲(chǔ)器160中。但是,與使用圖5A所述的情況不同,如圖6B所示,PEO和PEl不對(duì)集中共享存儲(chǔ)器160的相同的線進(jìn)行訪問(wèn)。因此,多個(gè)處理元件不向相同的線寫回?cái)?shù)據(jù),不會(huì)發(fā)生偽共享。另外,在本實(shí)施方式中,I個(gè)線具有能夠保存4個(gè)變量的容量,但由于I個(gè)線僅保存了 I個(gè)變量,因此,高速緩沖存儲(chǔ)器的利用效率下降。因此,本實(shí)施方式在數(shù)組變量的要素?cái)?shù)量少的情況下有效。此外,在同一處理元件進(jìn)行對(duì)數(shù)組變量的下標(biāo)不同的要素(a(i)、a (i+1))進(jìn)行訪問(wèn)的這種間接存儲(chǔ)器訪問(wèn)的情況下也有效。圖7A和圖7B是說(shuō)明本發(fā)明第二實(shí)施方式的避免發(fā)生偽共享的方法的圖。如使用圖5A所述,偽共享是因在高速緩沖存儲(chǔ)器的I個(gè)線上保存由不同的處理元件所處理的數(shù)據(jù)而發(fā)生的。因此,在本實(shí)施方式中,如圖7A所示,在高速緩沖存儲(chǔ)器的線的邊界分開由各處理元件處理的數(shù)據(jù),以使由多個(gè)處理元件處理的數(shù)據(jù)不保存在高速緩沖存儲(chǔ)器的I個(gè)線上。首先,如圖7B所示,聲明全局變量a,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭)(700)。然后,處理元件(PEO) 100處理變量a[i] (0彡i < 16) (701),處理元件(PEl) 110處理變量a[i] (16 ^ i < 36) (702)。然后,PEO將處理結(jié)果從高速緩沖存儲(chǔ)器102寫回到集中共享存儲(chǔ)器160中,PEl將處理結(jié)果從高速緩沖存儲(chǔ)器112寫回到集中共享存儲(chǔ)器160中。在本實(shí)施方式中,I個(gè)線具有能夠保存4個(gè)變量的容量,因此,使各處理元件處理高速緩沖存儲(chǔ)器線尺寸4的倍數(shù)個(gè)的數(shù)組變量的要素。因此,如圖7A所示,所述PEO的訪問(wèn)范圍和PEl的訪問(wèn)范圍在高速緩沖存儲(chǔ)器的線的邊界被分開,所述PEO和PEl不對(duì)高速緩沖存儲(chǔ)器的相同的線進(jìn)行訪問(wèn)。因此,多個(gè)處理元件不向相同的線寫回?cái)?shù)據(jù),不會(huì)發(fā)生偽共享。另外,在本實(shí)施方式中,對(duì)PEO分配了 16個(gè)數(shù)組變量的處理,對(duì)PEl分配了 20個(gè)數(shù)組變量的處理,但如果以成為高速緩沖存儲(chǔ)器線尺寸(I個(gè)線所能保存的數(shù)組變量的要素?cái)?shù))的倍數(shù)的方式劃分,則也可以對(duì)PEO分配20個(gè)數(shù)組變量的處理,對(duì)PEl分配16個(gè)數(shù)組變量的處理。此外,也可以按照各處理元件的處理能力比來(lái)分配適當(dāng)數(shù)量的數(shù)組變量的處理。另外,在本實(shí)施方式中,根據(jù)高速緩沖存儲(chǔ)器線尺寸、數(shù)組變量的要素的數(shù)量和處理元件的數(shù)量,分配給各處理元件的數(shù)組變量的要素的數(shù)量不相等,有時(shí)會(huì)產(chǎn)生處理元件的處理負(fù)荷不均衡。因此,本實(shí)施方式在數(shù)組尺寸足夠大、并且與數(shù)組尺寸相比不均衡小到可以忽略的程度的情況下有效。圖8A和圖SB是說(shuō)明本發(fā)明第三實(shí)施方式的避免發(fā)生偽共享的方法的圖。在第三實(shí)施方式中,通過(guò)在處理的邊界上使用不可高速緩沖存儲(chǔ)區(qū)域 (non-cacheable area)來(lái)避免偽共享的發(fā)生。首先,如圖8B所示,聲明全局變量a和變量ncbuf,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭),4個(gè)數(shù)組變量尺寸的變量ncbuf設(shè)置在不可高速緩沖存儲(chǔ)區(qū)域中(800)。所述不可高速緩沖存儲(chǔ)區(qū)域,是在處理元件從存儲(chǔ)器讀入了該區(qū)域中保存的數(shù)據(jù)時(shí),將該讀入的數(shù)據(jù)不裝載到各處理元件的高速緩沖存儲(chǔ)器中地使用的區(qū)域。通過(guò)將存儲(chǔ)器的區(qū)域(地址)或者規(guī)定的變量指定給不可高速緩沖存儲(chǔ)區(qū)域,來(lái)將不可高速緩沖存儲(chǔ)區(qū)域與通常的可高速緩沖存儲(chǔ)區(qū)域相區(qū)別。該不可高速緩沖存儲(chǔ)區(qū)域的指定可以由規(guī)定的設(shè)定文件預(yù)先設(shè)定,也可以由聲明變量的命令來(lái)設(shè)定。然后,處理元件(PEO) 100在高速緩沖存儲(chǔ)器上處理變量a [i] (0^ i< 18) (801),處理元件(PEl) 110使用ncbuf [i] (i = 2、3),在不可高速緩沖存儲(chǔ)區(qū)域上處理變量a[i](18、19) (802),PEl在高速緩沖存儲(chǔ)器上處理變量a[i] (20彡i < 36) (803)。PEO在之后或者與處理803并行地從不可高速緩沖存儲(chǔ)區(qū)域中讀出已由PEl處理后的變量ncbuf[i] (i = 2、3),并寫入到PEO的高速緩沖存儲(chǔ)器的變量a[i] (i = 18,19)中(804)。利用該數(shù)據(jù)依賴,由PEl處理的變量a[i] (i = 18、19)轉(zhuǎn)送到PEO0然后,PEO將變量a[i] (0彡i < 20)寫回到集中共享存儲(chǔ)器160中,PEl將變量a[i] (20彡i < 36)寫回到集中共享存儲(chǔ)器160中。這樣,第三實(shí)施方式中,如圖8A所示,PEl將使用不可高速緩沖存儲(chǔ)的緩沖器運(yùn)算出的結(jié)果反映到PEO的高速緩沖存儲(chǔ)器的變量。即,在多個(gè)處理元件對(duì)相同的線上的數(shù)據(jù)進(jìn)行訪問(wèn)的情況下,一方處理元件(PEl)在設(shè)置在高速緩沖存儲(chǔ)器內(nèi)的不可高速緩沖存儲(chǔ)區(qū)域中保存該線上的數(shù)據(jù),另一方處理元件(PEO)將不可高速緩沖存儲(chǔ)區(qū)域的數(shù)據(jù)保存在集中共享存儲(chǔ)器中,因此,多個(gè)處理元件不向相同的線寫回?cái)?shù)據(jù),不會(huì)發(fā)生偽共享。另外,保存在線811 814中的數(shù)據(jù)僅被PEO使用,保存在線811 814中的數(shù)據(jù)僅被PEO使用,因此,也可以將線811 814和線816 819在高速緩沖存儲(chǔ)器上局部化。局部化后的數(shù)據(jù)不被寫回到主存儲(chǔ)中,而是保持在高速緩沖存儲(chǔ)器上,直到下一次PEO使用。同樣,也可以將應(yīng)該保存在線811 814中的數(shù)據(jù)和應(yīng)該保存在線816 819中的數(shù)據(jù)保存在局部存儲(chǔ)器中。S卩,僅是第五線815處于高速緩沖存儲(chǔ)器上(可高速緩沖存儲(chǔ)區(qū)域上)即可,除此以外的區(qū)域(線811 814、線816 819)也可以不存在于可高速緩沖存儲(chǔ)區(qū)域上。
另外,本實(shí)施方式中需要在存儲(chǔ)器上設(shè)置不可高速緩沖存儲(chǔ)區(qū)域,但不可高速緩沖存儲(chǔ)區(qū)域也可以設(shè)置在集中共享存儲(chǔ)器、分散共享存儲(chǔ)器等中的任意存儲(chǔ)器中。此外,本實(shí)施方式中會(huì)產(chǎn)生從不可高速緩沖存儲(chǔ)區(qū)域向高速緩沖存儲(chǔ)器復(fù)制數(shù)據(jù)的處理的開銷。但是,通過(guò)利用分散共享存儲(chǔ)器來(lái)作為不可高速緩沖存儲(chǔ)的緩沖器,能夠以低開銷實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)送。該第三實(shí)施方式的方法在通過(guò)上述第二實(shí)施方式的方法不能分割的情況下、數(shù)組不能擴(kuò)展的情況下有效。圖SC表示在本發(fā)明第三實(shí)施方式中不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在集中共享存儲(chǔ)器160中的情況的例子。在圖SC所示的例子中,集中共享存儲(chǔ)器160的一部分區(qū)域被指定為不可高速緩沖存儲(chǔ)區(qū)域。PEO在高速緩沖存儲(chǔ)器上處理變量a [i] (0彡i < 18) (801),處理元件(PEl)IlO使用ncbuf [i] (i = 2、3),在設(shè)置在集中共享存儲(chǔ)器160中的不可高速緩沖存儲(chǔ)區(qū)域上處理 變量a[i] (18、19) (802),PEl在高速緩沖存儲(chǔ)器上處理變量a[i] (20彡i < 36) (803)。然后,從集中共享存儲(chǔ)器160的不可高速緩沖存儲(chǔ)區(qū)域中讀出由PEl處理后的變量ncbuf[i] (i = 2、3),并寫入到?£0的高速緩沖存儲(chǔ)器的變量&[1] (i = 18,19)中(804)。由此,由PEl處理后的變量a[i](i = 18、19)轉(zhuǎn)送到PE0。因此,即使PEO將變量a[i](0彡i < 20)寫回到集中共享存儲(chǔ)器160中、且PEl將變量a[i] (20 ^ i < 36)寫回到集中共享存儲(chǔ)器160中,也不會(huì)發(fā)生偽共享。圖8D表示本發(fā)明第三實(shí)施方式的方法中的不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在分散共享存儲(chǔ)器103中的情況的例子。在圖8D所示的例子中,分散共享存儲(chǔ)器103的一部分區(qū)域被指定為不可高速緩沖存儲(chǔ)區(qū)域。PEO在高速緩沖存儲(chǔ)器上處理變量a [i] (0彡i < 18) (801),處理元件(PEl)IlO使用ncbuf[i] (i = 2、3),在設(shè)置在PEO的分散共享存儲(chǔ)器103中的不可高速緩沖存儲(chǔ)區(qū)域上處理變量a [i] (i = 18、19) (802),PEl在高速緩沖存儲(chǔ)器上處理變量a [i] (20 ^ i < 36)(803)。然后,從分散共享存儲(chǔ)器103的不可高速緩沖存儲(chǔ)區(qū)域中讀出由PEl處理后的變量ncbuf[i] (i = 2、3),并寫入到?£0的高速緩沖存儲(chǔ)器的變量&[1] (i = 18,19)中(804)。由此,由PEl處理后的變量a[i](i = 18、19)轉(zhuǎn)送到PE0。因此,即使PEO將變量a[i] (0彡i < 20)寫回到集中共享存儲(chǔ)器160中且PEl將變量a[i] (20 ^ i < 36)寫回到集中共享存儲(chǔ)器160中,也不會(huì)發(fā)生偽共享。圖9A是說(shuō)明本發(fā)明第三實(shí)施方式的避免發(fā)生偽共享的方法的變形例的圖。圖9A中說(shuō)明的變形例與上述的例子不同,各處理元件在自己的存儲(chǔ)器上進(jìn)行運(yùn)算,并將其運(yùn)算結(jié)果轉(zhuǎn)送到不可高速緩沖存儲(chǔ)區(qū)域,由此避免偽共享的發(fā)生。因此,能夠減少對(duì)其他存儲(chǔ)器和處理元件等的訪問(wèn),使處理高速化。首先,如圖9A所示,聲明全局變量a和變量ncbuf及l(fā)ocalbuf_pel,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭)。此外,數(shù)組變量4個(gè)的尺寸的變量ncbuf設(shè)置在不可高速緩沖存儲(chǔ)區(qū)域中,將數(shù)組變量4個(gè)的尺寸的變量localbuf_pel設(shè)置在不可高速緩沖存儲(chǔ)區(qū)域中(900)。另外,變量localbuf_pel僅在處理元件(PEl)IlO中被使用,因此是局部變量即可。
然后,處理元件(PEO) 100在高速緩沖存儲(chǔ)器上處理變量a[i] (0 ≤ i < 18)(901),PEl 使用 localbuf_pel[i] (i = 2、3)處理變量 a[i] (18、19) (902),并將處理結(jié)果(localbuf_pel [i] (i = 2、3))寫入到 ncbuf[i] (i = 2、3)中(903)。然后,PEl 在高速緩沖存儲(chǔ)器上處理變量a[i] (20≤i < 36) (904)。PEO在之后或者與處理904并行地從不可高速緩沖存儲(chǔ)區(qū)域中讀出由PEl處理后的變量ncbuf[i] (i = 2、3),并寫入到PEO的高速緩沖存儲(chǔ)器的變量a[i] (i = 18、19)中(905)。通過(guò)該數(shù)據(jù)依賴,由PEl處理后的變量a[i] (i = 18、19)轉(zhuǎn)送到PE0。然后,PEO將變量a[i] (0 ^ i < 20)寫回到集中共享存儲(chǔ)器160中,PEl將變量a[i] (20≤i < 36)寫回到集中共享存儲(chǔ)器160中。圖9B表示在本發(fā)明第三實(shí)施方式中不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在集中共享存儲(chǔ)器160中、并且運(yùn)算區(qū)域(l0CalbUf_pel)設(shè)置在PEl的存儲(chǔ)器中的情況的例子。設(shè)置該運(yùn)算區(qū)域的PEl的存儲(chǔ)器可以是局部存儲(chǔ)器,也可以是分散共享存儲(chǔ)器,也可以是高速緩沖存儲(chǔ)器。PEO在高速緩沖存儲(chǔ)器上處理變量a[i] (0≤i < 18) (901),PEl使用設(shè)置在PEl的存儲(chǔ)器上的localbuf_pel[i] (i = 2、3)來(lái)處理變量a[i] (18、19) (902),并將處理結(jié)果(localbuf_pel[i] (i = 2,3))寫入到設(shè)置在集中共享存儲(chǔ)器160中的不可高速緩沖存儲(chǔ)區(qū)域上的ncbuf[i] (i = 2、3)中(903)。然后,PEl在高速緩沖存儲(chǔ)器上處理變量a[i] (20 Si
<36)(904)。然后,從集中共享存儲(chǔ)器160的不可高速緩沖存儲(chǔ)區(qū)域讀出由PEl處理后的變量ncbuf[i] (i = 2、3),并寫入到PEO的高速緩沖存儲(chǔ)器的變量a[i] (i = 18、19)中(905)。由此,由PEl處理后的變量a[i](i = 18、19)轉(zhuǎn)送到PE0。因此,即使PEO將變量a[i] (0≤i <20)寫回到集中共享存儲(chǔ)器160中、并且PEl將變量a[i] (20 ^ i < 36)寫回到集中共享存儲(chǔ)器160中,也不會(huì)發(fā)生偽共享。圖9C表示本發(fā)明第三實(shí)施方式的方法中的不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在分散共享存儲(chǔ)器103中、并且運(yùn)算區(qū)域(l0Calbuf_pel)設(shè)置在PEl的存儲(chǔ)器中的情況的例子。在圖9C所示的例子中,分散共享存儲(chǔ)器103的一部分區(qū)域被指定為不可高速緩沖存儲(chǔ)區(qū)域。此外,設(shè)置運(yùn)算區(qū)域的PEl的存儲(chǔ)器可以是局部存儲(chǔ)器,也可以是分散共享存儲(chǔ)器,也可以是高速緩沖存儲(chǔ)器。PEO在高速緩沖存儲(chǔ)器上處理變量a[i] (0≤i < 18) (901),PEl使用設(shè)置在PEl的存儲(chǔ)器上的localbuf_pel[i] (i = 2、3)處理變量a[i] (18,19) (902),并將處理結(jié)果(localbuf_pel[i] (i = 2,3))寫入到設(shè)置在PEO的分散共享存儲(chǔ)器103中的不可高速緩沖存儲(chǔ)區(qū)域上的ncbuf[i] (i = 2、3)中(903)。然后,PEl在高速緩沖存儲(chǔ)器上處理變量a[i](20 ≤ i < 36) (904)。然后,從分散共享存儲(chǔ)器103的不可高速緩沖存儲(chǔ)區(qū)域讀出由PEl處理后的變量ncbuf[i] (i = 2、3),并寫入到PEO的高速緩沖存儲(chǔ)器的變量a[i] (i = 18、19)中(905)。由此,由PEl處理后的變量a[i](i = 18、19)轉(zhuǎn)送到PE0。因此,即使PEO將變量a[i] (0≤i <20)寫回到集中共享存儲(chǔ)器160中、并且PEl將變量a[i] (20 ^ i < 36)寫回到集中共享存儲(chǔ)器160中,也不會(huì)發(fā)生偽共享。根據(jù)圖9A 圖9C記載的變形例,由于在自身處理元件上的存儲(chǔ)器中運(yùn)算邊界部分的變量,因此,能夠減少經(jīng)由總線的向其他處理元件或存儲(chǔ)器的數(shù)據(jù)的轉(zhuǎn)送,使處理高速化。圖IOA和圖IOB是說(shuō)明本發(fā)明第三實(shí)施方式的避免發(fā)生偽共享的方法的變形例的圖。首先,如圖IOB所示,聲明全局變量a、ncbuf_peO和ncbuf_pel,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭),4個(gè)數(shù)組變量的尺寸的變量ncbuf_peO和變量ncbuf_pel設(shè)置在不可高速緩沖存儲(chǔ)區(qū)域中(1000)。該變量ncbuf_pe0配置在PEO的分散共享存儲(chǔ)器中,變量ncbuf_pel配置在PEl的分散共享存儲(chǔ)器中。在本實(shí)施方式中,處理元件(PEO) 100處理i = 0至i = 17的變量a,處理元件(PEl) 110處理i = 18至i = 35的變量a。
具體而言,處理元件(PEO) 100在高速緩沖存儲(chǔ)器上處理了變量a[i] (0 ^ i < 16)(1001)。此外,PEO在分散共享存儲(chǔ)器上的ncbuf_pe0中處理變量a[i] (16、17),并將處理結(jié)果寫入到PEl的分散共享存儲(chǔ)器的ncbuf_pel中(1002)。與此并行或者在其前后,處理元件(PEl) 110在分散共享存儲(chǔ)器上的ncbuf_pel中處理變量a[i] (i = 18、19),并將處理結(jié)果寫入到PEO的分散共享存儲(chǔ)器的ncbuf_pe0中(1004)。此外,PEl在高速緩沖存儲(chǔ)器上處理變量a[i] (20彡i < 36) (1005)。此外,PEO從不可高速緩沖存儲(chǔ)區(qū)域讀出變量ncbuf_peO[i] (0 ^ i < 4),并寫入到PEO的高速緩沖存儲(chǔ)器的變量a[i] (16彡i < 20)中(1003)。另外,根據(jù)從處理結(jié)果的向ncbuf_pe0的寫入(1004)到向ncbuf_pe0的a[i]的寫入(1003)的數(shù)據(jù)依賴,由PEl處理后的變量a[i](i = 18,19)保存在ncbuf_peO[i]中。因此,在步驟1003中,由PEO處理后的變量a[i] (i = 16,17)和由PEl處理后的變量a[i] (i = 18,19)寫入到PEO的高速緩沖存儲(chǔ)器上。然后,PEO和PEl將處理結(jié)果寫回到集中共享存儲(chǔ)器160中。但是,與使用圖5A所述的情況不同,在PEO與PEl的邊界區(qū)域的變量a [i] (16^ i < 20)中保存有相同的數(shù)據(jù),因此,不管哪個(gè)處理元件寫回?cái)?shù)據(jù),集中共享存儲(chǔ)器160中保存的數(shù)據(jù)都不變。S卩,在第三實(shí)施方式中,各處理元件針對(duì)PEO所訪問(wèn)的集中共享存儲(chǔ)器的區(qū)域與PEl所訪問(wèn)的集中共享存儲(chǔ)器的區(qū)域的邊界部分,使用分散共享存儲(chǔ)器上的數(shù)據(jù)進(jìn)行計(jì)算。另外,PEO的ncbuf_pe0和PEl的ncbuf_pel通過(guò)相互被寫入而保存有相同的值。因此,在PEO向集中共享存儲(chǔ)器寫入了變量ncbuf_pe0的情況下,變量ncbuf_pel的i = 2、3也被寫入到了集中共享存儲(chǔ)器中,通過(guò)將ncbuf_pe0或者ncbuf_pel的某個(gè)寫入到集中共享存儲(chǔ)器中,另一方數(shù)據(jù)也被寫入到集中共享存儲(chǔ)器中。這樣,在第三實(shí)施方式中,如圖IOA所示,在多個(gè)處理元件對(duì)相同的線上的數(shù)據(jù)進(jìn)行訪問(wèn)的情況下,在雙方處理元件的分散共享存儲(chǔ)器內(nèi)設(shè)置的不可高速緩沖存儲(chǔ)區(qū)域中保存該線上的數(shù)據(jù),通過(guò)復(fù)制雙方不可高速緩沖存儲(chǔ)區(qū)域的數(shù)據(jù),兩個(gè)不可高速緩沖存儲(chǔ)區(qū)域的數(shù)據(jù)一致,不管寫回哪個(gè)數(shù)據(jù),都不會(huì)發(fā)生偽共享。另外,本實(shí)施方式中需要在分散共享存儲(chǔ)器上設(shè)置不可高速緩沖存儲(chǔ)區(qū)域,產(chǎn)生在分散共享存儲(chǔ)器之間復(fù)制數(shù)據(jù)的處理的開銷。圖11是說(shuō)明本發(fā)明第四實(shí)施方式的避免發(fā)生偽共享的方法的變形例的圖。在第四實(shí)施方式中,通過(guò)使用局部變量來(lái)避免偽共享的發(fā)生。
首先,如圖11所示,聲明全局變量a,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭)(1100)。然后,處理元件O(PEO) 100聲明局部變量local_a(1101),在局部變量中處理變量a[i] (0 ≤ i < 18) (1102),向全局變量 a[i] (0 ≤ i < 18)寫入局部變量 local_a[i] (0 ( i
<18) (1103)。與此并行或者在其前后,處理元件I (PEl) 110聲明局部變量lOcal_a(1104),在局部變量中處理變量a[i] (18≤i < 36) (1105),向全局變量a[i] (18≤i < 36)中寫入i =18 至 i = 35 的局部變量 local_a[i] (18 ≤ i < 36) (1106)。在步驟1106中,由于來(lái)自步驟1103的數(shù)據(jù)依賴已被設(shè)定,因此,在向a[i]中寫入步驟1106的local_a[i]之前,從集中共享存儲(chǔ)器160裝載a[i] (i = 16、17)。因此,在步驟1006中,將由PEO更新后的a[16]和a[17]與a[18]和a[19] —起寫回到集中共享存儲(chǔ)器中。這樣,在第四實(shí)施方式中,如圖11所示,多個(gè)處理元件使用局部變量更新數(shù)據(jù),各處理元件將局部變量寫回到全局變量中。因此,第四實(shí)施方式中不會(huì)發(fā)生偽共享。另外,本實(shí)施方式中產(chǎn)生在處理元件之間復(fù)制數(shù)據(jù)的處理的開銷。下面,關(guān)于使用多維數(shù)組的情況進(jìn)行說(shuō)明。圖12A和圖12B是說(shuō)明在使用多維數(shù)組的情況下,在數(shù)組變量的要素之間發(fā)生偽共享的例子的圖。首先,如圖12B所示,聲明6X6的二維數(shù)組的全局變量a,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭)(1200)。在高速緩沖存儲(chǔ)器的I個(gè)線上能夠保存4個(gè)變量。因此,如圖12A所示,在高速緩沖存儲(chǔ)器的第一線1211上存在a
至a
[3],在第二線1212上存在a
[4]至a[l] [I],在第五線1215上存在a[2] [4]、a[2]、a[3]
、a[3] [I]。然后,處理元件(PEO) 100在高速緩沖存儲(chǔ)器102上處理變量a [i][j] (0<i <3、0≤j < 6) (1201),處理元件(PEl) 110在高速緩沖存儲(chǔ)器112上處理變量a [i] [j] (3 ( i
<6、0 ≤ j < 6) (1202),PEO和PEl將處理結(jié)果從高速緩沖存儲(chǔ)器102和112寫回到集中共享存儲(chǔ)器160中。從高速緩沖存儲(chǔ)器102和112向集中共享存儲(chǔ)器160的數(shù)據(jù)的寫回以線單位進(jìn)行。此外,若如上所述能夠由高速緩沖存儲(chǔ)器線的邊界來(lái)分割循環(huán),則不發(fā)生偽共享。但是,由于在第五線1215上存在由PEO處理的a [2] [4]和a [2] [5]、以及由PEl處理的a [3]
和a[3] [I],因此,在該線上,PEO進(jìn)行的訪問(wèn)和PEl進(jìn)行的訪問(wèn)相互競(jìng)爭(zhēng)而發(fā)生偽共享。圖13A和圖13B是說(shuō)明將第一實(shí)施方式適用于二維數(shù)組變量的例子的圖。在第一實(shí)施方式中,為了由高速緩沖存儲(chǔ)器線的邊界來(lái)分割循環(huán),將數(shù)組變量的各要素配置在按外側(cè)循環(huán)的各參數(shù)而不同的線上。首先,如圖13B所示,聲明6X10的二維數(shù)組的全局變量a,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭)(1300)。該數(shù)組的各變量a[i] [j]配置在按外側(cè)循環(huán)的各參數(shù)而不同的線上。在本實(shí)施方式中,在高速緩沖存儲(chǔ)器的I個(gè)線上能夠保存4個(gè)變量,需要的變量是6X6的數(shù)組,因此設(shè)置線尺寸(4個(gè))的額外的變量來(lái)定義了 6X10的數(shù)組變量。
另外,設(shè)置線尺寸-I的額外的變量即可。并且,一般而言,額外的數(shù)組變量的數(shù)量的最低值由下式成為0以上的S的最低值給定。額外的數(shù)組變量的數(shù)量的最低值=S (4)的倍數(shù)-j maxS :線尺寸j max :與數(shù)組變量的外側(cè)循環(huán)相比靠?jī)?nèi)側(cè)一個(gè)的循環(huán)數(shù)量(6)然后,處理元件(PEO) 100在高速緩沖存儲(chǔ)器102上處理變量a[i] [j] (0 < i < 3、0彡j < 6) (1301),處理元件(PEl) 110在高速緩沖存儲(chǔ)器112上處理變量a [i] [j] (3 ( i
<6、0 ^ j < 6) (1302),PEO和PEl將處理結(jié)果從高速緩沖存儲(chǔ)器102和112寫回到集中共享存儲(chǔ)器160中。從高速緩沖存儲(chǔ)器102和112向集中共享存儲(chǔ)器160的數(shù)據(jù)的寫回以線單位進(jìn)行。但是,與使用圖12所述的情況不同,如圖13B所示,所述PEO和PEl不對(duì)高速緩沖存儲(chǔ)器的相同的線進(jìn)行訪問(wèn)。因此,多個(gè)處理元件不向相同的線寫回?cái)?shù)據(jù),不會(huì)發(fā)生偽共享。另外,在本實(shí)施方式中確保了額外的變量,因此高速緩沖存儲(chǔ)器的利用效率下降。因此,本實(shí)施方式在數(shù)組變量的要素的數(shù)量少的情況下有效。圖14A和圖14B是說(shuō)明將第二實(shí)施方式適用于二維數(shù)組變量的例子的圖。在第二實(shí)施方式中,通過(guò)高速緩沖存儲(chǔ)器的線的劃分來(lái)對(duì)由各處理元件處理的數(shù)據(jù)進(jìn)行區(qū)分,以使由多個(gè)處理元件處理后的數(shù)據(jù)不保存在高速緩沖存儲(chǔ)器的I個(gè)線上。首先,如圖14B所示,聲明6X6的二維數(shù)組的全局變量a,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭)(1400)。然后,處理元件(PEO) 100在高速緩沖存儲(chǔ)器102上處理變量a [i] [j] (OS i < 4、0彡j < 6) (1401),處理元件(PEl) 110在高速緩沖存儲(chǔ)器112上處理變量a [i] [j] (4 ( i
<6、0 ^ j < 6) (1402)。然后,PEO將處理結(jié)果從高速緩沖存儲(chǔ)器102寫回到集中共享存儲(chǔ)器160中,PEl將處理結(jié)果從高速緩沖存儲(chǔ)器112寫回到集中共享存儲(chǔ)器160中。在本實(shí)施方式中,如圖14A所示,I個(gè)線具有能夠保存4個(gè)變量的容量,但所述a[3] [6]和a[4]
存在于不同的線上。因此,多個(gè)處理元件不向相同的線寫回?cái)?shù)據(jù),不會(huì)發(fā)生偽共享。另外,在本實(shí)施方式中,對(duì)PEO分配24個(gè)數(shù)組變量的處理、對(duì)PEl分配12個(gè)數(shù)組變量的處理,但如果分為成為高速緩沖存儲(chǔ)器線尺寸的倍數(shù),則也可以對(duì)PEO分配12個(gè)數(shù)組變量的處理,對(duì)PEl分配24個(gè)數(shù)組變量的處理。此外,也可以按照各處理元件的處理能力比來(lái)分配適當(dāng)數(shù)量的數(shù)組變量的處理。另外,在本實(shí)施方式中,只要對(duì)象維數(shù)以下的數(shù)組變量的要素的尺寸成為線尺寸的倍數(shù)則能夠進(jìn)行循環(huán)分割。該情況下,根據(jù)數(shù)組變量的要素的數(shù)量和處理元件的數(shù)量分配的數(shù)組變量的數(shù)量不相等,有時(shí)產(chǎn)生處理元件的處理負(fù)荷的不均衡。因此,本實(shí)施方式在數(shù)組尺寸足夠大、并且與數(shù)組尺寸相比不均衡小到可以忽略的程度的情況下有效。圖15A和圖15B是說(shuō)明將第三實(shí) 施方式適用于二維數(shù)組變量的例子的圖。在第三實(shí)施方式中,使用不可高速緩沖存儲(chǔ)區(qū)域來(lái)避免偽共享的發(fā)生。首先,如圖15B所示,聲明6X6的二維數(shù)組的全局變量a,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭)。此外,聲明1X6的一維數(shù)組變量nc_buf2,并設(shè)置變量nc_buf2為6個(gè)(內(nèi)側(cè)循環(huán)的數(shù)量)變量的尺寸的不可高速緩沖存儲(chǔ)區(qū)域(1500)。然后,處理元件(PEO) 100在高速緩沖存儲(chǔ)器上處理變量a[i] [j] (0^i<3,0^ j<6) (1501),處理元件(卩£1)110使用11(3_131^2
[j] (0彡j<6)在不可高速緩沖存儲(chǔ)區(qū)域上處理變量a [3] [j] (0彡j < 6) (1502),PEl在高速緩沖存儲(chǔ)器上處理變量a [i] [j] (4 ( i
<6、0 彡 j < 6) (1503)。PEO在其之后或者與處理1503并行地從不可高速緩沖存儲(chǔ)區(qū)域中讀出由PEl處理后的變量nc_buf2
[j] (0彡j < 6),并寫入至IJ PEO的高速緩沖存儲(chǔ)器的變量a[3] [j](0彡j < 6)中(1504)。由此,由PEl使用nc_buf2
[j] (0彡j < 6)處理后的變量a[3][j] (0彡j < 6)轉(zhuǎn)送到PEO中。然后,PEO將變量a[i] [j] (0彡i < 4、0彡j < 6)寫回到集中共享存儲(chǔ)器160中, PEl將變量a[i] [j] (4彡i < 6、0彡j < 6)寫回到集中共享存儲(chǔ)器160中。這樣,在第三實(shí)施方式中,如圖15A所示,PEl將使用非高速緩沖存儲(chǔ)緩沖器運(yùn)算出的結(jié)果反映到PEO的高速緩沖存儲(chǔ)器的變量。即,在多個(gè)處理元件對(duì)相同的線上的數(shù)據(jù)進(jìn)行訪問(wèn)的情況下,一方處理元件(PEl)在不可高速緩沖存儲(chǔ)區(qū)域中保存該線上的數(shù)據(jù),另一方處理元件(PEO)將不可高速緩沖存儲(chǔ)區(qū)域的數(shù)據(jù)保存在集中共享存儲(chǔ)器的高速緩沖存儲(chǔ)區(qū)域中,因此,多個(gè)處理元件不向相同的線寫回?cái)?shù)據(jù),不會(huì)發(fā)生偽共享。另外,在本實(shí)施方式中,需要在存儲(chǔ)器上設(shè)置不可高速緩沖存儲(chǔ)區(qū)域,但不可高速緩沖存儲(chǔ)區(qū)域也可以設(shè)置在集中共享存儲(chǔ)器、分散共享存儲(chǔ)器等任何存儲(chǔ)器上。此外,本實(shí)施方式中產(chǎn)生從不可高速緩沖存儲(chǔ)區(qū)域向高速緩沖存儲(chǔ)器復(fù)制數(shù)據(jù)的處理的開銷。但是,通過(guò)利用分散共享存儲(chǔ)器作為不可高速緩沖存儲(chǔ)的緩沖器,能夠以低開銷實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)送。圖16是說(shuō)明將第四實(shí)施方式適用于二維數(shù)組變量的例子的圖。首先,如圖16所示,聲明6X6的二維數(shù)組的全局變量a,變量a配置在集中共享存儲(chǔ)器的線的開頭(高速緩沖存儲(chǔ)器的線的開頭)(1600)。然后,處理元件O(PEO) 100聲明6X6的二維數(shù)組的局部變量local_a(1601),使用局部變量local_a[i] [j]來(lái)處理變量a[i] [j] (0彡i < 3、0彡j < 6) (1602),向全局變量 a[i] [j] (0 彡 i < 3、0 彡 j < 6)寫入局部變量 local_a[i] [j] (0 彡 i < 3、0 彡 j < 6)(1603)。與此并行或者在其前后,處理元件I(PEl)IlO聲明6X6的二維數(shù)組的局部變量local_a (1604),使用局部變量 local_a[i] [j]來(lái)處理變量 a[i] [j] (3 彡 i < 6、0 彡 j < 6)(1605),向全局變量 a[i] [j] (3 彡 i < 6、0 彡 j < 6)寫入局部變量 local_a[i] [j] (3 ( i
<6、0 彡 j < 6) (1606)。在步驟1606中,由于來(lái)自步驟1103的數(shù)據(jù)依賴已被設(shè)定,因此,在向a[i] [j]中寫入步驟1606的local_a[i] [j]之前,從集中共享存儲(chǔ)器160裝載a[2] [4]和a[2] [5]。因此,在步驟1006中,將由PEO更新后的a[2] [4]及a[2] [5]與a[3]
及a[3] [I] —起寫回到集中共享存儲(chǔ)器中。這樣,在第四實(shí)施方式中,如圖16所示,多個(gè)處理元件使用局部變量更新數(shù)據(jù),各處理元件將局部變量寫回到全局變量中。因此,第四實(shí)施方式中不會(huì)發(fā)生偽共享。
另外,本實(shí)施方式中產(chǎn)生在處理元件之間復(fù)制數(shù)據(jù)的處理的開銷。以上說(shuō)明的實(shí)施方式和變形例可以在程序的編譯時(shí)組合I個(gè)或者多個(gè)來(lái)使用。下面,關(guān)于為了避免偽共享而選擇最優(yōu)方法的步驟進(jìn)行說(shuō)明。圖17A是表示本發(fā)明實(shí)施方式的循環(huán)分割前的處理的宏任務(wù)圖表。步驟1710的任務(wù)是將變量i作為控制變量的循環(huán),通過(guò)對(duì)不同的處理元件分別調(diào)度通過(guò)循環(huán)分割而生成的部分任務(wù)來(lái)進(jìn)行并行處理。在以最大分割數(shù)對(duì)該任務(wù)進(jìn)行循環(huán)分割的情況下、即以使i循環(huán)的I個(gè)迭代量的處理成為一個(gè)部分任務(wù)的方式進(jìn)行了循環(huán)分割的情況下所生成的各部分任務(wù)中,針對(duì)二維數(shù)組變量A,通過(guò)數(shù)據(jù)訪問(wèn)范圍解析來(lái)解析出有可能變更第I維的0至99的要素、第2維的i至i的要素。同樣,在步驟1720的任務(wù)中,針對(duì)二維數(shù)組變量B,解析出有可能使用第I維的0至99的要素、第2維的i至i的要素,在 步驟1730的任務(wù)中,針對(duì)二維數(shù)組變量B,解析出有可能使用第I維的0至99的要素、第2維的i至i的要素,在步驟1740的任務(wù)中,針對(duì)二維數(shù)組變量B,解析出有可能變更第I維的0至99的要素、第2維的i至i的要素,在步驟1750的任務(wù)中,針對(duì)二維數(shù)組變量B,解析出有可能變更第I維的0至99的要素、第2維的i至i的要素。在此,考慮以最大分割數(shù)分割各任務(wù)時(shí)的訪問(wèn)范圍,是為了在以任意分割模式進(jìn)行了任務(wù)分割的情況下,對(duì)是否存在發(fā)生偽共享的可能性進(jìn)行分析。根據(jù)各任務(wù)的各部分任務(wù)中的數(shù)據(jù)的訪問(wèn)范圍,對(duì)有可能發(fā)生偽共享的位置和成為其主要因素的數(shù)組變量及其數(shù)組維數(shù)進(jìn)行解析。具體而言,在上述部分任務(wù)的數(shù)據(jù)訪問(wèn)范圍中,在包含分割源的任務(wù)中的循環(huán)控制變量的維數(shù)之中最下位的維數(shù)中,將該下位維數(shù)的部分?jǐn)?shù)組尺寸除以高速緩沖存儲(chǔ)器的線尺寸時(shí)發(fā)生余量的情況下,能夠判斷為有可能發(fā)生偽共享。該情況下,有可能在進(jìn)行該數(shù)組的更新的任務(wù)的分割后各部分任務(wù)之間、或者進(jìn)行該數(shù)組的更新的任務(wù)的分割后各部分任務(wù)與使用該數(shù)組的任務(wù)的分割后的各部分任 務(wù)之間發(fā)生偽共享。另外,由于向存儲(chǔ)器保存變量的方法根據(jù)程序語(yǔ)言而不同,因此,將哪個(gè)下標(biāo)作為第I維,根據(jù)向存儲(chǔ)器保存變量的方法而不同。即,在按保存在存儲(chǔ)器的連續(xù)區(qū)域中的數(shù)組變量的要素而變化的下標(biāo)與構(gòu)成最內(nèi)環(huán)循環(huán)的下標(biāo)不同的情況下,編譯器根據(jù)需要也可以進(jìn)行改變計(jì)算順序的相互交換。此外,在數(shù)組變量未排列在集中共享存儲(chǔ)器160的線的開頭的情況下,不論上述條件如何,都解析為有可能發(fā)生偽共享。圖17B是表示本發(fā)明實(shí)施方式的循環(huán)分割后的處理的宏任務(wù)圖表。本例中假設(shè)各任務(wù)的分割數(shù)為3,但該分割數(shù)可以任意設(shè)定。圖17B中,實(shí)線(I條線)表示程序上的數(shù)據(jù)依賴,雙線表示有可能發(fā)生偽共享的地方。另外,圖17C表不檢測(cè)偽共孚的代碼的例子。圖18是說(shuō)明本發(fā)明實(shí)施方式的并行化編譯器生成軟件一致性控制代碼的處理的概要的圖。首先,應(yīng)編譯的程序2001輸入到并行化編譯器2002中。輸入的程序2001是用C語(yǔ)言、Fortran語(yǔ)言等描述的逐級(jí)程序。并行化編譯器2002將輸入的順序程序(sequential program)并行化,生成并行API程序2003,該并行API程序2003被插入了用于在非一致性(non-coherent)高速緩沖存儲(chǔ)器中執(zhí)行的控制代碼。生成的并行API程序2003是包含用于使用不具有一致性功能的高速緩沖存儲(chǔ)器來(lái)執(zhí)行程序的指示(API)的并行程序形式。所生成的并行API程序2003輸入到代碼生成編譯器2004中。代碼生成編譯器2004 一邊對(duì)用于使用不具有一致性功能的高速緩沖存儲(chǔ)器來(lái)執(zhí)行程序的指示(API)進(jìn)行解釋,一邊將程序變換為機(jī)械語(yǔ)言命令(執(zhí)行形式程序)2005。該執(zhí)行形式程序2005中也包含用于在非一致性高速緩沖存儲(chǔ)器中執(zhí)行程序的命令。圖19是本發(fā)明實(shí)施方式的編譯器執(zhí)行的處理的流程圖。首先,編譯器解析要編譯的程序的字句,解析程序的句法(2101)。基于句法的解析結(jié)果,生成基于層次式任務(wù)、即程序的層次式宏任務(wù)的表現(xiàn)(2102)。 然后,對(duì)生成的任務(wù)之間的依賴關(guān)系(控制流)進(jìn)行解析(2103),并解析任務(wù)之間的數(shù)據(jù)依賴(2104),解析由各任務(wù)訪問(wèn)的數(shù)據(jù)的范圍(2105)。然后,使用程序的解析結(jié)果,對(duì)程序能夠最早執(zhí)行的條件進(jìn)行解析(2106),使用最早執(zhí)行條件的解析結(jié)果,決定并行處理區(qū)間、被分配任務(wù)的處理器數(shù)量,并生成宏任務(wù)圖表。然后,根據(jù)宏任務(wù)圖表中的數(shù)據(jù)依賴關(guān)系,通過(guò)使用圖17A、圖17B和圖17C說(shuō)明的方法檢測(cè)偽共享,生成包含檢測(cè)出偽共享的地方和檢測(cè)出偽共享的變量在內(nèi)的偽共享信息(2107)。然后,基于生成的偽共享信息,按檢測(cè)出偽共享的每個(gè)地方?jīng)Q定避免偽共享的方法,按照所決定的方法插入命令,生成避免了偽共享的并行程序(2108)。關(guān)于該偽共享避免處理,使用圖20A和圖20B進(jìn)行詳細(xì)敘述。然后,執(zhí)行決定各任務(wù)執(zhí)行順序的任務(wù)調(diào)度(2109),插入用于應(yīng)對(duì)過(guò)期數(shù)據(jù)的高速緩沖存儲(chǔ)操作指示(2110)。由此,生成帶有一致性控制功能的并行程序。關(guān)于該高速緩沖存儲(chǔ)操作指示的插入處理,使用圖21進(jìn)行詳細(xì)敘述。圖20A和圖20B是本發(fā)明實(shí)施方式的偽共享避免處理的流程圖,從編譯處理(圖19)的步驟2108開始調(diào)用。圖20A和圖20B所示的偽共享避免處理中,將在步驟2107中檢測(cè)出的偽共享信息作為輸入,關(guān)于對(duì)相同的數(shù)組發(fā)生的各偽共享進(jìn)行以下處理。該偽共享避免處理大致分為數(shù)據(jù)布局(data layout)變換和重構(gòu),圖20A表示數(shù)據(jù)布局變換處理,圖20B表不重構(gòu)處理。首先,判定成為處理對(duì)象的數(shù)組變量是否能夠變換(2121)。例如,該數(shù)組變量在編譯的程序中已關(guān)閉的情況下,具體而言,在所編譯的程序中已聲明,并且不成為在該程序以外定義的函數(shù)的自變量的情況下,由于數(shù)據(jù)布局的變換,程序有可能進(jìn)行預(yù)期不到的動(dòng)作,因此,判定為數(shù)組變量能夠變換。其結(jié)果,在判定為數(shù)組不能夠變換的情況下,數(shù)組的擴(kuò)展或者裝填等的數(shù)據(jù)布局的變換困難,因此前進(jìn)到步驟2131 (圖20B)進(jìn)行重構(gòu)。另一方面,在判定為數(shù)組能夠變換的情況下,判定在數(shù)組的最快變化維數(shù)的要素之間是否發(fā)生偽共享(2122)。具體而言,在N維數(shù)組中,將最快變化維數(shù)定義為第I維,將最慢變化維數(shù)定義為第N維。所述最快變化維數(shù)是下標(biāo)連續(xù)變化的數(shù)組的維數(shù)。例如,在通過(guò)循環(huán)來(lái)處理N維數(shù)組的情況下,循環(huán)的最內(nèi)環(huán)成為最快變化維數(shù),循環(huán)的最外環(huán)成為最慢變化維數(shù)。即,將最快變化維數(shù)的數(shù)據(jù)配置在存儲(chǔ)器上的連續(xù)的區(qū)域中。其結(jié)果,在判定為在最快變化維數(shù)的要素之間發(fā)生偽共享的情況下,判定是否能夠擴(kuò)展數(shù)組(2123)。在步驟2123中判定是否即使擴(kuò)展數(shù)組,由高速緩沖存儲(chǔ)器利用效率下降引起的性能下降也還是小。例如,在數(shù)組尺寸足夠小的情況下,即使如圖6A所示地?cái)U(kuò)展數(shù)組,由高速緩沖存儲(chǔ)器利用效率下降引起的性能下降也還是小,因此,判定為能夠擴(kuò)展數(shù)組。具體而言,在滿足下式(I)的情況下,由于數(shù)組尺寸足夠小,因此能夠判定為能夠擴(kuò)展數(shù)組。Sal ( SXN......(I)Sal :對(duì)象數(shù)組的第I維的聲明尺寸 S :高速緩沖存儲(chǔ)器線尺寸N :所使用的處理器數(shù)量其結(jié)果,在判定為能夠擴(kuò)展數(shù)組的情況下,通過(guò)在程序中插入圖6B所示的代碼,如圖6A所示地?cái)U(kuò)展數(shù)組。另一方面,在判定為數(shù)組的擴(kuò)展困難的情況下,前進(jìn)到步驟2131(圖20B)進(jìn)行重構(gòu)。另一方面,在步驟2122中判定為在最快變化維數(shù)以外的維數(shù)的要素之間發(fā)生偽共享的情況下,判定是否能夠裝填數(shù)組(2125)。在步驟2125中判定是否即使裝填數(shù)組,由高速緩沖存儲(chǔ)器利用效率下降引起的性能下降也還是小。例如,在數(shù)組尺寸足夠大的情況下,即使如圖13A所示地裝填數(shù)組,由高速緩沖存儲(chǔ)器利用效率下降引起的性能下降也還是小,因此判定為能夠裝填數(shù)組。具體而言,在滿足下式(2)的情況下,由于數(shù)組尺寸足夠小,因此,能夠判定為能夠裝填數(shù)組。Sa2 彡 SXN......(2)Sa2 :在對(duì)象數(shù)組變量中發(fā)生偽共享的維數(shù)以下的部分?jǐn)?shù)組尺寸S 高速緩沖存儲(chǔ)器線尺寸N :所使用的處理器數(shù)量其結(jié)果,在判定為能夠擴(kuò)展數(shù)組的情況下,通過(guò)在程序中插入圖13B所示的代碼,如圖13A所示地?cái)U(kuò)展數(shù)組。另一方面,在判定為數(shù)組的擴(kuò)展困難的情況下,前進(jìn)到步驟2131(圖20B)進(jìn)行重構(gòu)。在圖20B所示的重構(gòu)處理中,對(duì)于檢測(cè)出的偽共享信息中的、未能用數(shù)據(jù)布局變換來(lái)應(yīng)對(duì)的偽共享進(jìn)行以下處理。首先,判定是否僅在各處理器的處理的邊界區(qū)域發(fā)生偽共享(2131)。具體而言,判定對(duì)處理對(duì)象數(shù)組的訪問(wèn)是否為連續(xù)訪問(wèn)。例如,在并行化后各處理器所訪問(wèn)的區(qū)域重復(fù)的情況下(PE0對(duì)i、i+2、i+4……進(jìn)行訪問(wèn),PEl對(duì)i+1、i+3、i+5……進(jìn)行訪問(wèn)的情況),對(duì)處理對(duì)象數(shù)組的訪問(wèn)不是連續(xù)訪問(wèn),因此,在邊界區(qū)域以外也發(fā)生偽共享。其結(jié)果,在判定為邊界區(qū)域以外也發(fā)生偽共享的情況下,向步驟2139前進(jìn)。另一方面,在判定為僅在邊界區(qū)域發(fā)生偽共享的情況下,判定被判定為發(fā)生偽共享的地方是否是基于循環(huán)的并行處理(2132)。其結(jié)果,在判定為在基于循環(huán)的并行處理以外發(fā)生偽共享的情況下,向步驟2139、產(chǎn).、rr.
目U進(jìn)。另一方面,在判定為在基于循環(huán)的并行處理中發(fā)生偽共享的情況下,判定是否能夠在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)(2133)。其結(jié)果,在判定為不能在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)的情況下,通過(guò)在程序中插入圖8B所示的代碼,來(lái)如圖8A所示地使用緩沖器在處理元件之間進(jìn)行通信(2138)。另一方面,在判定為能夠在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)的情況下,判定由循環(huán)分割引起的負(fù)荷不均衡所導(dǎo)致的性能下降是否小(2134)。例如,在循環(huán)回轉(zhuǎn)數(shù)足夠大的情況下,能夠判定為由循環(huán)分割引起的負(fù)荷不均衡所導(dǎo)致的影響小。具體而言,在滿足下式(3)的情況下,由于循環(huán)回轉(zhuǎn)數(shù)足夠大,因此能夠判定為負(fù)荷的不均衡所導(dǎo)致的影響小。 R ^ SXN......(3)R :循環(huán)回轉(zhuǎn)數(shù)S 高速緩沖存儲(chǔ)器線尺寸N :所使用的處理器數(shù)量此外,也可以是,在對(duì)各處理器均等地分割了任務(wù)的情況下,將分割后的任務(wù)所使用的數(shù)據(jù)量(訪問(wèn)范圍)的最大值與最小值之差,與線尺寸進(jìn)行比較,在該差小于線尺寸的情況下,判定為負(fù)荷不均衡所導(dǎo)致的影響小。其結(jié)果,在判定為由循環(huán)分割引起的負(fù)荷不均衡所導(dǎo)致的影響大的情況下,通過(guò)在程序中插入圖8B所示的代碼,來(lái)如圖8A所示地使用緩沖器在處理元件之間進(jìn)行通信(2138)。另外,也可以使用圖10A、圖IOB所示的方法,在多維數(shù)組的情況下使用圖15A、圖15B所示的方法。另一方面,在判定為由循環(huán)分割引起的負(fù)荷不均衡所導(dǎo)致的影響小的情況下,判定是否能夠僅在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)(2135)。例如,在相同的循環(huán)內(nèi)對(duì)數(shù)組變量的要素a[i]和a[i+l]進(jìn)行訪問(wèn)的情況下,不能夠僅在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)。其結(jié)果,在判定為能夠僅在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)的情況下,通過(guò)在程序中插入圖7B所示的代碼,來(lái)如圖7A所示地僅在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)(2136)。另外,在多維數(shù)組的情況下,使用圖15A、圖15B所示的方法。另一方面,在相同的循環(huán)內(nèi)對(duì)數(shù)組變量a[i]和a[i+l]進(jìn)行訪問(wèn)時(shí)不能夠僅在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)的情況下,在能夠在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)的地方(例如,分割a[i]的地方),在程序中插入圖7B所示的代碼。另外,在不能在高速緩沖存儲(chǔ)器線的邊界分割循環(huán)的地方(例如,分割a[i+l]的地方),通過(guò)在程序中插入圖SB所示的代碼,來(lái)如圖8A所示地使用緩沖器在處理元件之間進(jìn)行通信(2137)。例如,對(duì)于a[i],在高速緩沖存儲(chǔ)器線的邊界分割循環(huán),對(duì)于a[i+l],使用緩沖器在處理元件之間進(jìn)行通信即可。該情況下,可以對(duì)a[i]的訪問(wèn)次數(shù)和a[i+l]的訪問(wèn)次數(shù)進(jìn)行比較,對(duì)于訪問(wèn)次數(shù)多的數(shù)組變量的要素的下標(biāo),在高速緩沖存儲(chǔ)器線的邊界分割循環(huán),減少緩沖器中保存的數(shù)據(jù)的通信的開銷。另一方面,在步驟2139中,判定各處理元件中的從用于運(yùn)算的私有變量向全局變量的復(fù)制處理的開銷是否小。具體而言,在循環(huán)中執(zhí)行的計(jì)算的處理量足夠大的情況下,復(fù)制處理的開銷小到可以忽略的程度。例如,在只是將其他變量的數(shù)據(jù)代入(復(fù)制)到a時(shí),在循環(huán)中執(zhí)行的計(jì)算的處理量小,但是在循環(huán)中將四則運(yùn)算或函數(shù)的計(jì)算結(jié)果代入到a中時(shí),在循環(huán)中執(zhí)行的計(jì)算的處理量變大。其結(jié)果,在判定為變量的復(fù)制處理的開銷小的情況下,通過(guò)在程序中插入圖11所示的代碼(多維數(shù)組的情況下,圖16所示的代碼),在各處理元件中使用已定義的私有變量進(jìn)行運(yùn)算,將運(yùn)算結(jié)果從私有變量復(fù)制到全局變量(2140)。另一方面,在判定為變量的復(fù)制處理的開銷大的情況下,將各處理元件運(yùn)算出的結(jié)果依次寫入到集中共享存儲(chǔ)器160中(2141)。圖21是本發(fā)明實(shí)施方式的高速緩沖存儲(chǔ)操作指示的插入處理的流程圖。首先,在并行化階段中的任務(wù)圖表的調(diào)度結(jié)果中,對(duì)分配給不同處理器的任務(wù)之間的數(shù)據(jù)依賴進(jìn)行解析(2151)。 判定解析出的數(shù)據(jù)依賴關(guān)系是否是流依賴或者輸出依賴(2152)。其結(jié)果,在解析出的數(shù)據(jù)依賴關(guān)系是流依賴或者輸出依賴的情況下,插入高速緩沖存儲(chǔ)操作指示。具體而言,如使用圖3B所述,生成下述高速緩沖存儲(chǔ)操作指示產(chǎn)生數(shù)據(jù)的一側(cè)的處理元件在更新數(shù)據(jù)后,根據(jù)回寫命令,向主存儲(chǔ)(集中共享存儲(chǔ)器160)寫回更新后的數(shù)據(jù)的高速緩沖存儲(chǔ)操作指示;和消耗數(shù)據(jù)的一側(cè)的處理元件在消耗數(shù)據(jù)之前,根據(jù)自無(wú)效命令,從主存儲(chǔ)讀入數(shù)據(jù)的高速緩沖存儲(chǔ)操作指示,并且,將所生成的高速緩沖存儲(chǔ)操作指示插入到程序中。這時(shí)被控制成,產(chǎn)生側(cè)的處理元件的數(shù)據(jù)的更新的結(jié)束通過(guò)標(biāo)志通知到消耗側(cè)的處理元件,消耗側(cè)的處理元件根據(jù)標(biāo)志的更新而知道數(shù)據(jù)的更新,從主存儲(chǔ)讀入更新后的數(shù)據(jù)。編譯器生成基于該標(biāo)志的控制命令,并將生成的控制命令插入到程序中。另一方面,在解析出的數(shù)據(jù)的依賴關(guān)系既不是流依賴也不是輸出依賴的情況下,結(jié)束高速緩沖存儲(chǔ)操作指示的插入處理。如以上說(shuō)明,根據(jù)本發(fā)明的實(shí)施方式,通過(guò)基于軟件的控制,不需要用于一致性控制的硬件,能夠簡(jiǎn)化硬件。因此,能夠?qū)崿F(xiàn)低成本且低功率消耗的多處理器。此外,通過(guò)編譯器的最優(yōu)化,能夠?qū)崿F(xiàn)可伸縮的性能提高。作為除權(quán)利要求的范圍中記載以外的本發(fā)明的代表性觀點(diǎn),列舉下述方案。(I) 一種多處理器系統(tǒng),具備多個(gè)處理元件以及能夠從所述各處理元件進(jìn)行訪問(wèn)的主存儲(chǔ)裝置,其特征在于,所述各處理元件具備進(jìn)行運(yùn)算處理的處理器以及暫時(shí)保存所述處理器所使用的數(shù)據(jù)的高速緩沖存儲(chǔ)器;所述處理元件將從所述主存儲(chǔ)裝置讀入的數(shù)據(jù)暫時(shí)保存在所述高速緩沖存儲(chǔ)器中;按照所述高速緩沖存儲(chǔ)器的管理單位,將結(jié)束使用的數(shù)據(jù)從所述高速緩沖存儲(chǔ)器寫回到所述主存儲(chǔ)裝置;在分割所述程序而生成的各任務(wù)所使用的數(shù)據(jù)的邊界與存儲(chǔ)器的管理單位不匹配的情況下,設(shè)置不可高速緩沖存儲(chǔ)區(qū)域,將保存在包含該邊界的管理單位中的運(yùn)算結(jié)果保存在所述不可高速緩沖存儲(chǔ)區(qū)域中,所述不可高速緩沖存儲(chǔ)區(qū)域是應(yīng)該保存在包含該邊界的管理單位中的數(shù)據(jù)不暫時(shí)保存在所述高速緩沖存儲(chǔ)器中的區(qū)域。(2)如(I)中記載的多處理器系統(tǒng),其特征在于,所述處理元件至少包含第一處理元件和第二處理元件;
所述第一處理元件在所述高速緩沖存儲(chǔ)器中,對(duì)在包含所述任務(wù)所使用的數(shù)據(jù)的邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算;所述第二處理元件在所述不可高速緩沖存儲(chǔ)區(qū)域中,對(duì)在包含所述任務(wù)所使用的數(shù)據(jù)的邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算;將在所述不可高速緩沖存儲(chǔ)區(qū)域中運(yùn)算出的結(jié)果,轉(zhuǎn)送給所述第一處理元件的高速緩沖存儲(chǔ)器中。(3)如(I)中記載的多處理器系統(tǒng),其特征在于,所述處理元件包含第一處理元件和第二處理元件;所述不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在各個(gè)所述處理元件上;
各個(gè)所述處理元件在自身處理元件的不可高速緩沖存儲(chǔ)區(qū)域中,對(duì)在包含所述任務(wù)所使用的數(shù)據(jù)的邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算;所述第一處理元件將在所述不可高速緩沖存儲(chǔ)區(qū)域中運(yùn)算出的結(jié)果寫入到所述第二處理元件的共享存儲(chǔ)器中。(4)如(I)至(3)的任一項(xiàng)中記載的多處理器系統(tǒng),其特征在于,在由不同的所述處理元件執(zhí)行的任務(wù)之存在數(shù)據(jù)依賴的情況下,產(chǎn)生所述數(shù)據(jù)的處理元件將存在所述依賴關(guān)系的數(shù)據(jù)寫回到所述主存儲(chǔ)裝置中;消耗所述數(shù)據(jù)的處理元件將存在所述依賴關(guān)系的數(shù)據(jù)無(wú)效化。(5) 一種程序,在多處理器系統(tǒng)所具備的處理器中執(zhí)行運(yùn)算處理,其特征在于,所述多處理器系統(tǒng)具備多個(gè)處理元件以及能夠從所述各處理元件進(jìn)行訪問(wèn)的主存儲(chǔ)裝置;所述各處理元件具備進(jìn)行運(yùn)算處理的處理器和暫時(shí)保存所述處理器所使用的數(shù)據(jù)的高速緩沖存儲(chǔ)器;所述處理元件從所述主存儲(chǔ)裝置讀入的數(shù)據(jù)暫時(shí)保存在所述高速緩沖存儲(chǔ)器中;所述處理元件結(jié)束使用的數(shù)據(jù)從所述高速緩沖存儲(chǔ)器寫回到所述主存儲(chǔ)裝置中;
在所述主存儲(chǔ)裝置與所述高速緩沖存儲(chǔ)器之間,按照所述高速緩沖存儲(chǔ)器的管理單位轉(zhuǎn)送數(shù)據(jù);所述程序在各任務(wù)所使用數(shù)據(jù)的邊界與存儲(chǔ)器的管理單位不匹配的情況下,設(shè)置不可高速緩沖存儲(chǔ)區(qū)域,將在包含該邊界的管理單位中保存的運(yùn)算結(jié)果保存在所述不可高速緩沖存儲(chǔ)區(qū)域中,所述不可高速緩沖存儲(chǔ)區(qū)域是應(yīng)該保存在包含該邊界的管理單位中的數(shù)據(jù)不暫時(shí)保存在所述高速緩沖存儲(chǔ)器中的區(qū)域。(6)如(5)中記載的程序,其特征在于,所述處理元件包含第一處理元件和第二處理元件;使用所述不可高速緩沖存儲(chǔ)區(qū)域進(jìn)行運(yùn)算的步驟包括如下步驟所述第一處理元件在所述高速緩沖存儲(chǔ)器中,對(duì)在包含所述任務(wù)所使用數(shù)據(jù)的邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算;所述第二處理元件將在包含所述任務(wù)所使用數(shù)據(jù)的邊界的管理單位中保存的運(yùn)算結(jié)果保存在所述不可高速緩沖存儲(chǔ)區(qū)域中;以及所述第二處理元件將在所述不可高速緩沖存儲(chǔ)區(qū)域中保存的運(yùn)算結(jié)果轉(zhuǎn)送到所述第一處理元件的高速緩沖存儲(chǔ)器中。(7)如(5)中記載的程序,其特征在于,所述處理元件包含第一處理元件和第二處理元件;所述不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在各個(gè)所述處理元件上;使用所述不可高速緩沖存儲(chǔ)區(qū)域進(jìn)行運(yùn)算的步驟包括如下步驟所述各處理元件在自身處理元件的不可高速緩沖存儲(chǔ)區(qū)域中,對(duì)在包含所述任務(wù)所使用數(shù)據(jù)的邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算;以及 所述第一處理元件將在所述不可高速緩沖存儲(chǔ)區(qū)域中運(yùn)算出的結(jié)果寫入到所述第二處理元件的共享存儲(chǔ)器中。(8)如(5)至(7)的任一項(xiàng)中記載的程序,其特征在于,包括在由不同的所述處理元件執(zhí)行的任務(wù)之間存在數(shù)據(jù)依賴的情況下,產(chǎn)生所述數(shù)據(jù)的處理元件將存在所述依賴關(guān)系的數(shù)據(jù)寫回到所述主存儲(chǔ)裝置中;以及消耗所述數(shù)據(jù)的處理元件將存在所述依賴關(guān)系的數(shù)據(jù)無(wú)效化。以上參照附圖詳細(xì)地說(shuō)明了本發(fā)明,但本發(fā)明不限定于這樣的具體結(jié)構(gòu),還包含所附的權(quán)利要求范圍的主旨內(nèi)的各種變更和同等的結(jié)構(gòu)。
權(quán)利要求
1.一種代碼生成方法,由編譯器生成能夠由多處理器系統(tǒng)所具備的處理器執(zhí)行的代碼,其特征在于, 所述多處理器系統(tǒng)具備多個(gè)處理元件以及能夠從各個(gè)所述處理元件進(jìn)行訪問(wèn)的主存儲(chǔ)裝置; 各個(gè)所述處理元件具備進(jìn)行運(yùn)算處理的處理器以及暫時(shí)保存所述處理器所使用的數(shù)據(jù)的高速緩沖存儲(chǔ)器; 所述處理元件從所述主存儲(chǔ)裝置讀入的數(shù)據(jù)暫時(shí)保存在所述高速緩沖存儲(chǔ)器中; 由所述處理元件結(jié)束使用的數(shù)據(jù)從所述高速緩沖存儲(chǔ)器寫回到所述主存儲(chǔ)裝置中;在所述主存儲(chǔ)裝置與所述高速緩沖存儲(chǔ)器之間,按照所述高速緩沖存儲(chǔ)器的管理單位轉(zhuǎn)送數(shù)據(jù); 所述方法中, 對(duì)由所述處理器執(zhí)行的程序進(jìn)行解析; 對(duì)所述程序所包含的各任務(wù)的執(zhí)行所需的數(shù)據(jù)進(jìn)行解析; 基于所述解析的結(jié)果,在分割了所述各任務(wù)的情況下,判定所述分割后的任務(wù)所使用的數(shù)據(jù)的邊界是否與存儲(chǔ)器的管理單位匹配; 在判定為所述任務(wù)所使用的數(shù)據(jù)的邊界與存儲(chǔ)器的管理單位不匹配的情況下,生成如下代碼 設(shè)置不可高速緩沖存儲(chǔ)區(qū)域的代碼,所述不可高速緩沖存儲(chǔ)區(qū)域是應(yīng)該保存在包含該邊界的管理單位中的數(shù)據(jù)不暫時(shí)保存在所述高速緩沖存儲(chǔ)器中的區(qū)域;以及 將包含該邊界的管理單位中保存的運(yùn)算結(jié)果保存在所述不可高速緩沖存儲(chǔ)區(qū)域中的代碼。
2.根據(jù)權(quán)利要求I所述的代碼生成方法,其特征在于, 所述處理元件包括第一處理元件和第二處理元件; 在基于所述程序的解析結(jié)果判定為由所述第一處理元件執(zhí)行的任務(wù)和由所述第二處理元件執(zhí)行的任務(wù)間的邊界與存儲(chǔ)器的管理單位不匹配的情況下,生成如下代碼 所述第一處理元件在所述高速緩沖存儲(chǔ)器中對(duì)包含所述任務(wù)所使用的數(shù)據(jù)的邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算的代碼; 所述第二處理元件將包含所述任務(wù)所使用的數(shù)據(jù)的邊界的管理單位中保存的運(yùn)算結(jié)果保存在所述不可高速緩沖存儲(chǔ)區(qū)域中的代碼;以及 將所述不可高速緩沖存儲(chǔ)區(qū)域中保存的運(yùn)算結(jié)果轉(zhuǎn)送給所述第一處理元件的高速緩沖存儲(chǔ)器的代碼。
3.根據(jù)權(quán)利要求I所述的代碼生成方法,其特征在于, 所述處理元件包括第一處理元件和第二處理元件; 所述不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在各個(gè)所述處理元件上; 在基于所述程序的解析結(jié)果判定為由所述第一處理元件執(zhí)行的任務(wù)和由所述第二處理元件執(zhí)行的任務(wù)間的邊界與存儲(chǔ)器的管理單位不匹配的情況下,生成如下代碼 各個(gè)所述處理元件在自身處理元件的不可高速緩沖存儲(chǔ)區(qū)域中對(duì)包含所述任務(wù)所使用的數(shù)據(jù)的邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算的代碼;以及 所述第一處理元件將在所述不可高速緩沖存儲(chǔ)區(qū)域中運(yùn)算出的結(jié)果寫入到所述第二處理元件的共享存儲(chǔ)器中的代碼。
4.根據(jù)權(quán)利要求I所述的代碼生成方法,其特征在于, 生成將所述不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在所述主存儲(chǔ)裝置中的命令或者設(shè)定語(yǔ)句。
5.根據(jù)權(quán)利要求I所述的代碼生成方法,其特征在于, 各個(gè)所述處理元件具備能夠從所述各處理元件進(jìn)行訪問(wèn)的分散共享存儲(chǔ)器; 生成將所述不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在所述分散共享存儲(chǔ)器中的命令或者設(shè)定語(yǔ)句。
6.根據(jù)權(quán)利要求I所述的代碼生成方法,其特征在于, 在基于所述程序的解析結(jié)果判定為所述分割后的任務(wù)對(duì)所述主存儲(chǔ)的多個(gè)區(qū)域進(jìn)行訪問(wèn)的情況下,對(duì)于與任務(wù)所使用的數(shù)據(jù)的邊界匹配的所述存儲(chǔ)器的管理單位,以與該管理單位匹配的方式分割所述任務(wù),對(duì)于與所述任務(wù)所使用的數(shù)據(jù)的邊界不匹配的管理單位,生成使用數(shù)據(jù)不暫時(shí)保存在所述高速緩沖存儲(chǔ)器中的不可高速緩沖存儲(chǔ)區(qū)域來(lái)對(duì)包含所述邊界的所述管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算的代碼。
7.根據(jù)權(quán)利要求I所述的代碼生成方法,其特征在于, 在基于所述程序的解析結(jié)果判定為所述任務(wù)所使用的數(shù)據(jù)在該程序中被聲明、并且僅在該程序中使用的情況下,生成將數(shù)組進(jìn)行擴(kuò)展以使該數(shù)據(jù)的多個(gè)要素不配置在各個(gè)所述管理單位中的代碼。
8.根據(jù)權(quán)利要求7所述的代碼生成方法,其特征在于, 所述任務(wù)所使用的數(shù)據(jù)是數(shù)組變量; 基于所述程序的解析結(jié)果,判定發(fā)生了所述分割后的任務(wù)所使用的數(shù)據(jù)的邊界與所述管理單位的不匹配的地方, 在所述數(shù)組變量的要素保存在所述主存儲(chǔ)裝置的連續(xù)的區(qū)域中的維數(shù)的要素之間發(fā)生了所述分割后的任務(wù)所使用的數(shù)據(jù)的邊界與所述管理單位的不匹配的情況下,生成將所述數(shù)組變量進(jìn)行擴(kuò)展以使所述數(shù)組變量的多個(gè)要素不配置在各個(gè)所述管理單位中的代碼; 在所述數(shù)組變量的要素保存在所述主存儲(chǔ)裝置的連續(xù)的區(qū)域中的維數(shù)的要素之間未發(fā)生所述分割后的任務(wù)所使用的數(shù)據(jù)的邊界與所述管理單位的不匹配的情況下,生成將所述數(shù)組變量進(jìn)行擴(kuò)展以使比發(fā)生所述不匹配的維數(shù)更下位的多個(gè)維數(shù)的所述數(shù)組變量的要素不配置在所述各管理單位中的代碼。
9.根據(jù)權(quán)利要求I所述的代碼生成方法,其特征在于, 所述處理元件包括第一處理元件和第二處理元件; 包括 按各個(gè)所述處理元件定義在該處理元件中使用的局部變量的代碼; 所述各處理元件使用所定義的所述局部變量進(jìn)行運(yùn)算的代碼; 所述第一處理元件將使用所述局部變量運(yùn)算出的結(jié)果寫回到主存儲(chǔ)裝置中的代碼; 所述第二處理元件從所述主存儲(chǔ)裝置讀入所述第一處理元件的運(yùn)算結(jié)果的代碼;以及所述第二處理元件將從所述主存儲(chǔ)裝置讀入的數(shù)據(jù)寫入到所述高速緩沖存儲(chǔ)器中的代碼。
10.根據(jù)權(quán)利要求I所述的代碼生成方法,其特征在于,在由不同的所述處理元件執(zhí)行的任務(wù)之間存在數(shù)據(jù)依賴的情況下,生成如下代碼產(chǎn)生所述數(shù)據(jù)的處理元件將存在所述依賴關(guān)系的數(shù)據(jù)寫回到所述主存儲(chǔ)裝置中的代碼;以及 消耗所述數(shù)據(jù)的處理元件將存在所述依賴關(guān)系的數(shù)據(jù)無(wú)效化的代碼。
11.一種存儲(chǔ)區(qū)域管理方法,在多處理器系統(tǒng)所具備的處理器執(zhí)行程序時(shí)對(duì)存儲(chǔ)器的存儲(chǔ)區(qū)域進(jìn)行管理,其特征在于, 所述多處理器系統(tǒng)具備多個(gè)處理元件以及能夠從各個(gè)所述處理元件進(jìn)行訪問(wèn)的主存儲(chǔ)裝置; 各個(gè)所述處理元件具備進(jìn)行運(yùn)算處理的處理器以及暫時(shí)保存所述處理器所使用的數(shù)據(jù)的高速緩沖存儲(chǔ)器; 所述方法包括如下步驟 所述處理元件將從所述主存儲(chǔ)裝置讀入的數(shù)據(jù)按照所述高速緩沖存儲(chǔ)器的管理單位暫時(shí)保存在所述高速緩沖存儲(chǔ)器中; 將所述處理元件結(jié)束使用的數(shù)據(jù)按照所述高速緩沖存儲(chǔ)器的管理單位從所述高速緩沖存儲(chǔ)器寫回到所述主存儲(chǔ)裝置中; 在分割所述程序而生成的各任務(wù)所使用的數(shù)據(jù)的邊界與存儲(chǔ)器的管理單位不匹配的情況下,設(shè)置不可高速緩沖存儲(chǔ)區(qū)域,將包含該邊界的管理單位中保存的運(yùn)算結(jié)果保存在所述不可高速緩沖存儲(chǔ)區(qū)域中,所述不可高速緩沖存儲(chǔ)區(qū)域是應(yīng)該保存在包含該邊界的管理單位中的數(shù)據(jù)不暫時(shí)保存在所述高速緩沖存儲(chǔ)器中的區(qū)域。
12.根據(jù)權(quán)利要求11所述的存儲(chǔ)區(qū)域管理方法,其特征在于, 所述處理元件包括第一處理元件和第二處理元件; 使用所述不可高速緩沖存儲(chǔ)區(qū)域進(jìn)行運(yùn)算的步驟包括如下步驟 所述第一處理元件在所述高速緩沖存儲(chǔ)器中對(duì)包含所述任務(wù)所使用的數(shù)據(jù)的邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算; 所述第二處理元件將包含所述任務(wù)所使用的數(shù)據(jù)的邊界的管理單位中保存的運(yùn)算結(jié)果保存在所述不可高速緩沖存儲(chǔ)區(qū)域中;以及 所述第二處理元件將所述不可高速緩沖存儲(chǔ)區(qū)域中保存的運(yùn)算結(jié)果轉(zhuǎn)送給所述第一處理元件的高速緩沖存儲(chǔ)器中。
13.根據(jù)權(quán)利要求11所述的存儲(chǔ)區(qū)域管理方法,其特征在于, 所述處理元件包括第一處理元件和第二處理元件; 所述不可高速緩沖存儲(chǔ)區(qū)域設(shè)置在各個(gè)所述各處理元件中; 使用所述不可高速緩沖存儲(chǔ)區(qū)域進(jìn)行運(yùn)算的步驟包括如下步驟 各個(gè)所述處理元件在自身處理元件的不可高速緩沖存儲(chǔ)區(qū)域中對(duì)包含所述任務(wù)所使用的數(shù)據(jù)的邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算;以及 所述第一處理元件將在所述不可高速緩沖存儲(chǔ)區(qū)域中運(yùn)算出的結(jié)果寫入到所述第二處理元件的共享存儲(chǔ)器。
14.根據(jù)權(quán)利要求11所述的存儲(chǔ)區(qū)域管理方法,其特征在于, 在由不同的所述處理元件執(zhí)行的任務(wù)之間存在數(shù)據(jù)依賴的情況下,產(chǎn)生所述數(shù)據(jù)的處理元件將存在所述依賴關(guān)系的數(shù)據(jù)寫回到所述主存儲(chǔ)裝置中,消耗所述數(shù)據(jù)的處理元件將存在所述依賴關(guān)系的數(shù)據(jù)無(wú)效化。
15.一種存儲(chǔ)介質(zhì),保存有生成能夠由多處理器系統(tǒng)所具備的處理器執(zhí)行的代碼的程序,其特征在于, 所述多處理器系統(tǒng)具備多個(gè)處理元件以及能夠從各個(gè)所述處理元件進(jìn)行訪問(wèn)的主存儲(chǔ)裝置; 各個(gè)所述處理元件具備進(jìn)行運(yùn)算處理的處理器以及暫時(shí)保存所述處理器所使用的數(shù)據(jù)的高速緩沖存儲(chǔ)器; 所述處理元件從所述主存儲(chǔ)裝置讀入的數(shù)據(jù)暫時(shí)保存在所述高速緩沖存儲(chǔ)器中; 由所述處理元件結(jié)束使用的數(shù)據(jù)從所述高速緩沖存儲(chǔ)器寫回到所述主存儲(chǔ)裝置中;在所述主存儲(chǔ)裝置與所述高速緩沖存儲(chǔ)器之間,按照所述高速緩沖存儲(chǔ)器的訪問(wèn)管理單位轉(zhuǎn)送數(shù)據(jù); 所述代碼生成程序使執(zhí)行該程序的計(jì)算機(jī)執(zhí)行如下步驟 對(duì)由所述處理器執(zhí)行的程序進(jìn)行解析; 對(duì)所述程序所包含的各任務(wù)的執(zhí)行所需的數(shù)據(jù)進(jìn)行解析; 基于所述解析的結(jié)果,在將所述程序分割為所述各任務(wù)的情況下,判定所述分割后的任務(wù)所使用的數(shù)據(jù)的邊界是否與存儲(chǔ)器的訪問(wèn)管理單位匹配; 在所述任務(wù)所使用的數(shù)據(jù)的邊界與存儲(chǔ)器的訪問(wèn)管理單位不匹配的情況下,使用設(shè)置不可高速緩沖存儲(chǔ)區(qū)域的代碼,來(lái)生成將包含該任務(wù)所使用的數(shù)據(jù)的邊界的訪問(wèn)管理單位中保存的運(yùn)算結(jié)果保存在所述不可高速緩沖存儲(chǔ)區(qū)域中的代碼,所述不可高速緩沖存儲(chǔ)區(qū)域是應(yīng)該保存在包含該邊界的管理單位中的數(shù)據(jù)不暫時(shí)保存在所述高速緩沖存儲(chǔ)器中的區(qū)域。
全文摘要
一種代碼生成方法,其特征在于,對(duì)由處理器執(zhí)行的程序進(jìn)行解析,對(duì)所述程序所包含的各任務(wù)的執(zhí)行所需的數(shù)據(jù)進(jìn)行解析,在基于所述解析結(jié)果將所述程序分割為各個(gè)所述任務(wù)的情況下,在判定為所述任務(wù)所使用數(shù)據(jù)的邊界與存儲(chǔ)器的管理單位不匹配的情況下,生成使用數(shù)據(jù)不暫時(shí)保存在所述高速緩沖存儲(chǔ)器中的不可高速緩沖存儲(chǔ)區(qū)域來(lái)對(duì)在包含該邊界的管理單位中保存的數(shù)據(jù)進(jìn)行運(yùn)算的代碼。
文檔編號(hào)G06F9/45GK102713846SQ201080057540
公開日2012年10月3日 申請(qǐng)日期2010年12月14日 優(yōu)先權(quán)日2009年12月16日
發(fā)明者木村啟二, 笠原博德, 間瀨正啟 申請(qǐng)人:學(xué)校法人早稻田大學(xué)