專利名稱:使用編譯器的線程數(shù)據(jù)親和性優(yōu)化的制作方法
使用編譯器的線程數(shù)據(jù)親和性優(yōu)化技術(shù)領(lǐng)域本文所包含的是受到著作權(quán)保護的資料。著作權(quán)人不反對任何人 復(fù)制此專利公開,因為它出現(xiàn)在專利及商標局專利文件或記錄中,但 在其它方面仍保留所有著作權(quán)。本發(fā)明的實施例一般涉及并行處理領(lǐng)域。更具體來說,本發(fā)明的 實施例涉及多線程環(huán)境中的線程數(shù)據(jù)親和性。
背景技術(shù):
并行處理涉及同時執(zhí)行兩個或兩個以上指令線程。使用多個處理 器同時進行任務(wù)可極大地提高各種應(yīng)用程序的性能。存在若干并行處 理體系結(jié)構(gòu),包括共享存儲器多核處理器、多處理器以及連貫緩沖非統(tǒng)一內(nèi)存尋址(cc-NUMA)體系結(jié)構(gòu)。在共享存儲器多核處理器和多處 理器系統(tǒng)中,多個處理元件(例如中央處理器(CPU))由操作系統(tǒng)并行操 作,并經(jīng)由總線互連來訪問存儲器。相反,cc-NUMA多處理體系結(jié)構(gòu)具有分為近存儲體和遠存儲體的 存儲器。在共享存儲器多核處理器和多處理器系統(tǒng)中,所有處理元件 以相同速度訪問公共存儲器。在cc-NUMA中,訪問與處理元件在相 同的處理器板上的存儲器(本地存儲器)比訪問其它處理器板上的存儲 器(共享存儲器)更快,因而使用術(shù)語"非統(tǒng)一"。因此,cc-NUMA體 系結(jié)構(gòu)對于較大數(shù)量的處理元件能遠比共享存儲器多核處理器和多處 理器系統(tǒng)更好地進行縮放。"連貫緩沖NUMA"表示在本地系統(tǒng)中支 持高速緩存。在實踐方面,大多數(shù)大規(guī)模NUMA系統(tǒng)是cc-NUMA系 統(tǒng),在本說明書中交替使用NUMA和cc-NUMA。 NUMA與cc-MJMA聯(lián)。圖1是示例cc-MJMA體系結(jié)構(gòu)的框圖。圖1示出節(jié)點1-4。較大 的并行系統(tǒng)可具有更多節(jié)點,但為了簡潔起見僅示出四個。每個節(jié)點 表示為具有作為處理元件5-11示出的一個或多個處理元件(有時又稱 作"核心")。每個節(jié)點還具有表示為存儲器13-16的本地存儲器。這 只是說明;節(jié)點可具有兩個以上處理元件以及經(jīng)由總線連接到這類處 理元件的 一個以上本地存儲器。一個處理元件本地的存儲器對于另一個處理元件可能不是本地 的。例如,對于處理元件5,存儲器13是本地的并且可快速存取。但 是,對于處理元件5,存儲器15不是本地的。處理元件5可經(jīng)由連接 節(jié)點1和節(jié)點3的鏈路來訪問存儲器15;但是,這種訪問比本地存儲 器訪問具有明顯更高的等待時間。從處理元件5訪問存儲器16甚至具 有更高的等待時間,因為必須經(jīng)過兩個獨立鏈路。因此很明顯,希望在本地存儲器中具有由執(zhí)行線程所使用的數(shù)據(jù)。 這種情況的技術(shù)術(shù)語是"線程數(shù)據(jù)親和性"。在多線程系統(tǒng)中,數(shù)據(jù) 可在一個時間由一個處理元件使用,然后在另一個時間由另一個非本 地處理元件使用。線程數(shù)據(jù)親和性表示將數(shù)據(jù)移動到采用該數(shù)據(jù)來執(zhí) 行線程的處理元件本地的存儲器的問題。已經(jīng)進行了若干嘗試來解決線程數(shù)據(jù)親和性問題。 一種方式是擴 展高級編程語言,以便允許由編程人員插入數(shù)據(jù)分布指示。但是,這 種方法損害了程序模型的簡單性,并且無法及時處理不規(guī)則存儲器存 耳M^式。此外,它要求進行額外的編程。第二種方式采用由操作系統(tǒng)在后臺執(zhí)行的守護程序(demon)(又稱 作服務(wù))來進行認為適合于由操作系統(tǒng)所執(zhí)行的應(yīng)用程序的頁遷移。但 是,這種方法沒有利用頁遷移策略與程序語義之間的相關(guān)性,并且具 有不良響應(yīng)性。第三種方式為用戶提供可插入程序中以觸發(fā)頁遷移的庫例程集 合。但是,在進行編譯器優(yōu)化時,這種方法易于在編譯時產(chǎn)生副作用。
結(jié)合附圖對本發(fā)明的實施例進行作為實例而不是限制的說明,附圖中,相似的參考標號表示相似的元件,附圖包括圖1是框圖,說明連貫緩沖非統(tǒng)一內(nèi)存尋址(cc-NUMA)處理平臺; 圖2是流程圖,說明根據(jù)本發(fā)明的一個實施例的兩遍(two-pass)編譯;圖3是流程圖,說明根據(jù)本發(fā)明的一個實施例的線程數(shù)據(jù)親和性 優(yōu)化;圖4是流程圖,說明根據(jù)本發(fā)明的一個實施例進行優(yōu)化的程序線 程數(shù)據(jù)親和性的執(zhí)行;圖5是框圖,說明根據(jù)本發(fā)明的一個實施例的編譯器體系結(jié)構(gòu);以及圖6是框圖,說明根據(jù)本發(fā)明的一個實施例的示例計算系統(tǒng)。
具體實施方式
兩遍編譯和剖片斤工具在一個實施例中,編譯器實現(xiàn)兩遍編譯方案來進行線程數(shù)據(jù)親和 性優(yōu)化。編譯器是將用高級語言、如C+十或FORTRAN編寫的計算機 程序轉(zhuǎn)換為機器語言的軟件。編譯器一般將編程人員編寫的高級代碼 轉(zhuǎn)換為編譯器內(nèi)部所使用的中間表示(IR)。 IR可以是編譯器特定的, 并且一些公知的實例其中還包括rtl表示、斯坦福大學中間格式(suif) 表示以及Silicon Graphics Incorporated的MlPSpro Compiler的WHIRL 中間表示。本發(fā)明的實施例不限于所使用的任何特定編譯器或特定IR。雖然在一個實施例中,以下描述的代碼插入在IR級發(fā)生,但情況 不一定是這樣。此外,為了便于理解, 一些實例可表示高級代碼階段 上的代碼插入。本發(fā)明的實施例可在編譯過程的各種階段上實現(xiàn)?,F(xiàn)在參照圖2來描述這種兩遍方案的一個實施例。在框202,編 譯器進行常規(guī)編譯,并從編程人員提供給它的源代碼中生成多線程可 執(zhí)行二進制。在框204,執(zhí)行二進制(即程序),以及剖析(profiling)工具用來收集與程序的執(zhí)行有關(guān)的信息。在一個實施例中,采用基于抽樣 的剖析工具,它以某種循環(huán)間隔對執(zhí)行抽樣,并制作與處理有關(guān)的記 錄。這類剖析工具可由編譯器用來估計循環(huán)的靜態(tài)未知的行程計數(shù)以 及僅在執(zhí)行時才可得到的其它信息。在一個實施例中,剖析工具收集 與遠程存儲器負荷有關(guān)的信息以及其它這類存儲器存取表達。在框206,編譯器開始兩遍方案的第二遍。如上所述,兩遍方案 還具有除了線程數(shù)據(jù)親和性優(yōu)化之外的優(yōu)點,因為剖析工具所收集的 信息還可用于對于本申請的主題不重要的其它優(yōu)化。例如,在框206, 進行觀察孔和過程間優(yōu)化(IPO)。在框208,并行化優(yōu)化由編譯器來進行。并行化優(yōu)化識別可分為 若干線程并且并行執(zhí)行的循環(huán)或其它構(gòu)造。它可由編程人員手動進行 或者由編譯器自動進行。在一個實施例中,進行并行化優(yōu)化,以便支 持作為公知的工業(yè)標準的OpenMP共享存儲器編程模型。OpenMP規(guī) 范片反本2.5可在http:〃www.openmp.org上《尋至l]。在框210,編譯器進行各種其它高級優(yōu)化,例如循環(huán)展開、循環(huán) 交換、循環(huán)合并(flision)、循環(huán)分布、循環(huán)分離(peel)、多版本和數(shù)據(jù)轉(zhuǎn) 換。在一個實施例中,這類優(yōu)化包括自動循環(huán)并行化。在框212,進 行標量優(yōu)化,并生成優(yōu)化可纟丸行二進制。 <旦是,框206、 208和210可 根據(jù)需要來調(diào)用框214,在其中進行線程數(shù)據(jù)親和性優(yōu)化。在一個實 施例中,當對程序進行編譯以便在多核處理器和基于超線程處理器的 cc-NUMA多處理器系統(tǒng)上執(zhí)行時,調(diào)用線程數(shù)據(jù)親和性優(yōu)化,以及被 識別的熱點循環(huán)(hot loop)由于不良的線程數(shù)據(jù)親和性而具有傘支^^性 能。線程數(shù)據(jù)親和性優(yōu)化現(xiàn)在參照圖3更詳細地描述圖2的框214的線程數(shù)據(jù)親和性優(yōu)化 的一個實施例。在框302,編譯器收集由剖析工具在圖2的框204中 所收集的遠程負荷數(shù)據(jù)。在一個實施例中,編譯器使用遠程負荷數(shù)據(jù) (與各個表達以及與各表達相關(guān)聯(lián)的遠程訪問有關(guān)的數(shù)據(jù))來構(gòu)建遠程負荷表。遠程負荷表是裝載了遠程負荷數(shù)據(jù)的表。因此,遠程負荷表 包含表達和等待時間。在一個實施例中,等待時間以時鐘周期來表示。 在框304,編譯器確定與各個單獨表達相關(guān)聯(lián)的平均遠程等待時 間。遠程負荷表可包含與同一個表達有關(guān)的多段信息。通過確定平均 遠程等待時間,單個統(tǒng)計可與每個單獨表達、如負荷關(guān)聯(lián)。在框306,對于各循環(huán)生成服務(wù)例程,服務(wù)例程神皮編程為移動數(shù) 據(jù)以便影響線程數(shù)據(jù)親和性。在一個實施例中,服務(wù)例程是循環(huán)特定 的。但是,在另外的實施例中,可生成服務(wù)例程,以便對應(yīng)于熱點代 碼塊(由于可用性能增益而經(jīng)過線程數(shù)據(jù)親和性優(yōu)化的代碼塊)或者單 獨表達、如負荷。在一個實施例中,服務(wù)例程在執(zhí)行時緊密地結(jié)合到 程序中作為執(zhí)行代碼本身的一部分。在另一個實施例中,可在執(zhí)行時 將服務(wù)例程插入程序可用的庫中。在一個實施例中,服務(wù)例程被編程 為在發(fā)生讓步(yield)事件時執(zhí)行,其中的先前執(zhí)行的線程在執(zhí)行服務(wù)例 程時恢復(fù)。在框308,對于遠程負荷表中的各表達來確定觸發(fā)條件。在一個 實施例中,觸發(fā)條件基于與特定表達相關(guān)聯(lián)的平均遠程等待時間。觸 發(fā)條件可按照表達的遠程訪問數(shù)量、表達的遠程訪問的閾值等待時間、 這些因素的結(jié)合來表示,或者以許多其它方式來表示。在一個實施例 中,觸發(fā)條件是遠程負荷的數(shù)量以及代碼塊中的遠程負荷的平均等待 時間的函數(shù)。例如,在一個實施例中,編譯器按照下式1所示的公式、 對每個表達來確定觸發(fā)條件W(P) = S (/racto" x丄 旭_卿i(帳(及L5 *》 *, l、"' (寺式1)式中,Ntngger(P)表示遠程負荷的數(shù)量,它的剖析平均等待時間大于(或等于)代碼塊P的最大平均等待時間的分數(shù)(0<分數(shù)2)。在一個實施例中,Ntngger(P)用作調(diào)用包含計算了其觸發(fā)的表達的循環(huán)的服務(wù)例程的觸發(fā)條件。在上述公式中,N表示代碼塊P中的不同遠程負荷(沒有處于相同的遠程存儲器頁中)的數(shù)量,Lma,e表示代碼塊P中的不同遠程負荷的最大平均等待時間,以及L,(RLEk)表示表達(即遠程負荷RLEk)的平均等待時間。讓步可由1 (在第 一遠程訪問時觸發(fā)數(shù)據(jù)移動的進取方案中)直到N(僅在最后的遠程訪問其中之一時才觸發(fā)數(shù)據(jù)移動 的保守方案中)或者在1與N之間的任何位置上被觸發(fā)(即滿足觸發(fā)條件)。在框310,編譯器生成將與各觸發(fā)條件相關(guān)聯(lián)的監(jiān)測指令,并將 監(jiān)測指令插入IR代碼作為優(yōu)化過程的一部分。在一個實施例中,監(jiān)測 指令由硬件來支持,以及在監(jiān)測指令執(zhí)行時,它使硬件性能計數(shù)器 (perfonnance counter)集合能夠跟蹤被監(jiān)測存儲器負荷表達以及它們與 這些被監(jiān)測負荷表達相關(guān)聯(lián)的物理存儲位置,以便計算有多少訪問是遠程存儲器負荷。在另一個實施例中,性能計數(shù)器還跟蹤與^Lj!i測負 荷表達相關(guān)聯(lián)的等待時間。服務(wù)例程、引起服務(wù)例程的執(zhí)行的觸發(fā)條件以及提供由觸發(fā)條件 所使用的數(shù)據(jù)的性能監(jiān)測之間的交互可通過許多方式來建立。在一個實施例中,可對每個執(zhí)行線程建立通道以便包含某種情況(scenario)的 體系結(jié)構(gòu)狀態(tài)。某種情況是復(fù)合條件、如觸發(fā)條件。在滿足情況觸發(fā) 條件時,可觸發(fā)讓步事件以便執(zhí)行服務(wù)例程。圖3所示的框的順序僅為了便于理解;它們也可通過另一種順序 來進行。例如,可在生成服務(wù)例程之前來確定觸發(fā)條件。此外,框306 至310可對于遠程負荷表中的每個表達依次進行。它們只是實例,說 明圖3只表示本發(fā)明的一些實施例。在進行了圖3的線程數(shù)據(jù)親和性優(yōu)化時,再次將線程數(shù)據(jù)親和性 優(yōu)化的IR轉(zhuǎn)換為可執(zhí)行二進制。在一個實施例中,程序(如這個第二 遍上進行編譯的)包括影響數(shù)據(jù)遷移的觸發(fā)條件、判定是否滿足觸發(fā)條的這些部分由編譯器在第二遍生成,并且不是在圖2的框204執(zhí)行的 程序的一部分。優(yōu)化代碼執(zhí)行現(xiàn)在參照圖4來描述由編譯器生成的、實現(xiàn)本發(fā)明的一個實施例ii的執(zhí)行線程數(shù)據(jù)親和性優(yōu)化代碼的一個實施例。在框402,執(zhí)行新的 可執(zhí)行二進制,并且按照在圖3的框310由編譯器插入的監(jiān)測指令來 收集與遠程訪問及關(guān)聯(lián)等待時間有關(guān)的性能信息。這種性能數(shù)據(jù)可包 括遠程數(shù)據(jù)訪問頻率、統(tǒng)計、等待時間、例如遠程負荷的平均等待時 間之類的等待時間統(tǒng)計以及其它這類信息。在框404,對于是否滿足被監(jiān)測遠程訪問的觸發(fā)條件、即是否滿 足情況的復(fù)合條件進行判定。觸發(fā)條件可包括遠程訪問的數(shù)量、遠程 訪問統(tǒng)計或頻率(例如每秒50次遠程訪問)、負荷的閾值平均等待時間 或者另外某種這樣的機制。如果不滿足觸發(fā)條件,則處理在框402繼 續(xù)進行,其中執(zhí)行優(yōu)化二進制并收集遠程訪問和等待時間數(shù)據(jù)。但是,如果在框304確定已經(jīng)滿足觸發(fā)條件,則在框306,觸發(fā) 讓步事件,以便使當前線程的執(zhí)行讓步于服務(wù)例程。服務(wù)例程進行數(shù) 據(jù)移動,以便為被監(jiān)測負荷表達和熱點循環(huán)提供更好的線程數(shù)據(jù)親和 性。在一個實施例中,對其讓步的服務(wù)例程與熱點循環(huán)和觸發(fā)條件明 確關(guān)聯(lián)。服務(wù)例程可通過復(fù)制、移動或保持某種圖像來移動數(shù)據(jù)。在服務(wù) 例程完成執(zhí)行之后,讓步事件終止,并且在讓步事件之前執(zhí)行的線程 恢復(fù)執(zhí)行。示例編譯器體系結(jié)構(gòu)現(xiàn)在參照圖5來描述實現(xiàn)本發(fā)明的一個實施例的示例編譯器。為 了便于理解,單獨描述所述的一莫塊和組件。編譯器是軟件程序,并且 無需按照所述沖莫塊來劃分。在具有兩個節(jié)點的cc-NUMA環(huán)境中示出 編譯器20,第一節(jié)點由處理單元22和存儲器24表示,以及第二節(jié)點 由處理元件23和存儲器25表示。為了簡潔起見僅示出兩個節(jié)點。對 于由處理元件22執(zhí)行的線程,存取存儲器24的操作是本地訪問,而 存取存儲器25的操作則是具有更多等待時間的遠程訪問。類似地,對 于由處理元件23執(zhí)行的線程,存取存儲器25的操作是本地訪問,而 存取存儲器24的操作則是遠程訪問。剖析工具28與兩個節(jié)點所表示的并行處理系統(tǒng)接口 。在一個實施例中,剖析工具28是基于抽樣的剖析工具,如上所述。編譯器20從 編程人員用來創(chuàng)建程序代碼30的某種字處理應(yīng)用程序接收程序代碼 30。然后,為了便于編譯器20進行處理,將程序代碼30轉(zhuǎn)換為IR。 將IR提供給二進制生成器38,它生成由處理元件執(zhí)行的可執(zhí)行二進制。在程序執(zhí)行時,剖析工具28收集遠程訪問和等待時間數(shù)據(jù),并將 該信息提供給觸發(fā)生成模塊32,以便在兩遍編譯的第二遍中用于線程 數(shù)據(jù)親和性優(yōu)化。觸發(fā)生成模塊32生成觸發(fā)條件。服務(wù)例程模塊34 生成服務(wù)例程,以便進行數(shù)據(jù)遷移并將它編程到程序可訪問的庫中。監(jiān)測代碼插入才莫塊36插入監(jiān)測指令,以便采用性能計數(shù)器實現(xiàn)遠 程存儲器存取監(jiān)測。二進制生成^t塊38在第二遍編譯時將所有所生成 代碼插入程序代碼30,以便創(chuàng)建線程數(shù)據(jù)親和性優(yōu)化代碼40。示例計算機系統(tǒng)在編譯器的上下文中描述了本發(fā)明的各種實施例,其中的編譯器 生成代碼,所述代碼被插入由編譯器編譯的程序中?,F(xiàn)在參照圖6描 述在其上可實現(xiàn)這種編譯器的示例計算機系統(tǒng)(例如并行計算系統(tǒng)的 節(jié)點)。計算機系統(tǒng)1800可用來進行本文所述操作的一個或多個。在 備選實施例中,機器可包括網(wǎng)絡(luò)路由器、網(wǎng)絡(luò)交換機、網(wǎng)絡(luò)橋接器、 個人數(shù)字助理(PDA)、蜂窩電話、萬維網(wǎng)設(shè)備或者能夠執(zhí)行指定由機器 所采取的動作的指令序列的任何機器。計算機系統(tǒng)1800包括經(jīng)由總線1808相互進行通信的處理器1802、 主存儲器1804和靜態(tài)存儲器1806。計算機系統(tǒng)1800還可包括視頻顯 示單元1810(例如液晶顯示器(LCD)或陰極射線管(CRT))。計算機系統(tǒng) 1800還包括字母數(shù)字輸入設(shè)備1812(例如鍵盤)、光標控制設(shè)備1814(例 如鼠標)、磁盤驅(qū)動器單元l816、信號生成裝置1S20(例如揚聲器)以及 網(wǎng)絡(luò)接口設(shè)備1822。磁盤驅(qū)動器單元1816包括機器可讀介質(zhì)1824,在其中存儲體現(xiàn)以上所述的任一個或全部方法的指令集合(即軟件)1826。軟件1826還 表示為完全或至少部分駐留在主存儲器1804和/或處理器1802中。還 可經(jīng)由網(wǎng)絡(luò)接口設(shè)備1822來傳送或接收軟件1826。為了便于進行本 說明,術(shù)語"機器可讀介質(zhì)"應(yīng)被認為包括能夠?qū)χ噶钚蛄羞M行存儲 或編碼的任何媒體,其中的指令序列由計算機執(zhí)行,并使該計算機進 行本發(fā)明的方法的任一種。因此,術(shù)語"機器可讀介質(zhì)"應(yīng)—皮認為包 括但不限于固態(tài)存儲器、光盤和磁盤以及載波信號。一般事項在以上描述中,為了進行說明,闡述了許多具體細節(jié)。但是大家況下,沒有詳細說明公知的電路、結(jié)構(gòu)和技術(shù),以免影響對本說明書 的理解。本發(fā)明的實施例包括各種過程。這些過程可由硬件組件來完成, 或者可包含在機器可執(zhí)行指令中,這些指令可用于使采用這些指令編 程的一個或多個處理器來完成這些過程。或者,這些過程可通過硬件 和軟件的結(jié)合來完成。本發(fā)明的實施例可作為計算機程序產(chǎn)品來提供,它可包括其中存 儲了指令的機器可讀介質(zhì),這些指令可用于對計算機(或另外的電子裝 置)進行編程以完成根據(jù)本發(fā)明的 一個或多個實施例的過程。機器可讀 介質(zhì)可包括但不限于軟盤、光盤、光盤只讀存儲器(CD-ROM)以及磁 光盤、只讀存儲器(ROM)、隨機存取存儲器(RAM)、可擦除可編程只 讀存儲器(EPROM)、電可擦除可編程只讀存儲器(EEPROM)、磁卡或 光卡、閃速存儲器、或者適合于存儲指令的其它類型的媒體/機器可讀 介質(zhì)。此外,本發(fā)明的實施例還可作為計算機產(chǎn)品下載,其中所述程 序可通過載波或其它傳播介質(zhì)中包含的數(shù)據(jù)信號、經(jīng)由通信鏈路(例如 調(diào)制解調(diào)器或網(wǎng)絡(luò)連接)來從遠程計算機傳送到請求計算機。雖然根據(jù)若干實施例描述了本發(fā)明,但本領(lǐng)域的技術(shù)人員會知道, 本發(fā)明不限于所描述的實施例,而是可在所附權(quán)利要求書的精神和范圍之內(nèi),經(jīng)過修改和變更來實施。因此,本說明書被看作^釋性的 而不是限制性的。
權(quán)利要求
1.一種方法,包括由編譯器接收待編譯為可執(zhí)行程序的源代碼;將所述源代碼轉(zhuǎn)換成中間表示;生成多線程可執(zhí)行代碼;在連貫緩沖非統(tǒng)一內(nèi)存尋址(cc-NUMA)平臺上執(zhí)行所述多線程可執(zhí)行代碼,并在執(zhí)行期間采用剖析工具通過抽樣來收集剖析數(shù)據(jù);根據(jù)所收集的剖析數(shù)據(jù)來確定與負荷表達相關(guān)聯(lián)的觸發(fā)條件;生成服務(wù)例程,以便在滿足所述觸發(fā)條件時,將數(shù)據(jù)從所述cc-NUMA平臺的第一節(jié)點移動到所述cc-NUMA平臺的第二節(jié)點;生成監(jiān)測指令,以便使運行時遠程訪問監(jiān)測能夠在執(zhí)行期間判定是否滿足所述觸發(fā)條件;以及通過將所述監(jiān)測指令插入所述中間表示,來生成線性數(shù)據(jù)親和性優(yōu)化可執(zhí)行代碼。
2. 如權(quán)利要求l所述的方法,其中,所述觸發(fā)條件包括在觸發(fā)讓 步事件之前確定負荷表達進行遠程訪問的閾值次數(shù)。
3. 如權(quán)利要求2所述的方法,其中,所述讓步事件使執(zhí)行從線程 讓步于所述服務(wù)例程。
4. 如權(quán)利要求l所述的方法,其中,生成監(jiān)測指令的步驟包括生 成所述監(jiān)測指令,以便在被執(zhí)行時使硬件性能計數(shù)器集合能夠在執(zhí)行 所述負荷表達時計算多少訪問是遠程存儲器負荷。
5. 如權(quán)利要求l所迷的方法,其中,所述剖析數(shù)據(jù)包括以下各項 的列表遠程負荷表達、與所述遠程負荷表達相關(guān)聯(lián)的遠程訪問的數(shù) 量以及與各遠程訪問相關(guān)聯(lián)的等待時間。
6. 如權(quán)利要求5所述的方法,其中,確定觸發(fā)條件的步驟包括確 定所述遠程負荷表達的平均等待時間。
7. —種用于連貫緩沖非統(tǒng)一內(nèi)存尋址(cc-NUMA)平臺的編譯器, 所述編譯器包括二進制生成器模塊,從程序中生成多線程可執(zhí)行二進制; 剖析工具,在所述cc-NUMA平臺上執(zhí)行多線程二進制時收集剖 析數(shù)據(jù);觸發(fā)生成才莫塊,根據(jù)所收集的剖析數(shù)據(jù)來確定與所迷程序中的負 荷表達相關(guān)聯(lián)的觸發(fā)條件;服務(wù)例程模塊,生成服務(wù)例程,以便在滿足所述觸發(fā)條件時,將 數(shù)據(jù)從所述cc-NUMA平臺的第 一節(jié)點移動到所述cc-NUMA平臺的笫 二節(jié)點;以及監(jiān)測代碼插入模塊,生成監(jiān)測指令,以便使運行時遠程訪問監(jiān)測 能夠在執(zhí)行期間判定是否滿足所述觸發(fā)條件。
8. 如權(quán)利要求7所述的編譯器,其中,所述二進制生成器還生成 將所述程序重新編譯成包含所述觸發(fā)條件、所述服務(wù)例程和所述監(jiān)測 指令的線程數(shù)據(jù)親和性優(yōu)化可執(zhí)行代碼。
9. 如權(quán)利要求7所述的編譯器,其中,所述觸發(fā)生成才莫塊通過在 觸發(fā)讓步事件之前確定負荷表達進行遠程訪問的閾值次數(shù)來確定所述 觸發(fā)條件。
10. 如權(quán)利要求7所述的編譯器,其中,所述監(jiān)測代碼插入才莫塊 生成所述監(jiān)測指令,以便在被執(zhí)行時使硬件性能計數(shù)器集合能夠在執(zhí) 行所述負荷表達時計算多少訪問是遠程存儲器負荷。
11. 如權(quán)利要求7所述的編譯器,其中,所述剖析數(shù)據(jù)包括以下 各項的列表遠程負荷表達、與所述遠程負荷表達相關(guān)聯(lián)的遠程訪問 的數(shù)量以及與各遠程訪問相關(guān)聯(lián)的等待時間。
12. 如權(quán)利要求11所述的編譯器,其中,所述觸發(fā)生成^^莫塊通過 確定所述遠程負荷表達的平均等待時間來確定所迷觸發(fā)條件。
13. —種其中存儲了指令的機器可讀介質(zhì),所述指令在由處理器 執(zhí)行時,使所述處理器進行包括以下步驟的操作由編譯器接收待編譯為可執(zhí)行程序的源代碼; 將所述源代碼轉(zhuǎn)換成中間表示; 生成多線程可執(zhí)行代碼;在連貫緩沖非統(tǒng)一 內(nèi)存尋址(cc-NUMA)平臺上執(zhí)行所述多線程可 執(zhí)行代碼,并在執(zhí)行期間采用剖析工具通過抽樣來收集剖析數(shù)據(jù);根據(jù)所收集的剖析數(shù)據(jù)來確定與負荷表達相關(guān)聯(lián)的觸發(fā)條件;生成服務(wù)例程,以便在滿足所述觸發(fā)條件時,將數(shù)據(jù)從所述 cc-NUMA平臺的第一節(jié)點移動到所述cc-NUMA平臺的第二節(jié)點;生成監(jiān)測指令,以便使運行時遠程訪問監(jiān)測能夠在執(zhí)行期間判定 是否滿足所述觸發(fā)條件;以及通過將所述監(jiān)測指令插入所述中間表示,來生成線性數(shù)據(jù)親和性 優(yōu)化可執(zhí)行代碼。
14. 如權(quán)利要求13所述的機器可讀介質(zhì),其中,確定所述觸發(fā)條 件的步驟包括在觸發(fā)讓步事件之前確定負荷表達進行遠程訪問的閾值 次數(shù)。
15. 如權(quán)利要求13所述的機器可讀介質(zhì),其中,生成監(jiān)測指令的 步驟包括生成所述監(jiān)測指令,以便在被執(zhí)行時使硬件性能計數(shù)器集合 能夠在執(zhí)行所述負荷表達時計算多少訪問是遠程存儲器負荷。
16. 如權(quán)利要求13所述的機器可讀介質(zhì),其中,所述剖析數(shù)據(jù)包 括以下各項的列表遠程負荷表達、與所述遠程負荷表達相關(guān)聯(lián)的遠 程訪問的數(shù)量以及與各遠程訪問相關(guān)聯(lián)的等待時間。
17. —種由編譯器執(zhí)行的方法,包括 接收待編譯的程序;執(zhí)行所述程序,并在執(zhí)行期間收集剖析數(shù)據(jù);以及采用所收集的剖析數(shù)據(jù)來對所述程序進行線程數(shù)據(jù)親和性優(yōu)化。
18. 如權(quán)利要求17所述的方法,其中,進行線程數(shù)據(jù)親和性優(yōu)化 的步驟包括將觸發(fā)條件與負荷表達相關(guān)聯(lián),所述觸發(fā)條件是所述負荷 表達要求遠程訪問的閾值次數(shù)。
19. 一種方法,包括執(zhí)行多線程的線程數(shù)據(jù)親和性優(yōu)化二進制的笫一線程; 通過計算在執(zhí)行期間負荷表達要求遠程訪問的次數(shù),來監(jiān)測所述 負荷表達;當所述負荷表達要求遠程訪問達到閾值次數(shù)時,觸發(fā)讓步事件; 響應(yīng)所述讓步事件而使所述第一線程的執(zhí)行讓步于服務(wù)例程;以及在終止所迷服務(wù)例程的執(zhí)行時恢復(fù)所述第一線程的執(zhí)行。
20.如權(quán)利要求19所述的方法,其中,所述服務(wù)例程將數(shù)據(jù)從連貫緩沖非統(tǒng)一內(nèi)存尋址(cc-NUMA)平臺的第一節(jié)點遷移到進行所迷第一線程的4丸行的節(jié)點。
全文摘要
可由編譯器在編譯要在連貫緩沖非統(tǒng)一內(nèi)存尋址(cc-NUMA)平臺上執(zhí)行的計算機程序期間來進行線程數(shù)據(jù)親和性優(yōu)化。在一個實施例中,本發(fā)明包括接收待編譯的程序。所接收的程序然后在第一遍被編譯并執(zhí)行。在執(zhí)行期間,編譯器采用剖析工具來收集剖析數(shù)據(jù)。然后,在第二遍,編譯器采用所收集的剖析數(shù)據(jù)來對程序進行線程數(shù)據(jù)親和性優(yōu)化。
文檔編號G06F9/45GK101273332SQ200680035461
公開日2008年9月24日 申請日期2006年8月26日 優(yōu)先權(quán)日2005年9月30日
發(fā)明者C·紐伯恩, D·謝爾, H·王, J·沈, M·吉爾卡, P·王, R·格羅夫, W·李, X·田 申請人:英特爾公司