專利名稱:推測(cè)性吞吐量計(jì)算的制作方法
技術(shù)領(lǐng)域:
本主題總體上涉及吞吐量計(jì)算。
背景技術(shù):
程序(例如,計(jì)算機(jī)應(yīng)用程序)可以劃分成多個(gè)程序段。 例如,程序可以劃分成程序段P,、 P2、……、PN,其中,N是程序段 的數(shù)目。常規(guī)計(jì)算系統(tǒng)可以以枚舉順序相繼地執(zhí)行程序段。例如,單
個(gè)處理器計(jì)算系統(tǒng)可以在執(zhí)行P2之前執(zhí)行在執(zhí)行P3之前執(zhí)行P2、
并且在執(zhí)行Pw之前執(zhí)行PfM。以此順序執(zhí)行程序段遵守順序語(yǔ)義(例 如,具有較高枚舉順序x的程序段在具有較低枚舉順序y的程序段向
存儲(chǔ)器位置寫入之前從存儲(chǔ)器位置讀取,其中x〉y)。例如,第一程序段可以具有枚舉順序i,且第二程序段可以 具有枚舉順序j,其中i〈j。如果程序段沒(méi)有訪問(wèn)相同存儲(chǔ)器位置,則 可以在不違反順序語(yǔ)義的情況下并行地執(zhí)行第一程序段和第二程序 段。此外,如果第一程序段在第二程序段從存儲(chǔ)器位置讀取之后沒(méi)有 向該存儲(chǔ)器位置寫入,則不違反順序語(yǔ)義。多處理器、多核或多線程計(jì)算系統(tǒng)可以在多個(gè)處理器、處 理器核或線程上并行地執(zhí)行程序段(例如,基本上同時(shí)執(zhí)行程序段)。并行地執(zhí)行原來(lái)未被設(shè)計(jì)成并行執(zhí)行的程序段可以被稱為"推測(cè)性執(zhí) 行"。常規(guī)編譯器可以通過(guò)確定哪些程序段訪問(wèn)相同存儲(chǔ)器位置
將程序劃分成程序段。由于常規(guī)分析方法的限制,或者因?yàn)樵L問(wèn)的存 儲(chǔ)器位置在編譯時(shí)是未知的,所以許多程序無(wú)法由常規(guī)編譯器來(lái)劃分 以允許程序段的并行執(zhí)行。例如, 一些常規(guī)分析方法在臨時(shí)存儲(chǔ)器位置處執(zhí)行程序段 的寫指令。這些常規(guī)分析方法創(chuàng)建與使用臨時(shí)存儲(chǔ)器位置相關(guān)聯(lián)的執(zhí) 行開(kāi)銷(例如,存儲(chǔ)數(shù)據(jù)并從臨時(shí)存儲(chǔ)器位置移動(dòng)數(shù)據(jù))。其它常規(guī) 分析方法使用集中式數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)程序段的寫指令所寫入的存儲(chǔ)器 位置的原始數(shù)據(jù),使得可以恢復(fù)該原始數(shù)據(jù)。更新集中式結(jié)構(gòu)可以造 成過(guò)度開(kāi)銷,尤其是在使用專用數(shù)據(jù)結(jié)構(gòu)在軟件中實(shí)現(xiàn)寫日志的情況 下。此外,如果發(fā)生推測(cè)未命中(miss-speculation)(例如,當(dāng)具有枚 舉順序i的程序段已向具有枚舉順序j的程序段已經(jīng)讀取的位置寫入 時(shí),其中i〈j),則具有比j更高(例如,更大)的枚舉順序的程序段
停止并重做它們的執(zhí)行。停止和重做執(zhí)行導(dǎo)致可能使推測(cè)性執(zhí)行效率 低的執(zhí)行開(kāi)銷。此外,常規(guī)分析方法的典型硬件和軟件實(shí)現(xiàn)使用復(fù)雜的機(jī) 制并且效率低。例如,典型軟件實(shí)現(xiàn)造成執(zhí)行開(kāi)銷,因?yàn)樗鼈兪褂妙~ 外的指令,并通過(guò)降低存儲(chǔ)器局部性(locality)而導(dǎo)致較差的存儲(chǔ)系 統(tǒng)性能,這可以引起高速緩存未命中(cache miss)。 —些實(shí)現(xiàn)監(jiān)視存儲(chǔ)器的固定區(qū)域(例如, 一個(gè)或多個(gè)連續(xù) 存儲(chǔ)器位置的固定范圍)以跟蹤該區(qū)域是否被修改。過(guò)大的區(qū)域尺寸 可能導(dǎo)致違反順序語(yǔ)義的錯(cuò)誤確定。例如,如果程序段與具有較低枚 舉順序的另一程序段訪問(wèn)相同區(qū)域,則可以迫使該程序段停止并重做 它的執(zhí)行,即使沒(méi)有程序段訪問(wèn)相同位置。替代地,過(guò)小的區(qū)域尺寸
14增加了監(jiān)視讀和寫指令的開(kāi)銷。另外,常規(guī)剖析方法(例如,確定程序的屬性以根據(jù)程序 的推測(cè)性執(zhí)行來(lái)預(yù)測(cè)增益的程序測(cè)試執(zhí)行)采用用于推測(cè)性執(zhí)行的單 個(gè)方法。用于推測(cè)性執(zhí)行的方法還被稱為"推測(cè)性方法"或"用于推 測(cè)性吞吐量計(jì)算的過(guò)程"。此外,常規(guī)依賴分析器常常不能確定是否 可以并行地執(zhí)行程序段。
發(fā)明內(nèi)容
本發(fā)明公開(kāi)了用于推測(cè)性吞吐量計(jì)算的系統(tǒng)、方法以及裝置。推測(cè)性吞吐量計(jì)算用于并行地執(zhí)行程序段。通常, 一方面, 提供了一種方法。該方法包括生成推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位 置范圍。所述位置的精確范圍可以用于確定第一程序段和第二程序段
是否可能已訪問(wèn)了相同存儲(chǔ)器位置。該方法還包括如果推測(cè)性寫指 令已訪問(wèn)了與第一程序段相對(duì)應(yīng)的第一精確位置范圍或與第二程序段 相對(duì)應(yīng)的第二精確位置范圍,則將第一精確位置范圍與第二精確位置 范圍相比較。如果精確位置范圍重疊并且寫指令已訪問(wèn)了精確位置范 圍中的一個(gè),則可以違反順序語(yǔ)義。該方法還包括如果第一精確位 置范圍與第二精確位置范圍重疊,則標(biāo)識(shí)推測(cè)未命中。該方法還包括 如果標(biāo)識(shí)了推測(cè)未命中,則恢復(fù)推測(cè)性寫指令已訪問(wèn)的位置的存儲(chǔ)器 內(nèi)容。此方面的其它實(shí)施例包括系統(tǒng)和裝置。該方面的實(shí)現(xiàn)可以包括一個(gè)或多個(gè)以下特征。生成推測(cè)性 讀或?qū)懼噶钜言L問(wèn)的精確位置范圍可以包括擴(kuò)展一個(gè)或多個(gè)處理器、 處理器核或線程。擴(kuò)展一個(gè)或多個(gè)處理器、處理器核或線程可以包括 在硬件中生成數(shù)據(jù)結(jié)構(gòu)和寫日志。所述數(shù)據(jù)結(jié)構(gòu)可以存儲(chǔ)最大數(shù)據(jù)地 址、最小數(shù)據(jù)地址以及指示符中的至少一個(gè)。最大數(shù)據(jù)地址和最小數(shù) 據(jù)地址可以用于定義精確位置范圍。指示符可以指示指令是讀還是寫指令。寫日志可以存儲(chǔ)與寫指令相關(guān)聯(lián)的數(shù)據(jù)。與寫指令相關(guān)聯(lián)的數(shù) 據(jù)可以包括舊值和新值。舊值可以是在執(zhí)行寫指令之前的位置的值, 并且新值可以是寫指令將要寫入該位置的值。寫日志可以包括寫曰志 指針,寫日志指針可操作用于存儲(chǔ)下一個(gè)空閑寫日志條目的索引。生成推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位置范圍可以進(jìn)一步
包括確定讀或?qū)懼噶钍欠袷峭茰y(cè)性的。如果讀或?qū)懼噶钍峭茰y(cè)性的, 則該方法還可以包括執(zhí)行推測(cè)性讀或?qū)懼噶?。?zhí)行推測(cè)性讀或?qū)懼噶?可以包括在用于相應(yīng)處理器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中定位推測(cè)
性讀或?qū)懼噶?。定位推測(cè)性讀或?qū)懼噶羁梢园ㄈ绻茰y(cè)性讀或?qū)?指令的執(zhí)行是推測(cè)性讀或?qū)懼噶畹牡谝淮螆?zhí)行,則存儲(chǔ)該推測(cè)性讀或 寫指令。執(zhí)行推測(cè)性讀或?qū)懼噶羁梢赃M(jìn)一步包括在用于相應(yīng)處理器、 處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中,將推測(cè)性讀或?qū)懼噶畹挠行У刂放c最 大數(shù)據(jù)地址和最小數(shù)據(jù)地址相比較。有效地址可以是推測(cè)性讀或?qū)懼?令將訪問(wèn)的存儲(chǔ)器地址。執(zhí)行推測(cè)性讀或?qū)懼噶羁梢赃M(jìn)一步包括在 用于相應(yīng)處理器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中,如果有效地址大于 最大數(shù)據(jù)地址,則將有效地址存儲(chǔ)為最大數(shù)據(jù)地址。執(zhí)行推測(cè)性讀或 寫指令可以迸一步包括在用于相應(yīng)處理器、處理器核或線程中,如 果有效地址小于最小數(shù)據(jù)地址,則將有效地址存儲(chǔ)為最小數(shù)據(jù)地址。 存儲(chǔ)有效地址更新了精確位置范圍。執(zhí)行推測(cè)性讀或?qū)懼噶羁梢赃M(jìn)一步包括設(shè)置指示符以標(biāo) 識(shí)推測(cè)性寫指令;以及如果推測(cè)性讀或?qū)懼噶钍峭茰y(cè)性寫指令,則將 與寫指令相關(guān)聯(lián)的有效地址和數(shù)據(jù)存儲(chǔ)在寫日志中。將與寫指令相關(guān) 聯(lián)的有效地址和數(shù)據(jù)存儲(chǔ)在寫日志中可以包括使用寫日志指針來(lái)確 定用于存儲(chǔ)的寫日志條目,并將寫日志指針遞增至下一個(gè)空閑寫日志 條目。將第一精確位置范圍與第二精確位置范圍相比較可以包 括在用于第一處理器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中檢索最大數(shù)據(jù)地址和最小數(shù)據(jù)地址;在用于第二處理器、處理器核或線程的數(shù)據(jù)結(jié) 構(gòu)中檢索最大數(shù)據(jù)地址和最小數(shù)據(jù)地址;以及將來(lái)自第一處理器、處 理器核或線程的最大數(shù)據(jù)地址和最小數(shù)據(jù)地址與來(lái)自第二處理器、處 理器核或線程的最大數(shù)據(jù)地址和最小數(shù)據(jù)地址相比較。如果設(shè)置了用于與第一程序段相對(duì)應(yīng)的第一處理器、處理 器核或線程的數(shù)據(jù)結(jié)構(gòu)中的指示符,或者設(shè)置了用于與第二程序段相 對(duì)應(yīng)的第二處理器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中的指示符,則推測(cè) 性寫指令已訪問(wèn)了與第一程序段相對(duì)應(yīng)的第一精確位置范圍或與第二 程序段相對(duì)應(yīng)的第二精確位置范圍?;謴?fù)推測(cè)性寫指令已訪問(wèn)的位置的存儲(chǔ)器內(nèi)容可以包括 確定向位置寫入最終值的處理器、處理器核或線程,包括存儲(chǔ)位置的 值和位置的地址;以及如果當(dāng)前地址被包含在寫日志條目中,與當(dāng)前 地址相對(duì)應(yīng)的新值等于該位置的值,并且該新值不等于相應(yīng)的舊值, 則確定匹配條目并將匹配條目存儲(chǔ)在反向跟蹤(back-track)堆棧中。 存儲(chǔ)推測(cè)性寫指令已訪問(wèn)的位置的存儲(chǔ)器內(nèi)容還可以包括使用數(shù)據(jù)結(jié) 構(gòu)和反向跟蹤堆棧來(lái)恢復(fù)位置中的舊值。該方面的其它實(shí)現(xiàn)可以包括在虛擬存儲(chǔ)器中生成數(shù)據(jù)結(jié) 構(gòu)和寫日志。如果讀或?qū)懼噶钍峭茰y(cè)性的,則這些實(shí)現(xiàn)可以執(zhí)行擴(kuò)增 的讀或?qū)懼噶睢M茰y(cè)性吞吐量計(jì)算還可以用于減少在并行地執(zhí)行程序段期 間的推測(cè)未命中的數(shù)目。通常, 一方面,提供了一種方法。該方法包 括生成用于程序減少推測(cè)未命中的數(shù)目的對(duì)程序段的調(diào)度。生成用 于程序減少推測(cè)未命中的數(shù)目的對(duì)程序段的調(diào)度可以包括導(dǎo)出數(shù)據(jù)依 賴圖。生成用于程序減少推測(cè)未命中的數(shù)目的對(duì)程序段的調(diào)度還可以 包括根據(jù)數(shù)據(jù)依賴圖來(lái)確定程序段的執(zhí)行順序。此方面的其它實(shí)施例 包括系統(tǒng)和裝置。
該方面的實(shí)現(xiàn)可以包括一個(gè)或多個(gè)以下特征。執(zhí)行順序可 以符合順序語(yǔ)義。導(dǎo)出數(shù)據(jù)依賴圖可以包括利用對(duì)程序段定界的觸發(fā)點(diǎn)擴(kuò)增 程序,其中觸發(fā)點(diǎn)遞增枚舉程序段的枚舉順序的變量。導(dǎo)出數(shù)據(jù)依賴 圖還可以包括利用潛在地造成依賴性的讀和寫指令的標(biāo)記擴(kuò)增程序, 該標(biāo)記將指令標(biāo)識(shí)為推測(cè)性的。導(dǎo)出數(shù)據(jù)依賴圖還可以包括順序地執(zhí) 行程序段。導(dǎo)出數(shù)據(jù)依賴圖還可以包括如果執(zhí)行了推測(cè)性讀或?qū)懼?令,則存儲(chǔ)地址、推測(cè)性指令的類型以及程序段的相應(yīng)枚舉順序。該方法可以進(jìn)一步包括根據(jù)執(zhí)行順序來(lái)執(zhí)行程序段,并對(duì) 程序段執(zhí)行進(jìn)行比較以標(biāo)識(shí)依賴性。依賴性可以在已根據(jù)執(zhí)行順序執(zhí) 行了所有程序段之后被標(biāo)識(shí)。推測(cè)性吞吐量計(jì)算還可以用于解譯要在多個(gè)處理器、處理 器核或線程上執(zhí)行的程序。通常, 一方面,提供了一種方法,該方法 包括解譯要在多個(gè)處理器、處理器核或線程上執(zhí)行的程序。解譯要在多個(gè)處理器、處理器核或線程上執(zhí)行的程序可以 包括分析程序的程序段的數(shù)據(jù)依賴。例如,數(shù)據(jù)依賴圖可以被導(dǎo)出并 且用于分析在程序的程序段之間的依賴性。解譯要在多個(gè)處理器、處 理器核或線程上執(zhí)行的程序還可以包括收集統(tǒng)計(jì)信息,統(tǒng)計(jì)信息包括 在程序段中執(zhí)行的指令的數(shù)目、指令所使用的循環(huán)的平均數(shù)目、以及 程序段中的推測(cè)性讀和寫的數(shù)目中的至少一個(gè)。該統(tǒng)計(jì)信息可以用于 確定在分析模型中的執(zhí)行時(shí)間。解譯要在多個(gè)處理器、處理器核或線 程上執(zhí)行的程序還可以包括根據(jù)推測(cè)性執(zhí)行來(lái)預(yù)測(cè)加速增益(speedup gain),包括確定程序的順序執(zhí)行的執(zhí)行時(shí)間。解譯要在多個(gè)處理器、 處理器核或線程上執(zhí)行的程序還可以包括通過(guò)應(yīng)用分析模型來(lái)導(dǎo)出加 速增益。此方面的其它實(shí)施例包括系統(tǒng)和裝置。
該方面的實(shí)現(xiàn)可以包括一個(gè)或多個(gè)以下特征。分析模型可 以包括多種推測(cè)性方法的執(zhí)行時(shí)間,所述多種推測(cè)性方法的執(zhí)行時(shí)間 可以等于最慢程序段的執(zhí)行時(shí)間。解譯要在多個(gè)處理器、處理器核或線程上執(zhí)行的程序可以 進(jìn)一步包括使用加速增益從所述多種推測(cè)性方法中選擇所選擇的推測(cè) 性方法。例如,可以選擇具有最高加速增益的推測(cè)性方法。解譯要在 多個(gè)處理器、處理器核或線程上執(zhí)行的程序可以進(jìn)一步包括使用所選 擇的推測(cè)性方法來(lái)執(zhí)行程序。可以用以下等式來(lái)表示執(zhí)行時(shí)間
Texec(K) = Max[Tsegment—start(K) + Ni'CPIj + R「Rcost(K) + Wi.WC0St(K)
+ Proll-back .R0ll-backc0St(K) + (1 - Proli-back) .Ccost(K)]. K標(biāo)識(shí)多種推測(cè)性方法中的一種。Max是最大值函數(shù)。
T^n^t.s^對(duì)發(fā)起推測(cè)性線程的啟動(dòng)成本進(jìn)行建模。R^t對(duì)推測(cè)性讀指
令的成本進(jìn)行建模。W^t對(duì)推測(cè)性寫指令的成本進(jìn)行建模。P』.b^是 推測(cè)未命中的概率。Roll-backe。st對(duì)回滾(rollback)的成本進(jìn)行建模。 C。Mt對(duì)提交(commit)的成本進(jìn)行建模。Ni是在程序段i中執(zhí)行的指令 的數(shù)目。CPIi是指令所使用的循環(huán)的平均數(shù)目。Ri是在程序段i中的推 測(cè)性讀指令的數(shù)目。Wi是在程序段i中的推測(cè)性寫指令的數(shù)目。可以用以下等式來(lái)表示加速增益: Speed叩(K) = Ts叫此一 / Texec(K). Tsequential是程序的順序執(zhí)行的執(zhí)行時(shí)間。所述多種推測(cè)性方法可以包括包含多種推測(cè)性方法中的一 種或多種推測(cè)性方法中的部分的組合的推測(cè)性方法。所述多種推測(cè)性 方法可以包括包含所述多種推測(cè)性方法中順序執(zhí)行的一種或多種推測(cè)
19性方法的組合的推測(cè)性方法。所述多種推測(cè)性方法可以包括包含所述 多種推測(cè)性方法中并行地執(zhí)行的一種或多種推測(cè)性方法的組合的推測(cè) 性方法。在本說(shuō)明書中描述的主題的特定實(shí)施例可以被實(shí)現(xiàn)成實(shí)現(xiàn)
一個(gè)或多個(gè)以下優(yōu)點(diǎn)。推測(cè)性吞吐量計(jì)算的優(yōu)點(diǎn)是它通過(guò)使用推測(cè) 性讀和寫計(jì)算機(jī)指令來(lái)降低執(zhí)行開(kāi)銷。推測(cè)性吞吐量計(jì)算的附加優(yōu)點(diǎn)是它通過(guò)假設(shè)推測(cè)有效并 通過(guò)使用分散式方案來(lái)恢復(fù)被推測(cè)性地修改的存儲(chǔ)器位置的內(nèi)容來(lái)降 低與提交操作有關(guān)的執(zhí)行開(kāi)銷。推測(cè)性吞吐量計(jì)算的附加優(yōu)點(diǎn)是它通過(guò)不按順序次序執(zhí)
行程序段來(lái)確定推測(cè)性并行性。推測(cè)性吞吐量計(jì)算的附加優(yōu)點(diǎn)是它通過(guò)保持已被推測(cè)性
地訪問(wèn)的精確位置范圍來(lái)提高確定違反順序語(yǔ)義的準(zhǔn)確度并降低執(zhí)行 開(kāi)銷。推測(cè)性吞吐量計(jì)算的附加優(yōu)點(diǎn)是它通過(guò)選擇多種推測(cè)性
方法中的一種來(lái)增加來(lái)自推測(cè)性執(zhí)行的加速增益。推測(cè)性吞吐量計(jì)算的附加優(yōu)點(diǎn)是通過(guò)增加加速增益,推
測(cè)性吞吐量計(jì)算降低了系統(tǒng)的工作頻率并降低了能量消耗。
圖1圖示了示例多處理器計(jì)算系統(tǒng)。圖2示出了用于解譯要在多個(gè)處理器、處理器核或線程上 執(zhí)行的程序的示例過(guò)程。圖3示出了用于推測(cè)性吞吐量計(jì)算的示例過(guò)程。
圖4圖示了用于圖3的推測(cè)性吞吐量計(jì)算的過(guò)程的示例硬
件實(shí)現(xiàn)的結(jié)構(gòu)。圖5示出了用于生成圖4的結(jié)構(gòu)的示例過(guò)程。
圖6示出了使用圖4的結(jié)構(gòu)的提交操作的示例過(guò)程。
圖7示出了使用圖4的結(jié)構(gòu)和反向跟蹤堆棧的回滾操作的
示例過(guò)程。圖8圖示了示例反向跟蹤堆棧。圖9圖示了用于圖3的推測(cè)性吞吐量計(jì)算的過(guò)程的示例軟
件實(shí)現(xiàn)的結(jié)構(gòu)。圖10示出了用于生成圖9的結(jié)構(gòu)的示例過(guò)程。
圖11示出了使用圖9的結(jié)構(gòu)的提交操作的示例過(guò)程。
圖12示出了使用圖9的結(jié)構(gòu)和反向跟蹤堆棧的回滾操作的
示例過(guò)程。圖13圖示了示例性數(shù)據(jù)依賴圖。
具體實(shí)施例方式
示例計(jì)算系統(tǒng)圖1圖示了示例多處理器計(jì)算系統(tǒng)100。多處理器計(jì)算系 統(tǒng)100包括處理器(例如,處理器131、 132和133);耦接到處理器 的高速緩沖存儲(chǔ)器(例如,專用高速緩存121、 122和123);互連裝 置140;以及存儲(chǔ)器IIO。處理器和高速緩沖存儲(chǔ)器被耦接到互連裝置 140 (例如,總線、或縱橫開(kāi)關(guān))?;ミB裝置140允許高速緩沖存儲(chǔ)器 向存儲(chǔ)器100或其它高速緩沖存儲(chǔ)器發(fā)送對(duì)附加存儲(chǔ)器的請(qǐng)求。在一些實(shí)現(xiàn)中,可以在多處理器計(jì)算系統(tǒng)100中使用附加 的存儲(chǔ)器層級(jí)。例如,存儲(chǔ)器110可以是耦接到附加存儲(chǔ)器的次級(jí)高 速緩存。在一些實(shí)現(xiàn)中,高速緩沖存儲(chǔ)器包括可以由耦接到本地存儲(chǔ) 器的處理器訪問(wèn)的本地存儲(chǔ)器。例如,由處理器131執(zhí)行的讀或?qū)懼?令可以通過(guò)喚醒向處理器132發(fā)送信號(hào)的軟件例程來(lái)訪問(wèn)耦接到處理 器132的本地存儲(chǔ)器。該信號(hào)可以喚醒由處理器132執(zhí)行的軟件例程,其中處理器132訪問(wèn)本地存儲(chǔ)器并通過(guò)向處理器132發(fā)送信號(hào)來(lái)向處 理器131返回值。在高速緩沖存儲(chǔ)器中保持一致性(例如,高速緩存一致性)。 在一些實(shí)現(xiàn)中,可以使用寫無(wú)效高速緩存一致性機(jī)制來(lái)保持高速緩存 一致性。當(dāng)耦接到另一高速緩沖存儲(chǔ)器的處理器向存儲(chǔ)器的區(qū)塊寫入 時(shí),寫無(wú)效高速緩存一致性機(jī)制可以使在高速緩沖存儲(chǔ)器中的存儲(chǔ)器 的區(qū)塊(例如,存儲(chǔ)器的鄰近位置)無(wú)效。在一些實(shí)現(xiàn)中,可以使用 寫更新高速緩存一致性機(jī)制來(lái)保持高速緩存一致性。,特別地,當(dāng)耦接 到另一高速緩存的處理器修改存儲(chǔ)器的區(qū)塊時(shí),存儲(chǔ)器的該區(qū)塊被更 新。在一些實(shí)現(xiàn)中,無(wú)效和更新請(qǐng)求的分布協(xié)議可以是一對(duì)多(例如, 監(jiān)聽(tīng)高速緩存協(xié)議)。在一些實(shí)現(xiàn)中,無(wú)效和更新請(qǐng)求的分布協(xié)議可 以是一對(duì)一 (例如,基于目錄的協(xié)議)。在一些實(shí)現(xiàn)中, 一個(gè)或多個(gè)處理器可以包括多個(gè)獨(dú)立處理 器核(例如,多核處理器)。例如,雙核處理器包括兩個(gè)處理器核, 并且四核處理器包括四個(gè)處理器核。處理器核可以并行地執(zhí)行多個(gè)線 程(例如,由程序的分叉或拆分創(chuàng)建的程序段,或執(zhí)行的線程)。
程序解譯概述圖2示出了用于解譯要在多個(gè)處理器、處理器核或線程上 執(zhí)行的程序的示例性過(guò)程200。例如,可以將以高級(jí)編程語(yǔ)言(例如, C、 C++、 Fortran或Java)編寫的計(jì)算機(jī)應(yīng)用解譯成在處理器上執(zhí)行的 機(jī)器語(yǔ)言程序。為方便起見(jiàn),將針對(duì)執(zhí)行過(guò)程200的系統(tǒng)來(lái)描述過(guò)程 200。系統(tǒng)分析210程序的程序段的數(shù)據(jù)依賴。特別地,該系統(tǒng) 確定是否可以并行地(例如,在多處理器計(jì)算系統(tǒng)中的多個(gè)處理器上、 在單個(gè)處理器的多個(gè)處理器核上、在多個(gè)線程上)執(zhí)行可以在單個(gè)處 理器計(jì)算系統(tǒng)上順序地(例如, 一個(gè)接一個(gè)地)執(zhí)行的程序的程序段。
22
該系統(tǒng)確定一種或多種方法以推測(cè)性地并行執(zhí)行程序段的 讀和寫指令以供在解譯中使用。特別地,系統(tǒng)剖析220程序。在剖析
過(guò)程期間,系統(tǒng)執(zhí)行程序以收集統(tǒng)計(jì)信息。統(tǒng)計(jì)信息的一些示例包括 但不限于在程序段中執(zhí)行的指令的數(shù)目、每個(gè)指令所需的循環(huán)的平 均數(shù)目以及在程序段中推測(cè)性讀和寫的數(shù)目。然后,系統(tǒng)選擇230 — 種或多種推測(cè)性方法以用于解譯。在一些實(shí)現(xiàn)中,該系統(tǒng)選擇推測(cè)性 方法的組合。
推測(cè)性吞吐量計(jì)算圖3示出了用于推測(cè)性吞吐量計(jì)算的示例性過(guò)程300。為 方便起見(jiàn),將針對(duì)執(zhí)行過(guò)程300的系統(tǒng)來(lái)描述過(guò)程300。在一些實(shí)現(xiàn)中, 系統(tǒng)生成310推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位置范圍。位置范圍可 以是精確的,因?yàn)樽罡呶恢?例如,在該范圍內(nèi)的最大數(shù)據(jù)地址)已 被推測(cè)性讀或?qū)懼噶钤L問(wèn)。此外,最低位置(例如,在該范圍內(nèi)的最 小數(shù)據(jù)地址)已被推測(cè)性讀或?qū)懼噶钤L問(wèn)。在一些實(shí)現(xiàn)中,該系統(tǒng)為多處理器中的每個(gè)處理器、多核 處理器中的處理器核、或線程生成推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位 置范圍。其它實(shí)現(xiàn)是可能的。如果推測(cè)性寫指令已訪問(wèn)與第一程序段相對(duì)應(yīng)的第一精確 位置范圍或與第二程序段相對(duì)應(yīng)的第二精確位置范圍,則系統(tǒng)可以將 第一精確位置范圍與第二精確位置范圍相比較320。特別地,系統(tǒng)可以
確定程序段的并行推測(cè)性執(zhí)行是否遵守順序語(yǔ)義。例如,可以并行地 執(zhí)行第一程序段和第二程序段。第一程序段可以具有比第二程序段的 枚舉順序小的枚舉順序。如果第二程序段在第一程序段向存儲(chǔ)器位置
寫入之前從存儲(chǔ)器位置讀取,則已違反順序語(yǔ)義。如果位置范圍重疊,則可以違反順序語(yǔ)義。例如,如果第一精確位置范圍與第二精確位置范圍重疊,則第一程序段和第二程序 段可能已訪問(wèn)相同存儲(chǔ)器位置。如果第一精確位置范圍與第二精確位 置范圍重疊并且在第一精確范圍或第二精確范圍中的位置已被修改, 則系統(tǒng)標(biāo)識(shí)330推測(cè)未命中(例如,可能不符合順序語(yǔ)義的推測(cè))。如果標(biāo)識(shí)了推測(cè)未命中,則系統(tǒng)恢復(fù)340推測(cè)性寫指令已 訪問(wèn)的位置的存儲(chǔ)器內(nèi)容。將針對(duì)圖4-13進(jìn)一步詳細(xì)地描述用于推測(cè) 性吞吐量計(jì)算的過(guò)程300的實(shí)現(xiàn)。
用于推測(cè)性吞吐量計(jì)算的示例硬件實(shí)現(xiàn)圖4圖示了用于圖3的推測(cè)性吞吐量計(jì)算的過(guò)程的示例硬 件實(shí)現(xiàn)的結(jié)構(gòu)400。在硬件中,該結(jié)構(gòu)包括數(shù)據(jù)結(jié)構(gòu)410 (例如,訪問(wèn) 矩陣表)、寫日志420以及寫日志指針430。在一些實(shí)現(xiàn)中,用該結(jié)構(gòu) 來(lái)擴(kuò)展每個(gè)處理器(例如,數(shù)據(jù)結(jié)構(gòu)410、寫日志420以及寫日志指針 430)。在一些實(shí)現(xiàn)中,用該結(jié)構(gòu)來(lái)擴(kuò)展在處理器或線程中的每個(gè)處理 器核。在一些實(shí)現(xiàn)中,數(shù)據(jù)結(jié)構(gòu)410是具有許多條目的表格。每 個(gè)條目可以包括字段。字段的一些示例包括但不限于指令地址字段 411、數(shù)據(jù)有效性字段412、最大數(shù)據(jù)地址413、最小數(shù)據(jù)地址字段414 以及指示符字段415。指令地址字段411 (例如,"TAG"字段)可以 存儲(chǔ)指令地址(例如,標(biāo)識(shí)存儲(chǔ)器中的指令位置的64位地址)。數(shù)據(jù) 有效性字段412 (例如,"V"字段)可以存儲(chǔ)例如指示存儲(chǔ)在條目中 的數(shù)據(jù)是否有效的單個(gè)位。最大數(shù)據(jù)地址字段413 (例如,"MAX" 字段)和最小數(shù)據(jù)地址字段414 (例如,"MIN"字段)可以存儲(chǔ)數(shù)據(jù) 地址。特別地,最大數(shù)據(jù)地址被存儲(chǔ)在最大數(shù)據(jù)地址字段413中,并 且最小數(shù)據(jù)地址被存儲(chǔ)在最小數(shù)據(jù)地址字段414中。如上文參照?qǐng)D3 所述,最大數(shù)據(jù)地址字段413和最小數(shù)據(jù)地址字段414可以用于定義 精確位置范圍。指示符字段415 (例如,"RW"字段)可以存儲(chǔ)指示 符(例如,單個(gè)位)以指示與該條目相對(duì)應(yīng)的指令是讀指令還是寫指頁(yè)令。在一些實(shí)現(xiàn)中,寫日志420可以是具有可以存儲(chǔ)與寫指令 相關(guān)聯(lián)的地址和數(shù)據(jù)的條目的表格。在一些實(shí)現(xiàn)中,可以使用寄存器 來(lái)存儲(chǔ)寫日志指針430。特別地,該寄存器可以存儲(chǔ)在寫日志420中的 下一個(gè)空閑條目的索引。與寫指令相關(guān)聯(lián)的數(shù)據(jù)可以包括舊值(例如,在執(zhí)行寫指 令之前的位置的值)、新值(例如,寫指令將向該位置寫入的值)以 及一個(gè)或多個(gè)狀態(tài)位。例如,如果執(zhí)行了寫指令,則值(例如,新值) 被寫入存儲(chǔ)器位置。原始值(例如,在執(zhí)行寫指令之前在存儲(chǔ)器位置
中的值)被存儲(chǔ)為舊值。對(duì)于不同的架構(gòu),可以選擇舊值和新值的大小(例如,用 于存儲(chǔ)該值的位數(shù))。例如,32位架構(gòu)可以包括是32位值的舊值和新 值。作為另一示例,64位架構(gòu)可以包括是64位值的舊值和新值。狀態(tài)位可以指示存儲(chǔ)在舊值或新值中的數(shù)據(jù)是否有效。當(dāng) 導(dǎo)出一個(gè)或多個(gè)存儲(chǔ)器位置的舊值時(shí),也可以使用狀態(tài)位。狀態(tài)位的 數(shù)目可以取決于值(例如,舊值和新值)的大小。例如,在寫日志中 的每個(gè)條目每一可尋址單位可以包括一個(gè)狀態(tài)位(例如,每個(gè)8位值
或字節(jié)的狀態(tài)位)。在一些實(shí)現(xiàn)中,用占位符位或字節(jié)來(lái)填充在日志 條目中未使用的位或字節(jié)。例如,占位符位或字節(jié)可以是與用來(lái)填充 在舊值和新值兩者中的未使用位或字節(jié)的相同位或字節(jié)值。圖5圖示了用于生成圖4的結(jié)構(gòu)的示例過(guò)程500。為方便 起見(jiàn),將針對(duì)執(zhí)行過(guò)程500的系統(tǒng)來(lái)描述過(guò)程500。系統(tǒng)可以在兩種類型的存儲(chǔ)器指令之間進(jìn)行區(qū)分常規(guī)性 讀和寫指令(例如,不是推測(cè)性性的讀和寫指令)和推測(cè)性讀和寫指令。系統(tǒng)確定501讀或?qū)懼噶钍欠袷峭茰y(cè)性的。如果讀或?qū)懼噶畈皇?br>
推測(cè)性的(步驟501的"否"分支),則照常執(zhí)行讀或?qū)懼噶?例如, 作為常規(guī)性讀或?qū)懼噶顏?lái)執(zhí)行)。然后,系統(tǒng)執(zhí)行513下一指令。如果讀或?qū)懼噶钍峭茰y(cè)性的(步驟501的"是"分支), 則執(zhí)行推測(cè)性讀或?qū)懼噶?。系統(tǒng)在用于相應(yīng)處理器、處理器核或線程 的數(shù)據(jù)結(jié)構(gòu)(例如,圖4的數(shù)據(jù)結(jié)構(gòu)410)中定位502推測(cè)性讀或?qū)懼?令。在一些實(shí)現(xiàn)中,數(shù)據(jù)結(jié)構(gòu)可以是哈希結(jié)構(gòu),并且可以使用地址映 射方法來(lái)定位指令,例如,全相聯(lián)、直接映射或組相聯(lián)地址映射方法。如果推測(cè)性讀或?qū)懼噶畹膱?zhí)行是推測(cè)性讀或?qū)懼噶畹牡谝?次執(zhí)行(例如匹配未位于數(shù)據(jù)結(jié)構(gòu)中;步驟503的"否"分支),則 系統(tǒng)存儲(chǔ)504推測(cè)性讀或?qū)懼噶睢L貏e地,系統(tǒng)將推測(cè)性讀或?qū)懼噶?的指令地址與在數(shù)據(jù)結(jié)構(gòu)中的所有條目的TAG字段相比較。如果推測(cè)
性讀或?qū)懼噶畹膱?zhí)行是推測(cè)性讀或?qū)懼噶畹牡谝淮螆?zhí)行(例如,指令 地址不匹配TAG字段中的任何一個(gè)),則將推測(cè)性讀或?qū)懼噶畲鎯?chǔ)在 數(shù)據(jù)結(jié)構(gòu)中。系統(tǒng)可以分配新條目或使用以前被逐出的條目。如果推測(cè)性讀或?qū)懼噶畹膱?zhí)行不是第一執(zhí)行(例如,匹配 位于數(shù)據(jù)結(jié)構(gòu)中;步驟503中的"是"分支),則系統(tǒng)將推測(cè)性讀或 寫指令的有效地址(例如,推測(cè)性讀或?qū)懼噶顚⒃L問(wèn)的存儲(chǔ)器地址) 與最大數(shù)據(jù)地址和最小數(shù)據(jù)地址相比較。特別地,系統(tǒng)從數(shù)據(jù)結(jié)構(gòu)中 的MAX字段和MIN字段檢索505值。如果有效地址(例如,圖5的 ADDR)大于最大數(shù)據(jù)地址(步驟506的"是"分支),則系統(tǒng)將有效 地址存儲(chǔ)507為最大數(shù)據(jù)地址。否則(步驟506的"否"分支),如 果有效地址小于最小數(shù)據(jù)地址(步驟508的"是"分支),則系統(tǒng)將 有效地址存儲(chǔ)509為最小數(shù)據(jù)地址。系統(tǒng)確定推測(cè)性讀或?qū)懼噶钍欠袷峭茰y(cè)性寫指令。如果推 測(cè)性讀或?qū)懼噶畈皇峭茰y(cè)性寫指令(步驟510的"否"分支),則系統(tǒng)執(zhí)行步驟513。如果推測(cè)性讀或?qū)懼噶钍峭茰y(cè)性寫指令(步驟510的 "是"分支),則系統(tǒng)設(shè)置511指示符(例如,在"RW"字段中的位) 以標(biāo)識(shí)推測(cè)性寫指令。另外,系統(tǒng)將寫或與寫指令相關(guān)聯(lián)的有效地址 和數(shù)據(jù)存儲(chǔ)512在寫日志(例如,寫日志420)中。特別地,可以將與 寫曰志相關(guān)聯(lián)的有效地址和數(shù)據(jù)存儲(chǔ)在寫日志指針(例如,圖4的寫 日志指針430)所指向的寫日志條目中,并且寫日志指針遞增到指向下 一個(gè)空閑寫日志條目(例如,通過(guò)遞增寄存器中的值)。然后,系統(tǒng) 執(zhí)行步驟513。參照?qǐng)D6,系統(tǒng)將第一精確位置范圍與第二精確位置范圍 相比較以確定由一個(gè)處理器、處理器核或線程訪問(wèn)的位置范圍是否與 由其它處理器、處理器核或線程訪問(wèn)的位置范圍重疊。系統(tǒng)確定在第 一數(shù)據(jù)結(jié)構(gòu)中是否存在尚未被比較的條目。如果不存在更多條目(步 驟602的"否"分支),則系統(tǒng)停止610。如果存在更多條目(步驟 602的"是"分支),則系統(tǒng)從用于第一處理器、處理器核或線程的數(shù) 據(jù)結(jié)構(gòu)檢索603最大數(shù)據(jù)地址(例如,MAX)、最小數(shù)據(jù)地址(例如, MIN)以及指示符(例如,RW)。另外,系統(tǒng)確定在第二數(shù)據(jù)結(jié)構(gòu)中是否存在尚未與在步驟 602中確定的條目相比較的條目。如果在第二數(shù)據(jù)結(jié)構(gòu)中不存在更多條 目(步驟604的"否"分支),則系統(tǒng)返回步驟602。如果存在更多條 目(步驟604的"是"分支),則系統(tǒng)在用于第二處理器、處理器核 或線程的數(shù)據(jù)結(jié)構(gòu)中檢索605最大數(shù)據(jù)地址(例如,N.MAX)、最小 數(shù)據(jù)地址(例如,N.MIN)以及指示符(例如,N.RW)。系統(tǒng)將來(lái)自 第一處理器、處理器核或線程的最大數(shù)據(jù)地址和最小數(shù)據(jù)地址與來(lái)自 第二處理器、處理器核或線程的最大數(shù)據(jù)地址和最小數(shù)據(jù)地址相比較。特別地,如用設(shè)置了在用于第一處理器、處理器核或線程 的數(shù)據(jù)結(jié)構(gòu)中的指示符,或者設(shè)置了在用于第二處理器、處理器核或 線程的數(shù)據(jù)結(jié)構(gòu)中的指示符(步驟606的"是"分支),則推測(cè)性寫指令已分別訪問(wèn)與第一程序段相對(duì)應(yīng)的第一精確位置范圍或與第二程
序段相對(duì)應(yīng)的第二精確位置范圍。如果沒(méi)有設(shè)置指示符(步驟606的 "搜"分支),則系統(tǒng)返回步驟604。如果來(lái)自第一處理器的最大數(shù)據(jù)地址小于來(lái)自第二處理 器、處理器核或線程的最大數(shù)據(jù)地址;并且來(lái)自第一處理器的最大數(shù) 據(jù)地址大于來(lái)自第二處理器的最小數(shù)據(jù)地址(步驟607的"是"分支), 則第一精確位置范圍與第二精確位置范圍重疊,并且系統(tǒng)標(biāo)識(shí)609推 測(cè)未命中。否則(步驟607的"否"分支),系統(tǒng)執(zhí)行步驟608。如果來(lái)自第一處理器的最小數(shù)據(jù)地址大于來(lái)自第二處理 器、處理器核或線程的最小數(shù)據(jù)地址;并且來(lái)自第一處理器的最小數(shù) 據(jù)地址小于來(lái)自第二處理器的最大數(shù)據(jù)地址(步驟608的"是"分支), 則第一精確位置范圍與第二精確位置范圍重疊,并且系統(tǒng)標(biāo)識(shí)609推 測(cè)未命中。否則(步驟608的"否"分支),系統(tǒng)返回步驟604。系統(tǒng) 以這種方式將處理器、處理器核或線程的每個(gè)條目與在所有其它處理 器、處理器核或線程中的每個(gè)條目相比較。如果標(biāo)識(shí)了推測(cè)未命中,則系統(tǒng)恢復(fù)推測(cè)性寫指令已訪問(wèn) 的位置的存儲(chǔ)器內(nèi)容。圖7示出了用于使用圖4的數(shù)據(jù)結(jié)構(gòu)和反向跟 蹤堆棧回滾操作的示例過(guò)程700。特別地,圖7示出了用于恢復(fù)單個(gè)位 置的存儲(chǔ)器內(nèi)容的示例過(guò)程。系統(tǒng)可以使用過(guò)程700來(lái)恢復(fù)推測(cè)性寫 指令已訪問(wèn)的所有位置的存儲(chǔ)器內(nèi)容。在一些實(shí)現(xiàn)中,每次將過(guò)程700 應(yīng)用于一個(gè)可尋址單位(例如,字節(jié))。如果在寫日志中的值的寬度 大于可尋址單位,則對(duì)在日志條目中的每個(gè)可尋址單位應(yīng)用過(guò)程700 (例如,每次一個(gè)單位)。系統(tǒng)確定向存儲(chǔ)器中的位置寫入最終值的處理器、處理器 核或線程。系統(tǒng)存儲(chǔ)位置的值和位置的地址。例如,系統(tǒng)可以將位置 的值存儲(chǔ)702在"實(shí)際(Actual)"寄存器中并將位置的地址(例如,當(dāng)前地址)存儲(chǔ)在"當(dāng)前地址(Current address)"寄存器中。將在Actual 寄存器中的值與在所有寫日志中的所有寫日志條目相比較730。如果當(dāng) 前地址被包含在寫日志條目中,則與當(dāng)前地址相對(duì)應(yīng)的新值等于位置 的值(例如,在Actual寄存器中的值),并且新值不等于相應(yīng)的舊值, 則系統(tǒng)確定(步驟740的"是"分支)匹配條目。系統(tǒng)將匹配條目存 儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中以便簿記(book-keep)該匹配目錄(例如,圖8的反 向跟蹤堆棧800)。參照?qǐng)D8,反向跟蹤堆棧800可以包括許多條目。在一些 實(shí)現(xiàn)中,條目的數(shù)目可以小于或等于在系統(tǒng)中的所有寫日志中的條目 的總數(shù)目。反向跟蹤堆??梢员获罱拥交ミB裝置(例如,圖1的互連 裝置140),并且可以由系統(tǒng)中的一個(gè)或多個(gè)處理器、處理器核或線程 來(lái)訪問(wèn)。而且,在反向跟蹤堆棧800中的每個(gè)條目可以包括當(dāng)前"Actual" 字段810和"路徑(Path)"字段820。在Path字段820中的值可以標(biāo) 識(shí)特定處理器、處理器核或線程。在反向跟蹤堆棧中的每個(gè)條目還可 以包括等于處理器、處理器核或線程的數(shù)目的字段830的數(shù)目。每個(gè) 字段可以存儲(chǔ)標(biāo)識(shí)與匹配條目的處理器、處理器核或線程相對(duì)應(yīng)的寫 日志條目的條目號(hào)碼。在一些實(shí)現(xiàn)中,反向跟蹤堆??梢允侵羔樈Y(jié)構(gòu)。 指針840跟蹤在反向跟蹤堆棧800中的下一個(gè)空閑條目。返回圖7,匹配條目被存儲(chǔ)780在反向跟蹤堆棧(例如, 反向跟蹤堆棧800)中。在Actual寄存器中的值被存儲(chǔ)在Actual字段 中,并且所有匹配條目的寫日志條目號(hào)碼被存儲(chǔ)在匹配條目的處理器、 處理器核或線程的相應(yīng)字段中。特定處理器、處理器核或線程的標(biāo)識(shí)符(例如, 一號(hào)處理 器)被存儲(chǔ)790在Path字段中。特定處理器、處理器核或線程的匹配 寫日志條目可以被稱為當(dāng)前條目。在一些實(shí)現(xiàn)中,標(biāo)記了 790在當(dāng)前 條目中的當(dāng)前地址的校驗(yàn)位。
系統(tǒng)確定下一個(gè)值。下一個(gè)值是存儲(chǔ)在寫日志中的當(dāng)前條 目中的舊值(例如,Actual.old)。下一個(gè)值被存儲(chǔ)795在Actual寄存 器中。如果存在剩余的匹配條目(例如,系統(tǒng)確定另一匹配條目;步 驟740的"是"分支),則系統(tǒng)返回步驟780。如果不存在另一匹配條目(步驟740的"否"分支),則 系統(tǒng)確定是否已檢查了所有條目。特別地,系統(tǒng)檢査是否包含當(dāng)前地 址的所有寫日志條目具有校驗(yàn)位組,或者當(dāng)前地址的舊值和新值是否 相等。如果已檢查了所有條目(步驟750的"是"分支),則系統(tǒng)恢 復(fù)760存儲(chǔ)器值并終止710。特別地,系統(tǒng)將Actual值存儲(chǔ)在該位置中, 從而恢復(fù)該位置的原始值。如果不是所有條目已被檢査(例如,確定包含當(dāng)前地址的 寫日志條目不具有校驗(yàn)位組,并且當(dāng)前地址的舊值和新值不相等;步 驟750的"否"分支),則系統(tǒng)返回或反向跟蹤770至包括多個(gè)匹配 條目的反向跟蹤堆棧中的先前條目(例如,處理器、處理器核或線程 字段中的一個(gè)以上是非空的)。指針(例如,圖8的指針840)指向所 使用的最后的條目。系統(tǒng)清除與存儲(chǔ)在以下各項(xiàng)中的條目中的當(dāng)前地 址相關(guān)聯(lián)的校驗(yàn)位Path字段中的處理器號(hào)碼的處理器、處理器核或 線程號(hào)字段處理器、處理器核或線程號(hào)碼字段;以及Path字段。如果 在條目中存在另一非空處理器號(hào)碼字段,則此字段中的條目變成當(dāng)前 條目。標(biāo)記了 7卯在當(dāng)前條目中的校驗(yàn)位,并將相應(yīng)的處理器、處理 器核、或線程號(hào)碼存儲(chǔ)在Path字段中。如果在處理器、處理器核或線 程號(hào)碼字段中不存在更多的匹配條目,則系統(tǒng)返回在反向跟蹤堆棧中 的先前條目(例如,系統(tǒng)返回步驟770)。
用于推測(cè)性吞吐量計(jì)算的示例性軟件實(shí)現(xiàn)可以在軟件中實(shí)現(xiàn)用于推測(cè)性吞吐量計(jì)算的過(guò)程。例如, 可以將訪問(wèn)矩陣表實(shí)現(xiàn)為在可以由常規(guī)性讀和寫指令訪問(wèn)的虛擬存儲(chǔ) 器中的數(shù)據(jù)結(jié)構(gòu)。可以使用訪問(wèn)在虛擬存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu)(例如,全局變量和指針結(jié)構(gòu))的常規(guī)性計(jì)算機(jī)指令序列來(lái)仿真推測(cè)性讀和寫 指令。圖9圖示了用于推測(cè)性吞吐量計(jì)算的過(guò)程的示例軟件實(shí)現(xiàn) 的虛擬存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu)900。例如,圖9圖示了具有指針變量所指 向的行的矩陣。對(duì)于每個(gè)指針變量(例如,PTR1、 PTR2、 ... PTRM; 其中M〉0),在編譯計(jì)算機(jī)程序(例如,以C編程語(yǔ)言編寫的計(jì)算機(jī) 程序)時(shí),可以在數(shù)據(jù)結(jié)構(gòu)900中分配行??梢允姑總€(gè)指針與等于程 序段數(shù)目(例如,Pl、 P2、 ... PN;其中N〉0)的元素?cái)?shù)目相關(guān)聯(lián)。 還可以使"SUM"元素與每個(gè)指針相關(guān)聯(lián)。每個(gè)元素可以包括但不限于最大數(shù)據(jù)地址(例如,MAX 實(shí)體)、最小數(shù)據(jù)地址(例如,MIN實(shí)體)以及指示符(例如,W實(shí) 體)。MAX實(shí)體可以存儲(chǔ)由相應(yīng)程序段訪問(wèn)的最大數(shù)據(jù)地址。MIN實(shí) 體可以存儲(chǔ)由相應(yīng)程序段訪問(wèn)的最小數(shù)據(jù)地址。W實(shí)體可以標(biāo)識(shí)在最 大數(shù)據(jù)地址與最小數(shù)據(jù)地址之間的位置是否已被相應(yīng)程序段修改(例 如,被寫指令訪問(wèn))。軟件實(shí)現(xiàn)還可以在虛擬存儲(chǔ)器中生成寫日志和寫日志指 針,它們類似于圖4的寫日志420和寫日志指針430??梢允褂美缛?局變量或指針結(jié)構(gòu)來(lái)生成寫日志。圖10示出了用于生成圖9的結(jié)構(gòu)的示例過(guò)程1000。為方 便起見(jiàn),將針對(duì)執(zhí)行過(guò)程1000的系統(tǒng)來(lái)描述過(guò)程1000。在軟件實(shí)現(xiàn)中,可以使用常規(guī)性讀或?qū)懼噶?例如,加載 或存儲(chǔ)指令)來(lái)仿真推測(cè)性讀或?qū)懼噶?。例如,推測(cè)性讀或?qū)懼噶羁?以是利用普通指令序列(例如,校驗(yàn)碼)擴(kuò)增的常規(guī)性讀或?qū)懼噶睢?校驗(yàn)碼可以用于確定1020讀或?qū)懼噶钍欠袷峭茰y(cè)性的。如果讀或?qū)懼?令不是推測(cè)性的(步驟1020的"否"分支),則照常執(zhí)行讀或?qū)懼噶?例如,作為常規(guī)性讀或?qū)懼噶顏?lái)執(zhí)行),并且系統(tǒng)執(zhí)行IOIO下一個(gè) 指令。如果讀或?qū)懼噶钍峭茰y(cè)性的(步驟1020的"是"分支), 則系統(tǒng)將推測(cè)性讀或?qū)懼噶畹挠行У刂?例如,圖IO的ADDR)與最 大數(shù)據(jù)地址和最小數(shù)據(jù)地址相比較。例如,系統(tǒng)使用指針的地址和程 序段號(hào)碼從數(shù)據(jù)結(jié)構(gòu)檢索1030 MAX、 MIN以及W實(shí)體。如果有效地 址大于最大數(shù)據(jù)地址(步驟1040的"是"分支),則系統(tǒng)將有效地址 存儲(chǔ)1050為最大數(shù)據(jù)地址。否則(步驟1040的"否"分支),如果 有效地址小于最小數(shù)據(jù)地址(步驟1055的"是"分支),則系統(tǒng)將有 效地址存儲(chǔ)1060為最小數(shù)據(jù)地址。系統(tǒng)確定推測(cè)性讀或?qū)懼噶钍欠袷峭茰y(cè)性寫指令。如果推 測(cè)性讀或?qū)懼噶畈皇峭茰y(cè)性寫指令(步驟1070的"否"分支),則系 統(tǒng)執(zhí)行1010下一個(gè)指令。如果推測(cè)性讀或?qū)懼噶钍峭茰y(cè)性寫指令(步 驟1070的"是"分支),則系統(tǒng)設(shè)置1080指示符(例如,"W"位) 以標(biāo)識(shí)推測(cè)性寫指令。另外,系統(tǒng)將寫或與寫指令相關(guān)聯(lián)的有效地址 和數(shù)據(jù)存儲(chǔ)1090在寫日志(例如,類似于寫日志420的寫日志,但在 虛擬存儲(chǔ)器中實(shí)現(xiàn))中。特別地,可以將與寫日志相關(guān)聯(lián)的有效地址 和數(shù)據(jù)存儲(chǔ)在由寫日志指針指向的寫日志條目中,并且寫日志指針遞 增到指向下一個(gè)空閑寫日志條目。然后,系統(tǒng)返回步驟1010。參照?qǐng)D11,系統(tǒng)將第一精確位置范圍與第二精確位置范圍 相比較以確定由程序訪問(wèn)的位置范圍是否與由其它程序段訪問(wèn)的位置 范圍重疊。系統(tǒng)選擇1100第一指針(例如,在圖9的矩陣中,由PTR1 指向的第一指針行)。系統(tǒng)選擇1110第一指針的第一元素,并檢索與 第一元素相對(duì)應(yīng)的MAX、 MIN和W實(shí)體。然后,系統(tǒng)選擇1115第一 指針的下一元素,并檢索與該下一元素相對(duì)應(yīng)的MAX、 MIN和W實(shí) 體。如果第一指針或下一元素不存在,則過(guò)程終止。系統(tǒng)將來(lái)自第一 元素的最大數(shù)據(jù)地址(例如,MAX實(shí)體)和最小數(shù)據(jù)地址(例如,MIN實(shí)體)與來(lái)自下一元素的最大數(shù)據(jù)地址(例如,MAX實(shí)體)和最小數(shù) 據(jù)地址(例如,MIN實(shí)體)相比較。系統(tǒng)確定是否存在有害重疊。特別地,如果設(shè)置了在第一 元素中的指示符,或者設(shè)置了在下一元素中的指示符,則推測(cè)性寫指 令已分別訪問(wèn)與第一程序段相對(duì)應(yīng)的第一精確位置范圍或與第二程序 段相對(duì)應(yīng)的第二精確位置范圍。如果來(lái)自第一元素的最大數(shù)據(jù)地址小 于來(lái)自下一元素的最大數(shù)據(jù)地址,并且來(lái)自第一元素的最大數(shù)據(jù)地址 大于來(lái)自下一元素的最小數(shù)據(jù)地址,則第一精確位置范圍與第二精確 位置范圍重疊。系統(tǒng)確定(步驟1120的"是"分支)有害重疊,并且 系統(tǒng)標(biāo)識(shí)1140推測(cè)未命中。如果來(lái)自第一元素的最小數(shù)據(jù)地址大于來(lái) 自下一元素的最小數(shù)據(jù)地址,并且來(lái)自第一元素的最小數(shù)據(jù)地址小于 來(lái)自下一元素的最大數(shù)據(jù)地址,則第一精確位置范圍與第二精確位置 范圍重疊。系統(tǒng)確定有害重疊(步驟1120的"是"分支),并且系統(tǒng) 標(biāo)識(shí)1140推測(cè)未命中。如果系統(tǒng)未確定有害重疊(步驟1120的"否"分支),則 系統(tǒng)確定是否存在指針的更多條目。系統(tǒng)以這種方式將與指針相關(guān)聯(lián) 的每個(gè)元素和與該指針相關(guān)聯(lián)的所有其它元素相比較。例如,假設(shè)當(dāng) 前指針的行包括元素A、 B和C。系統(tǒng)成對(duì)地比較A與B、 A與C以 及B與C。如果存在指針的更多條目(步驟1130的"是"分支),則 系統(tǒng)返回步驟1115。如果不存在指針的更多條目(步驟1130的"否"分支), 則系統(tǒng)確定并存儲(chǔ)1135該行的SUM元素中的值(例如,MAX實(shí)體、 MIN實(shí)體和W實(shí)體)。特別地,系統(tǒng)確定在該行中的所有MAX實(shí)體 的最大值(例如,最高最大數(shù)據(jù)地址)和所有MIN實(shí)體的最小值(例 如,最低最小數(shù)據(jù)地址)。例如,假設(shè)行包括元素A、 B和C。所確定 的最大值是A、 B和C的最高M(jìn)AX值,并且所確定的最小值將是A、 B和C的最低MIN值。所確定的最大和最小值被存儲(chǔ)在該行的SUM元素的MAX和MIN實(shí)體中。系統(tǒng)按照在該行中的所有元素的W實(shí)體的邏輯OR (與) 運(yùn)算來(lái)計(jì)算W實(shí)體。例如,假設(shè)行包括元素A、 B和C。使用以下表 達(dá)式來(lái)計(jì)算SUM元素的W實(shí)體
W(A)ORW(B)ORW(C),其中
W(x)表示元素x的W實(shí)體。如果有更多指針要比較(步驟1105的"是"分支),則 系統(tǒng)返回步驟1110。如果沒(méi)有更多的指針要比較(步驟1105的"否" 分支),則系統(tǒng)比較SUM元素。特別地,系統(tǒng)選擇1145第一 SUM元 素,并檢索與第一 SUM元素相對(duì)應(yīng)的MAX、 MIN和W實(shí)體。系統(tǒng)選 擇1150下一 SUM元素,并檢索與下一 SUM元素相對(duì)應(yīng)的MAX、MIN 和W實(shí)體。系統(tǒng)使用這些實(shí)體來(lái)將第一精確位置范圍與第二精確位置 范圍相比較,以確定由處理器、處理器核或線程訪問(wèn)的位置范圍是否 與由其它處理器、處理器核或線程訪問(wèn)的位置范圍重疊。系統(tǒng)使用與先前參照?qǐng)D1120和1130描述的過(guò)程類似的過(guò) 程(例如,步驟1155和1165)來(lái)確定推測(cè)未命中。如果不存在SUM 的更多條目(步驟1065的"否"分支),則系統(tǒng)停止。特別地,如果 系統(tǒng)沒(méi)有標(biāo)識(shí)有害重疊(步驟1155的"否"分支),則系統(tǒng)確定系統(tǒng) 是否已比較了所有SUM元素。如果系統(tǒng)已比較了所有SUM元素(步 驟1165的"是"分支),則系統(tǒng)停止1170。否則(步驟1165的"否" 分支),系統(tǒng)返回步驟1150。以類似于先前所述的行元素比較的方式 來(lái)比較SUM元素。如果標(biāo)識(shí)了推測(cè)未命中,則系統(tǒng)以類似于上文參照?qǐng)D7 描述的方式來(lái)恢復(fù)推測(cè)性寫指令已訪問(wèn)的位置的存儲(chǔ)器內(nèi)容。然而, 在一些實(shí)現(xiàn)中,系統(tǒng)使用計(jì)算機(jī)指令而不是硬件中的數(shù)據(jù)結(jié)構(gòu)。例如, 可以使用指針結(jié)構(gòu)來(lái)實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)、寫日志或?qū)懭罩局羔?。系統(tǒng)使用寫日志或反向跟蹤堆棧來(lái)恢復(fù)推測(cè)性寫指令已訪問(wèn)的位置的存儲(chǔ)器內(nèi) 容。
減少推測(cè)未命中先前所述的用于推測(cè)性吞吐量計(jì)算的過(guò)程的示例硬件和 軟件實(shí)現(xiàn)圖示了標(biāo)識(shí)推測(cè)未命中的過(guò)程。在一些實(shí)現(xiàn)中,還可以在用 于推測(cè)性吞吐量計(jì)算的過(guò)程中減少推測(cè)未命中。圖12圖示了用于減少推測(cè)未命中的示例過(guò)程1200。為方 便起見(jiàn),將針對(duì)執(zhí)行過(guò)程1200的系統(tǒng)來(lái)描述過(guò)程1200。系統(tǒng)生成用于 程序減少推測(cè)未命中的數(shù)目的對(duì)程序段的調(diào)度。特別地,系統(tǒng)導(dǎo)出1210 數(shù)據(jù)依賴圖。系統(tǒng)根據(jù)該數(shù)據(jù)依賴圖來(lái)確定1220程序段的執(zhí)行順序。 系統(tǒng)根據(jù)該執(zhí)行順序來(lái)執(zhí)行1230程序段。系統(tǒng)對(duì)程序段執(zhí)行進(jìn)行比較 1240以標(biāo)識(shí)依賴性。圖13圖示了示例性數(shù)據(jù)依賴圖1300??梢詮挠?jì)算機(jī)程序 導(dǎo)出該數(shù)據(jù)依賴圖。例如,假設(shè)計(jì)算機(jī)程序包括以下代碼 while condition do for i=l to 4 do for j=l to 4 do begin
A[i,j] := A[i-l,j]+A同]+A[i,j-l]+A[i,j+l]; end;在循環(huán)的每次迭代中,具有索引變量i和j的矩陣元素(例 如,A[i,j])是四個(gè)相鄰矩陣元素的總和(例如,A[i-l,j]+A[i+l,j]+A[i,j-1]+A[ij+1])。如圖13所示,如果以執(zhí)行迭代的順序來(lái)枚舉迭代(例 如,由狀態(tài)1來(lái)表示第一迭代,并由狀態(tài)2來(lái)表示第二迭代),則導(dǎo) 出了在迭代之間產(chǎn)生的依賴性。例如,在第一枚舉中(例如,由狀態(tài)l 表示),〖=1且〗=1,因此導(dǎo)出A[l,l]。作為另一示例,在第二枚舉中(例如,由狀態(tài)2表示),1=1且=2,因此導(dǎo)出A[1,2]。作為又 一示例,在第五枚舉中,(例如,由狀態(tài)5表示),i:2且j-l,因 此導(dǎo)出A[2,1]。第五枚舉導(dǎo)出A[2,1]=A[1,1]+A[3,1]+A[2,0]+A[2,2]。 第五枚舉不依賴于第二枚舉(A[l,2p ,但是第五枚舉依賴于第一枚舉 (A[l,l])。在狀態(tài)圖中的箭頭圖示了依賴性??梢允褂妹總€(gè)迭代來(lái)形成要并行地執(zhí)行的程序段。由于在 幾乎所有的連續(xù)迭代之間存在依賴性(例如,4依賴于3、 2和1), 所以可能難以顯現(xiàn)(uncover)并行性。數(shù)據(jù)依賴圖允許系統(tǒng)在例如循 環(huán)中顯現(xiàn)并行性。例如,可以并行地執(zhí)行具有枚舉順序4、 7、 10和13 的程序段。為了導(dǎo)出數(shù)據(jù)依賴圖,系統(tǒng)利用對(duì)程序段定界的觸發(fā)點(diǎn)擴(kuò) 增程序。在一些實(shí)現(xiàn)中,觸發(fā)點(diǎn)遞增枚舉程序段的枚舉順序的變量。 例如,如在以下示例性代碼中一樣,可以利用觸發(fā)點(diǎn)(例如"trigger;") 擴(kuò)增程序循環(huán)(以上圖示的代碼)
while condition do
for i=l to 4 do
for j=l to 4 do
begin
trigger;
A回=A[i-l,j]+A[i+l,j]+A[i,j-l]+A[i,j+l]; end;程序循環(huán)中的每次迭代包括對(duì)觸發(fā)點(diǎn)的調(diào)用。觸發(fā)點(diǎn)可以
遞增枚舉程序段的枚舉順序的變量。系統(tǒng)還可以利用潛在地造成依賴 性的讀和寫指令的標(biāo)記擴(kuò)增程序。該標(biāo)記將指令標(biāo)識(shí)為推測(cè)性指令。如果順序地執(zhí)行程序,則每當(dāng)執(zhí)行推測(cè)性讀或?qū)懼噶顣r(shí),
生成陷阱。軟件例程(例如,陷阱處理程序)將推測(cè)性指令的地址和類型(例如,讀或?qū)?記錄在文件中。程序段的枚舉順序也被記錄在
文件中。文件的后處理用于導(dǎo)出1210數(shù)據(jù)依賴圖,并且系統(tǒng)根據(jù)該數(shù) 據(jù)依賴圖來(lái)確定1220程序段的執(zhí)行順序。系統(tǒng)根據(jù)該執(zhí)行順序來(lái)執(zhí)行1230程序段。特別地,系統(tǒng) 可以使用編程構(gòu)造來(lái)并行地執(zhí)行程序段。例如,可以對(duì)構(gòu)造"parallel—for (i,j) = (xl,yl;X2,y2;...;xn,yn)"進(jìn)行解釋,使得推測(cè)性地并行執(zhí)行具有 索引變量(xl,yl)、 (x2,y2)、…、和(xn,yn)的程序段。作為進(jìn)一步的示例, 使用該構(gòu)造的示例程序循環(huán)包括代碼
while condition do
begin
parallel—for (i,j) =(1,1)
A[i,j〗=A[i-lJ]+A[i+l,j]+A[i,j-l〗+A[i,j+l〗;
parallel—for (i,j) =(2,1; 1,2)
A[i,j] := A[i-l,j]+A[i+l,j]+A[i,j-l]+A[i,j+l];
parallel—for (i,j) =(3,1 ;2,2; 1,3)
A[i,j] := A[i-l,j]+A[i+l,j]+A[i,j-l]+A[i,j+l];
parallel—for (i,j) =(4,1;3,2;2,3;1,4)
A[i,j] := A[i-l,j]+A[i+l,j]+A[i,j-l]+A[i,j+l];
parallel—for (i,j) =(4,2;3,3;2,4)
A[i,j] := A[i-l,j]+A[i+l,j]+A[i,j誦l]+A[i,j+l];
parallel—for (i,j) =(4,3;3,4)
A[i,j] := A[i-l,j]+A[i+l,j]+A[i,j-l]+A[i,j+l];
parallel—for (i,j) =(4,4)
A[i,j] := A[i-l,j]+A[i+l j]+A[i,j-l]+A[i,j+l];
commit;
endj該程序循環(huán)包括七個(gè)"parallel—for"構(gòu)造。系統(tǒng)使用該構(gòu) 造根據(jù)執(zhí)行順序來(lái)執(zhí)行1230程序段。例如,第二 "parallel—for"構(gòu)造允許系統(tǒng)并行地執(zhí)行一組程序段(2,1)和(1,2)。替代地,順序地執(zhí)
行連續(xù)的"parallel—for"構(gòu)造。例如,在系統(tǒng)并行地執(zhí)行程序段(2,1) 和(l,2)之后,第三"paralldfor"構(gòu)造允許系統(tǒng)并行地執(zhí)行程序段(3,1)、 (2,2)和(1,3)。系統(tǒng)對(duì)程序段執(zhí)行進(jìn)行比較1240以標(biāo)識(shí)依賴性??赡茈y以確定在具有較高枚舉順序的較后"parallel—for" 構(gòu)造中的程序段是否造成與在具有較低枚舉順序的較早"parallel_f0r" 構(gòu)造中的程序段的依賴性。在一些實(shí)現(xiàn)中,在已執(zhí)行所有程序段之后 (例如,在程序中的"提交"點(diǎn)),系統(tǒng)對(duì)程序段執(zhí)行進(jìn)行比較1240 以標(biāo)識(shí)依賴性。
程序解譯和推測(cè)性執(zhí)行返回圖2,系統(tǒng)分析210程序的程序段的數(shù)據(jù)依賴性,并 且系統(tǒng)剖析220程序。特別地,系統(tǒng)收集用于選擇推測(cè)性方法(例如, 用于推測(cè)性吞吐量計(jì)算的過(guò)程)的統(tǒng)計(jì)信息。在一些實(shí)現(xiàn)中,所述統(tǒng) 計(jì)信息包括在程序段i中執(zhí)行的指令的數(shù)目(Ni),其中i是大于零的 整數(shù);由指令使用的循環(huán)的平均數(shù)(CPIi);在程序段i中的推測(cè)性讀 指令的數(shù)目(Ri);以及在程序段i中的推測(cè)性寫指令的數(shù)目(Wi)。系統(tǒng)根據(jù)推測(cè)性執(zhí)行來(lái)預(yù)測(cè)加速增益。特別地,系統(tǒng)確定 程序的順序執(zhí)行的執(zhí)行時(shí)間(Tsequential)。系統(tǒng)通過(guò)應(yīng)用分析模型來(lái)導(dǎo) 出加速增益。例如,分析模型可以包括由以下等式表示的執(zhí)行時(shí)間
Texec(K) = Max[Tsegment—start(K) + N「CPIi + Ri'Rc。st(K) + Wi'We。st(K)
+ Proll-back'Roll-backc。st(K) + (1 - Proll-back) 'CC0St(K)],其中
K標(biāo)識(shí)多種推測(cè)性方法中的一種;Max是最大值函數(shù);Tsegment-Start
對(duì)發(fā)起推測(cè)性線程的啟動(dòng)成本進(jìn)行建模;Re。st對(duì)推測(cè)性讀指令的成本進(jìn) 行建模;W^t對(duì)推測(cè)性寫指令的成本進(jìn)行建模;Pn^back是推測(cè)未命中 的概率;R0ll-back^t對(duì)回滾的成本進(jìn)行建模;并且且C^t對(duì)提交的成本進(jìn)行建模。在最大值函數(shù)(Max)內(nèi)部的表達(dá)式是程序段i的估計(jì)執(zhí) 行時(shí)間。最大值函數(shù)確定推測(cè)性方法K的最慢程序段的執(zhí)行時(shí)間。因 此,分析模型包括多種推測(cè)性方法的執(zhí)行時(shí)間,并且所述多種推測(cè)性 方法的執(zhí)行時(shí)間等于最慢程序段的執(zhí)行時(shí)間。應(yīng)用來(lái)自分析模型的
Texec(K),系統(tǒng)可以使用以下等式來(lái)預(yù)測(cè)加速增益
Speedup(K)= Tsequential / Texec(K).然后,系統(tǒng)選擇230多種推測(cè)性方法中的一種或多種(例 如,參照?qǐng)D3-13所描述的過(guò)程)以用于使用每種推測(cè)性方法的加速增 益進(jìn)行解譯。例如,系統(tǒng)選擇具有最高加速增益的推測(cè)性方法。在一 些實(shí)現(xiàn)中,如果順序執(zhí)行具有比推測(cè)性方法更低的執(zhí)行時(shí)間,則系統(tǒng) 選擇順序執(zhí)行(例如對(duì)于所有K, Tsequential<Texee(K))。在一些實(shí)現(xiàn)中,系統(tǒng)選擇推測(cè)性方法的組合。例如,系統(tǒng) 可以使用所述多種推測(cè)性方法中的一種或多種推測(cè)性方法中的部分的 組合。作為另一示例,系統(tǒng)可以使用所述多種推測(cè)性方法中順序地執(zhí) 行的一種或多種推測(cè)性方法的組合。作為又一示例,系統(tǒng)可以使用所 述多種推測(cè)性方法中并行地執(zhí)行的一種或多種推測(cè)性方法的組合。在一些實(shí)現(xiàn)中,可以將過(guò)程200包括在可以與編譯器集成 的模塊中。在一些實(shí)現(xiàn)中,可以將過(guò)程200的一個(gè)或多個(gè)步驟的組合 (例如步驟210、 220和230的組合)包括在模塊中。在一些實(shí)現(xiàn)中, 可以將模塊與編譯器集成。例如,第一編譯器可以包括可以分析程序 的數(shù)據(jù)依賴性的模塊(例如,步驟210)。第二編譯器可以包括可以執(zhí) 行過(guò)程200的其它步驟(例如,步驟220和230)的模塊。在一些實(shí)現(xiàn) 中, 一種裝置(例如,多處理器計(jì)算系統(tǒng)ioo、多核計(jì)算系統(tǒng)或多線程 計(jì)算系統(tǒng))可以執(zhí)行推測(cè)性執(zhí)行(例如,根據(jù)參照?qǐng)D3-13描述的一些 或全部過(guò)程)。在一些實(shí)現(xiàn)中,包括該裝置和編譯器的系統(tǒng)可以執(zhí)行推測(cè)性執(zhí)行(例如,根據(jù)參照?qǐng)D3-13描述的一些或全部方法)。在本說(shuō)明書中描述的主題的實(shí)施例和功能操作可以在數(shù)
字電子電路中、或在包括在本說(shuō)明書中公開(kāi)的結(jié)構(gòu)及其結(jié)構(gòu)等同物的 計(jì)算機(jī)軟件、固件、硬件中、或它們中的一個(gè)或多個(gè)的組合中實(shí)現(xiàn)。 在本說(shuō)明書中描述的主題的實(shí)施例可以實(shí)現(xiàn)為一個(gè)或多個(gè)計(jì)算機(jī)程序 產(chǎn)品,例如,在有形程序載體上編碼以便由數(shù)據(jù)處理裝置來(lái)執(zhí)行或控 制數(shù)據(jù)處理裝置的操作的計(jì)算機(jī)程序指令的一個(gè)或多個(gè)模塊。所述有 形程序載體可以是傳播的信號(hào)或計(jì)算機(jī)可讀介質(zhì)。傳播的信號(hào)是人工 生成的信號(hào),例如,機(jī)器生成的電、光或電磁信號(hào),人工生成的信號(hào) 被生成以將信息編碼以便傳輸?shù)竭m當(dāng)?shù)慕邮諜C(jī)裝置以供計(jì)算機(jī)執(zhí)行。 計(jì)算機(jī)可讀介質(zhì)可以是機(jī)器可讀存儲(chǔ)設(shè)備、機(jī)器可讀存儲(chǔ)基底、存儲(chǔ)
設(shè)備、實(shí)現(xiàn)機(jī)器可讀傳播信號(hào)的物質(zhì)組成、或它們中的一個(gè)或多個(gè)的組合。術(shù)語(yǔ)"數(shù)據(jù)處理裝置"涵蓋用于處理數(shù)據(jù)的所有裝置、設(shè) 備以及機(jī)器,包括例如可編程處理器、計(jì)算機(jī)、或多處理器或計(jì)算機(jī)。 除硬件之外,裝置還可以包括為討論中的計(jì)算機(jī)程序創(chuàng)建執(zhí)行環(huán)境的 代碼,例如,構(gòu)成處理器固件、協(xié)議棧、數(shù)據(jù)庫(kù)管理系統(tǒng)、操作系統(tǒng)、 或它們中的一個(gè)或多個(gè)的組合的代碼??梢砸园ň幾g或解釋語(yǔ)言、或者聲明性(declarative) 或過(guò)程性(procedural)語(yǔ)言在內(nèi)的任何形式的編程語(yǔ)言來(lái)編寫計(jì)算機(jī) 程序(也稱為程序、軟件、軟件應(yīng)用程序、腳本或代碼),并可以以 任何形式對(duì)它進(jìn)行部署,包括部署為獨(dú)立程序或模塊、組件、子例程、 或適用于計(jì)算環(huán)境的其它單元。計(jì)算機(jī)程序不一定對(duì)應(yīng)于文件系統(tǒng)中 的文件??梢詫⒊绦虼鎯?chǔ)在保持其它程序或數(shù)據(jù)的文件的一部分中(例 如,存儲(chǔ)在標(biāo)記語(yǔ)言文檔中的一個(gè)或多個(gè)腳本)、專用于討論中的程 序的單個(gè)文件中、或多個(gè)整理文件中(例如,存儲(chǔ)一個(gè)或多個(gè)模塊、 子程序、或部分代碼的文件)。可以將計(jì)算機(jī)程序部署成在一個(gè)計(jì)算機(jī)上或者在位于一個(gè)站點(diǎn)處或跨越多個(gè)站點(diǎn)分布并通過(guò)通信網(wǎng)絡(luò)互連 的多個(gè)計(jì)算機(jī)上執(zhí)行。在本說(shuō)明書中描述的過(guò)程和邏輯流程可以由執(zhí)行一個(gè)或 多個(gè)計(jì)算機(jī)程序以便通過(guò)操作輸入數(shù)據(jù)并生成輸出來(lái)執(zhí)行功能的一個(gè) 或多個(gè)可編程處理器來(lái)執(zhí)行。該過(guò)程和邏輯流程還可以通過(guò)專用邏輯 電路來(lái)執(zhí)行,并且還可以將裝置實(shí)現(xiàn)為專用邏輯電路,例如,F(xiàn)PGA(現(xiàn) 場(chǎng)可編程門陣列)或ASIC (專用集成電路)。適合于執(zhí)行計(jì)算機(jī)程序的處理器包括例如通用和專用微 處理器、以及任何種類的數(shù)字計(jì)算機(jī)中的任何一個(gè)或多個(gè)處理器。通 常,處理器將從只讀存儲(chǔ)器或隨機(jī)存取存儲(chǔ)器或兩者接收指令和數(shù)據(jù)。 計(jì)算機(jī)的基本元件是用于執(zhí)行指令的處理器和用于存儲(chǔ)指令和數(shù)據(jù)的
一個(gè)或多個(gè)存儲(chǔ)設(shè)備。通常,計(jì)算機(jī)還將包括或可操作地耦接成從用 于存儲(chǔ)數(shù)據(jù)的一個(gè)或多個(gè)大型存儲(chǔ)設(shè)備(例如,磁盤、磁光盤、或光 盤)接收或向其傳輸數(shù)據(jù)或兩者。然而,計(jì)算機(jī)不需要具有這樣的設(shè) 備。此外,可以將計(jì)算機(jī)嵌入另一設(shè)備中,例如,移動(dòng)電話、個(gè)人數(shù) 字助理(PDA)、移動(dòng)音頻或視頻播放器、游戲機(jī)、全球定位系統(tǒng)(GPS) 接收機(jī),僅舉幾個(gè)例子。適合于存儲(chǔ)計(jì)算機(jī)程序指令和數(shù)據(jù)的計(jì)算機(jī)可讀介質(zhì)包 括所有形式的非易失性存儲(chǔ)器、介質(zhì)和存儲(chǔ)設(shè)備,包括例如半導(dǎo)體存 儲(chǔ)設(shè)備,例如,EPROM、 EEPROM以及閃速存儲(chǔ)器設(shè)備;磁盤,例如, 內(nèi)部硬盤或可移動(dòng)磁盤;磁光盤;以及CD-ROM和DVD-ROM磁盤。 處理器和存儲(chǔ)器可以用專用邏輯電路來(lái)補(bǔ)充,或并入專用邏輯電路中。為了提供與用戶的交互,可以在計(jì)算機(jī)上實(shí)現(xiàn)在本說(shuō)明書 中描述的主題的實(shí)施例,該計(jì)算機(jī)具有例如CRT(陰極射線管)或LCD (液晶顯示器)監(jiān)視器的用于向用戶顯示信息的顯示設(shè)備以及用戶可 以用以向計(jì)算機(jī)提供輸入的鍵盤和例如鼠標(biāo)或軌跡球的定位設(shè)備。也可以使用其他種類的設(shè)備來(lái)提供與用戶的交互;例如提供給用戶的反 饋可以是任何形式的感知反饋,例如視覺(jué)反饋、聽(tīng)覺(jué)反饋或觸覺(jué)反饋; 并且可以以任何形式來(lái)接收來(lái)自用戶的輸入,包括聲音、語(yǔ)音、或觸 覺(jué)輸入。雖然本說(shuō)明書包含許多特定實(shí)現(xiàn)細(xì)節(jié),但是不應(yīng)當(dāng)被解釋 為是對(duì)任何發(fā)明或可能請(qǐng)求保護(hù)的范圍的限制,而是應(yīng)當(dāng)解釋為可能 特定發(fā)明的特定實(shí)施例所特有的特征的說(shuō)明。在本說(shuō)明書中在單獨(dú)實(shí) 施例的上下文中描述的某些特征還可以在單個(gè)實(shí)施例中以組合的形式 實(shí)現(xiàn)。相反地,在單個(gè)實(shí)施例的上下文中描述的各種特征可以單獨(dú)地 在多個(gè)實(shí)施例中實(shí)現(xiàn)或者以任何適當(dāng)?shù)淖咏M合形式實(shí)現(xiàn)。此外,雖然 上文可能將特征描述為以某些組合的形式起作用,并且甚至最初也同 樣地請(qǐng)求保護(hù),但在一些情況下可以從組合中去除來(lái)自所請(qǐng)求保護(hù)的 組合的一個(gè)或多個(gè)特征,并且所請(qǐng)求保護(hù)的組合可能針對(duì)子組合或子 組合的變體。類似地,雖然在圖中以特定順序圖示了操作,但是這不應(yīng) 當(dāng)理解為要求以所示的特定順序或以順序次序來(lái)執(zhí)行這樣的操作,或 者要求執(zhí)行所有圖示的操作來(lái)實(shí)現(xiàn)期望的結(jié)果。在某些情況下,多任 務(wù)和并行處理可能是有利的。此外,在上述實(shí)施例中的各種系統(tǒng)組件 的分離不應(yīng)當(dāng)被理解為在所有實(shí)施例中要求這樣的分離,并且應(yīng)當(dāng)理 解,所描述的程序組件和系統(tǒng)通??梢栽趩蝹€(gè)軟件產(chǎn)品中集成在一起 或封裝到多個(gè)軟件產(chǎn)品中。已描述了在本說(shuō)明書中所描述的主題的特定實(shí)施例。其它 實(shí)施例在權(quán)利要求的范圍內(nèi)。例如,在權(quán)利要求中記載的動(dòng)作可以以 不同的順序來(lái)執(zhí)行并且仍然實(shí)現(xiàn)期望的結(jié)果。作為一個(gè)示例,在附圖 中圖示的過(guò)程不一定要求所示的特定順序或順序次序來(lái)實(shí)現(xiàn)期望結(jié) 果。在某些實(shí)現(xiàn)中,多任務(wù)和并行處理可能是有利的。
權(quán)利要求
1.一種方法,包括生成推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位置范圍;如果推測(cè)性寫指令已訪問(wèn)了與第一程序段相對(duì)應(yīng)的第一精確位置范圍或與第二程序段相對(duì)應(yīng)的第二精確位置范圍,則將所述第一精確位置范圍與所述第二精確位置范圍相比較;如果所述第一精確位置范圍與所述第二精確位置范圍重疊,則標(biāo)識(shí)推測(cè)未命中;以及如果標(biāo)識(shí)了推測(cè)未命中,則恢復(fù)推測(cè)性寫指令已訪問(wèn)的位置的存儲(chǔ)器內(nèi)容。
2. 根據(jù)權(quán)利要求1的方法,其中,生成推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位置范圍包括擴(kuò)展一個(gè)或多個(gè)處理器、處理器核或線程,包括 在硬件中生成數(shù)據(jù)結(jié)構(gòu)和寫日志。
3. 根據(jù)權(quán)利要求2的方法,其中,所述數(shù)據(jù)結(jié)構(gòu)可操作用于存儲(chǔ)以下至少一個(gè)最大數(shù)據(jù)地址、最小數(shù)據(jù)地址以及指示符。
4. 根據(jù)權(quán)利要求3的方法,其中,所述寫日志可操作用于存儲(chǔ)與寫指令相關(guān)聯(lián)的數(shù)據(jù)。
5. 根據(jù)權(quán)利要求4的方法,其中,所述與寫指令相關(guān)聯(lián)的數(shù)據(jù)包括舊值和新值。
6. 根據(jù)權(quán)利要求4的方法,其中,所述寫日志包括寫日志指針,所述寫日志指針可操作用于存儲(chǔ)下一個(gè)空閑寫日志條目的索引。
7. 根據(jù)權(quán)利要求6的方法,其中,生成推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位置范圍進(jìn)一步包括確定讀或?qū)懼噶钍欠袷峭茰y(cè)性的;以及如果所述讀或?qū)懼噶钍峭茰y(cè)性的,則執(zhí)行所述推測(cè)性讀或?qū)懼噶?,包括在用于相?yīng)處理器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中,定位所述推測(cè)性讀或?qū)懼噶?,包括如果所述推測(cè)性讀或?qū)懼噶畹膱?zhí)行是推測(cè)性讀或?qū)?指令的第一次執(zhí)行,則存儲(chǔ)所述推測(cè)性讀或?qū)懼噶?;將所述推測(cè)性讀或?qū)懼噶畹挠行У刂放c最大數(shù)據(jù)地址和最小數(shù)據(jù)地址相比較;如果所述有效地址大于最大數(shù)據(jù)地址,則將所述有效地址存儲(chǔ)為最大數(shù)據(jù)地址;以及 如果所述有效地址小于最小數(shù)據(jù)地址,則將所述有效地址存儲(chǔ)為最小數(shù)據(jù)地址。
8. 根據(jù)權(quán)利要求7的方法,其中,執(zhí)行所述推測(cè)性讀或?qū)懼噶钸M(jìn) 一步包括如果所述推測(cè)性讀或?qū)懼噶钍峭茰y(cè)性寫指令,則設(shè)置所述指示符以標(biāo)識(shí)推測(cè)性寫指令,以及 將與所述寫指令相關(guān)聯(lián)的有效地址和數(shù)據(jù)存儲(chǔ)在所述寫日志中。
9. 根據(jù)權(quán)利要求8的方法,其中,將與所述寫指令相關(guān)聯(lián)的有效 地址和數(shù)據(jù)存儲(chǔ)在所述寫日志中包括使用所述寫日志指針來(lái)確定用于存儲(chǔ)的寫日志條目;以及 將所述寫日志指針遞增至下一個(gè)空閑寫日志條目。
10. 根據(jù)權(quán)利要求3的方法,其中,將所述第一精確位置范圍與所述第二精確位置范圍相比較包括檢索在用于第一處理器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中的最大數(shù) 據(jù)地址和最小數(shù)據(jù)地址;檢索在用于第二處理器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中的最大數(shù) 據(jù)地址和最小數(shù)據(jù)地址;以及將來(lái)自所述第一處理器、處理器核或線程的最大數(shù)據(jù)地址和最小 數(shù)據(jù)地址與來(lái)自所述第二處理器、處理器核或線程的最大數(shù)據(jù)地址和 最小數(shù)據(jù)地址相比較。
11. 根據(jù)權(quán)利要求3的方法,其中,如果在用于與所述第一程序 段相對(duì)應(yīng)的第一處理器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中的指示符已被 設(shè)置,或者與所述第二程序段相對(duì)應(yīng)的第二處理器、處理器核或線程 的數(shù)據(jù)結(jié)構(gòu)中的指示符已被設(shè)置,則所述推測(cè)性寫指令已訪問(wèn)了與所述第一程序段相對(duì)應(yīng)的第一精 確位置范圍或與所述第二程序段相對(duì)應(yīng)的第二精確位置范圍。
12. 根據(jù)權(quán)利要求5的方法,其中,恢復(fù)推測(cè)性寫指令己訪問(wèn)的 位置的存儲(chǔ)器內(nèi)容包括確定向位置寫入最終值的處理器、處理器核或線程,包括 存儲(chǔ)所述位置的值和所述位置的地址;以及如果當(dāng)前地址被包含在所述寫日志條目中、與所述當(dāng)前地址 相對(duì)應(yīng)的新值等于所述位置的值并且所述新值不等于相應(yīng)的舊值, 則確定匹配條目,以及將所述匹配條目存儲(chǔ)在反向跟蹤堆棧中。
13. 根據(jù)權(quán)利要求12的方法,其中,恢復(fù)推測(cè)性寫指令已訪問(wèn)的位置的存儲(chǔ)器內(nèi)容進(jìn)一步包括使用所述數(shù)據(jù)結(jié)構(gòu)和所述反向跟蹤堆棧來(lái)恢復(fù)在所述位置中的舊值。
14. 根據(jù)權(quán)利要求1的方法,其中,生成推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位置范圍包括在虛擬存儲(chǔ)器中生成數(shù)據(jù)結(jié)構(gòu)和寫日志。
15. 根據(jù)權(quán)利要求14的方法,其中,所述數(shù)據(jù)結(jié)構(gòu)可操作用于存儲(chǔ)以下至少一個(gè)最大數(shù)據(jù)地址、最小數(shù)據(jù)地址以及指示符。
16. 根據(jù)權(quán)利要求15的方法,其中,所述寫日志可操作用于存儲(chǔ)與寫指令相關(guān)聯(lián)的數(shù)據(jù)。
17. 根據(jù)權(quán)利要求16的方法,其中,所述與寫指令相關(guān)聯(lián)的數(shù)據(jù) 包括舊值和新值。
18. 根據(jù)權(quán)利要求16的方法,其中,所述寫日志包括寫日志指針,所述寫日志指針可操作用于存儲(chǔ)下一個(gè)空閑寫日志 條目的索引。
19. 根據(jù)權(quán)利要求18的方法,其中,為多個(gè)處理器生成推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位置范圍進(jìn)一步包括確定讀或?qū)懼噶钍欠袷峭茰y(cè)性的;以及如果所述讀或?qū)懼噶钍峭茰y(cè)性的,則執(zhí)行擴(kuò)增的推測(cè)性讀或?qū)懼噶?,包括從所述?shù)據(jù)結(jié)構(gòu)檢索最大數(shù)據(jù)地址、最小數(shù)據(jù)地址以及指示符;將所述讀或?qū)懼噶畹挠行У刂放c最大數(shù)據(jù)地址和最小數(shù)據(jù)地址相比較;如果所述有效地址大于最大數(shù)據(jù)地址,則將所述有效地址存儲(chǔ)為最大數(shù)據(jù)地址;以及如果所述有效地址小于最小數(shù)據(jù)地址,則將所述有效地址存儲(chǔ)為最小數(shù)據(jù)地址。
20. 根據(jù)權(quán)利要求19的方法,其中,執(zhí)行擴(kuò)增的推測(cè)性讀或?qū)懼?令進(jìn)一步包括-如果所述讀或?qū)懼噶钍峭茰y(cè)性寫指令,則設(shè)置所述指示符以標(biāo)識(shí)在最大數(shù)據(jù)地址與最小數(shù)據(jù)地址之 間的位置已被推測(cè)性寫指令修改;以及將與所述寫指令相關(guān)聯(lián)的有效地址和數(shù)據(jù)存儲(chǔ)在所述寫日志中。
21. 根據(jù)權(quán)利要求20的方法,其中,將與所述寫指令相關(guān)聯(lián)的有 效地址和數(shù)據(jù)存儲(chǔ)在所述寫日志中包括使用所述寫日志指針來(lái)確定用于存儲(chǔ)的寫日志條目;以及 將所述寫日志指針遞增至下一個(gè)空閑寫日志條目。
22. 根據(jù)權(quán)利要求15的方法,其中,將所述第一精確位置范圍與 所述第二精確位置范圍相比較包括檢索在用于相應(yīng)的第一處理器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中的 最大數(shù)據(jù)地址和最小數(shù)據(jù)地址;以及將所述最大數(shù)據(jù)地址和最小數(shù)據(jù)地址與在用于相應(yīng)的第一處理 器、處理器核或線程的數(shù)據(jù)結(jié)構(gòu)中的最大數(shù)據(jù)地址和最小數(shù)據(jù)地址相 比較。
23. 根據(jù)權(quán)利要求15的方法,其中,如果在所述第一程序段的數(shù) 據(jù)結(jié)構(gòu)中的指示符己被設(shè)置,或者在所述第二程序段的數(shù)據(jù)結(jié)構(gòu)中的 指示符已被設(shè)置,則所述推測(cè)性寫指令已訪問(wèn)了在所述多個(gè)處理器中的與所述第一 程序段相對(duì)應(yīng)的第一精確位置范圍或與所述第二程序段相對(duì)應(yīng)的第二 精確位置范圍。
24. 根據(jù)權(quán)利要求17的方法,其中,恢復(fù)推測(cè)性寫指令已訪問(wèn)的位置的存儲(chǔ)器內(nèi)容包括確定向位置寫入最終值的處理器、處理器核或線程,包括 存儲(chǔ)所述位置的值和所述位置的地址;以及 如果當(dāng)前地址被包含在所述寫日志條目中、與所述當(dāng)前地址 相對(duì)應(yīng)的新值等于所述位置的值并且所述新值不等于相應(yīng)的舊值, 則確定匹配條目,以及將所述匹配條目存儲(chǔ)在反向跟蹤堆棧中。
25. 根據(jù)權(quán)利要求24的方法,其中,恢復(fù)推測(cè)性寫指令已訪問(wèn)的 位置的存儲(chǔ)器內(nèi)容進(jìn)一步包括使用所述數(shù)據(jù)結(jié)構(gòu)和所述反向跟蹤堆棧來(lái)恢復(fù)在所述位置中的舊值。
26. —種系統(tǒng),包括一個(gè)或多個(gè)處理器或處理器核;計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可讀介質(zhì)耦接到所述一個(gè)或多個(gè)處 理器或處理器核并且具有包含在所述計(jì)算機(jī)可讀介質(zhì)上面的指令,所 述指令在被所述一個(gè)或多個(gè)處理器或處理器核執(zhí)行時(shí)使得所述一個(gè)或 多個(gè)處理器或處理器核執(zhí)行以下操作生成推測(cè)性讀或?qū)懼噶钜言L問(wèn)的精確位置范圍; 如果推測(cè)性寫指令已訪問(wèn)了與第一程序段相對(duì)應(yīng)的第一精確 位置范圍或與第二程序段相對(duì)應(yīng)的第二精確位置范圍,則將所述第一精確位置范圍與所述第二精確位置范圍相比較;如果所述第一精確位置范圍與所述第二精確位置范圍重疊,則標(biāo)識(shí)推測(cè)未命中;以及 如果標(biāo)識(shí)了推測(cè)未命中,則恢復(fù)推測(cè)性寫指令已訪問(wèn)的位置 的存儲(chǔ)器內(nèi)容。
27. 根據(jù)權(quán)利要求26的系統(tǒng),其中,生成推測(cè)性讀或?qū)懼噶钜言L 問(wèn)的精確位置范圍包括擴(kuò)展一個(gè)或多個(gè)處理器、處理器核或線程,包括 在硬件中生成數(shù)據(jù)結(jié)構(gòu)和寫日志。
28. 根據(jù)權(quán)利要求26的系統(tǒng),其中,生成推測(cè)性讀或?qū)懼噶钜言L 問(wèn)的精確位置范圍包括在虛擬存儲(chǔ)器中生成數(shù)據(jù)結(jié)構(gòu)和寫日志。
29. —種方法,包括生成用于程序減少推測(cè)未命中的數(shù)目的對(duì)程序段的調(diào)度,包括 導(dǎo)出數(shù)據(jù)依賴圖;以及根據(jù)所述數(shù)據(jù)依賴圖來(lái)確定所述程序段的執(zhí)行順序。
30. 根據(jù)權(quán)利要求29的方法,其中,所述執(zhí)行順序符合順序語(yǔ)義。
31. 根據(jù)權(quán)利要求29的方法,其中,導(dǎo)出所述數(shù)據(jù)依賴圖包括-利用對(duì)程序段定界的觸發(fā)點(diǎn)擴(kuò)增程序,其中,所述觸發(fā)點(diǎn)遞增枚舉程序段的枚舉順序的變量;利用潛在地造成依賴性的讀和寫指令的標(biāo)記擴(kuò)增程序,所述標(biāo)記 將所述指令標(biāo)識(shí)為推測(cè)性的;順序地執(zhí)行所述程序段;以及如果執(zhí)行了推測(cè)性讀或?qū)懼噶?,則存儲(chǔ)地址、推測(cè)指令的類型以及所述程序段的相應(yīng)枚舉順序。
32. 根據(jù)權(quán)利要求29的方法,進(jìn)一步包括 根據(jù)所述執(zhí)行順序來(lái)執(zhí)行所述程序段;以及 對(duì)所述程序段執(zhí)行進(jìn)行比較以標(biāo)識(shí)依賴性。
33. 根據(jù)權(quán)利要求32的方法,其中,所述依賴性在已根據(jù)所述執(zhí) 行順序執(zhí)行了所有程序段之后被標(biāo)識(shí)。
34. —種系統(tǒng),包括 一個(gè)或多個(gè)處理器或處理器核;計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可讀介質(zhì)耦接到所述一個(gè)或多個(gè)處 理器或處理器核并且具有包含在所述計(jì)算機(jī)可讀介質(zhì)上面的指令,所 述指令在被所述一個(gè)或多個(gè)處理器或處理器核執(zhí)行時(shí)使得所述一個(gè)或 多個(gè)處理器或處理器核執(zhí)行以下操作生成用于程序減少推測(cè)未命中的數(shù)目的對(duì)程序段的調(diào)度,包括導(dǎo)出數(shù)據(jù)依賴圖;以及根據(jù)所述數(shù)據(jù)依賴圖來(lái)確定所述程序段的執(zhí)行順序。
35. 根據(jù)權(quán)利要求34的系統(tǒng),其中,所述執(zhí)行順序符合順序語(yǔ)義。
36. 根據(jù)權(quán)利要求34的系統(tǒng),其中,導(dǎo)出所述數(shù)據(jù)依賴圖包括-利用對(duì)程序段定界的觸發(fā)點(diǎn)擴(kuò)增程序,其中,所述觸發(fā)點(diǎn)遞增枚舉程序段的枚舉順序的變量;利用潛在地造成依賴性的讀和寫指令的標(biāo)記擴(kuò)增程序,所述標(biāo)記 將指令標(biāo)識(shí)為推測(cè)性的;順序地執(zhí)行所述程序段;以及如果執(zhí)行了推測(cè)性讀或?qū)懼噶?,則存儲(chǔ)地址、推測(cè)指令的類型以及所述程序段的相應(yīng)枚舉順序。
37. 根據(jù)權(quán)利要求34的系統(tǒng),進(jìn)一步包括使得所述一個(gè)或多個(gè)處 理器或處理器核執(zhí)行以下操作的指令-根據(jù)所述執(zhí)行順序來(lái)執(zhí)行所述程序段;以及對(duì)程序段執(zhí)行進(jìn)行比較以標(biāo)識(shí)依賴性。
38. 根據(jù)權(quán)利要求37的系統(tǒng),其中,所述依賴性在已根據(jù)所述執(zhí) 行順序執(zhí)行了所有程序段之后被標(biāo)識(shí)。
39. —種方法,包括解譯要在多個(gè)處理器、處理器核或線程上執(zhí)行的程序,包括 分析所述程序的程序段的數(shù)據(jù)依賴性; 收集包括以下中的至少一個(gè)的統(tǒng)計(jì)信息在程序段中執(zhí)行的指令的數(shù)目,由指令使用的循環(huán)的平均數(shù)目;以及 在程序段中的推測(cè)性讀和寫的數(shù)目;以及 根據(jù)推測(cè)性執(zhí)行來(lái)預(yù)測(cè)加速增益,包括確定所述程序的順序執(zhí)行的執(zhí)行時(shí)間,以及 通過(guò)應(yīng)用分析模型來(lái)導(dǎo)出所述加速增益。
40. 根據(jù)權(quán)利要求39的方法,其中,所述分析模型包括多種推測(cè) 性方法的執(zhí)行時(shí)間,并且所述多種推測(cè)性方法的執(zhí)行時(shí)間等于最慢程 序段的執(zhí)行時(shí)間。
41. 根據(jù)權(quán)利要求40的方法,其中,解譯要在多個(gè)處理器、處理 器核或線程上執(zhí)行的程序進(jìn)一步包括使用所述加速增益從所述多種推測(cè)性方法中選擇所選擇的推測(cè)性 方法。
42. 根據(jù)權(quán)利要求41的方法,進(jìn)一步包括 使用所選擇的推測(cè)性方法來(lái)執(zhí)行所述程序。
43. 根據(jù)權(quán)利要求40的方法,其中由以下等式來(lái)表示所述執(zhí)行時(shí) 間Texec(K) = Max[Tsegment.start(K) + NrCPIi + RrRcost(K) + Wi'WC0St(K) +Pr。ii- back 'Roll-back咖t(K) + (1 - Pr。ii.back) 'Cc。st(K)],其中K標(biāo)識(shí)多種推測(cè)性方法中的一種;Max是最大值函數(shù);Tsegment-start 對(duì)發(fā)起推測(cè)性線程的啟動(dòng)成本進(jìn)行建模;RcMt對(duì)推測(cè)性讀指令的成本進(jìn)行建模;WcMt對(duì)推測(cè)性寫指令的成本進(jìn)行建模;Proll -back是推測(cè)未命中的概率;Rol-back,對(duì)回滾的成本進(jìn)行建模;Cc。st對(duì)提交的成本進(jìn)行建模; Ni是在程序段i中執(zhí)行的指令的數(shù)目; CPIj是指令所使用的循環(huán)的平均數(shù)目; Ri是在程序段i中的推測(cè)性讀指令的數(shù)目;以及 Wi是在程序段i中的推測(cè)性寫指令的數(shù)目。
44. 根據(jù)權(quán)利要求43的方法,其中,由等式Speedup(K) = Tsequential/ Texee(K)來(lái)表示所述加速增益,并且Tsequential是所述程序的順序執(zhí)行的執(zhí)行時(shí)間。
45. 根據(jù)權(quán)利要求41的方法,其中,所述多種推測(cè)性方法包括包 含以下內(nèi)容的推測(cè)性方法所述多種推測(cè)性方法中的一種或多種推測(cè)性方法中的部分的組
46.根據(jù)權(quán)利要求41的方法,其中,所述多種推測(cè)性方法包括包 含以下內(nèi)容的推測(cè)性方法所述多種推測(cè)性方法中順序地執(zhí)行的一種或多種推測(cè)性方法的組
47.根據(jù)權(quán)利要求41的方法,其中,所述多種推測(cè)性方法包括包含以下內(nèi)容的推測(cè)性方法所述多種推測(cè)性方法中并行地執(zhí)行的一種或多種推測(cè)性方法的組
48. —種系統(tǒng),包括 一個(gè)或多個(gè)處理器或處理器核;計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可讀介質(zhì)耦接到所述一個(gè)或多個(gè)處 理器或處理器核并且具有包含在所述計(jì)算機(jī)可讀介質(zhì)上面的指令,所 述指令在被所述一個(gè)或多個(gè)處理器或處理器核執(zhí)行時(shí)使得所述一個(gè)或多個(gè)處理器或處理器核執(zhí)行以下操作解譯要在多個(gè)處理器、處理器核或線程上執(zhí)行的程序,包括分析所述程序的程序段的數(shù)據(jù)依賴性; 收集包括以下中的至少一個(gè)的統(tǒng)計(jì)信息在程序段中執(zhí)行的指令的數(shù)目,指令所使用的循環(huán)的平均數(shù)目;以及 在程序段中的推測(cè)性讀和寫的數(shù)目;以及根據(jù)推測(cè)性執(zhí)行來(lái)預(yù)測(cè)加速增益,包括確定所述程序的順序執(zhí)行的執(zhí)行時(shí)間,以及 通過(guò)應(yīng)用分析模型來(lái)導(dǎo)出所述加速增益。
49. 根據(jù)權(quán)利要求48的系統(tǒng),其中,所述分析模型包括多種推測(cè) 性方法的執(zhí)行時(shí)間,并且所述多種推測(cè)性方法的執(zhí)行時(shí)間等于最慢程 序段的執(zhí)行時(shí)間。
50. 根據(jù)權(quán)利要求49的系統(tǒng),其中,解譯要在多個(gè)處理器、處理 器核或線程上執(zhí)行的程序進(jìn)一步包括使用所述加速增益從所述多種推測(cè)性方法中選擇所選擇的推測(cè)性 方法。
51. 根據(jù)權(quán)利要求50的系統(tǒng),進(jìn)一步包括使用所選擇的推測(cè)性方法來(lái)執(zhí)行所述程序。
全文摘要
本發(fā)明公開(kāi)了用于推測(cè)性吞吐量計(jì)算的系統(tǒng)、方法以及裝置。推測(cè)性吞吐量計(jì)算用于并行地執(zhí)行程序段。推測(cè)性吞吐量計(jì)算還可以用于在并行地執(zhí)行程序段期間減少推測(cè)未命中的數(shù)目。推測(cè)性吞吐量計(jì)算還可以用于解譯要在多個(gè)處理器、處理器核或線程上執(zhí)行的程序。
文檔編號(hào)G06F9/46GK101611380SQ200880003160
公開(kāi)日2009年12月23日 申請(qǐng)日期2008年1月30日 優(yōu)先權(quán)日2007年1月30日
發(fā)明者亞歷山大·布斯克, 佩爾·斯坦特斯特倫, 弗雷德里克·沃格, 米卡埃爾·恩布姆 申請(qǐng)人:尼瑪實(shí)驗(yàn)室公司