国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      使用編譯器的線程數(shù)據(jù)親和性優(yōu)化的制作方法

      文檔序號(hào):6569052閱讀:191來源:國知局
      專利名稱:使用編譯器的線程數(shù)據(jù)親和性優(yōu)化的制作方法
      使用編譯器的線程數(shù)據(jù)親和性優(yōu)化技術(shù)領(lǐng)域本文所包含的是受到著作權(quán)保護(hù)的資料。著作權(quán)人不反對(duì)任何人 復(fù)制此專利公開,因?yàn)樗霈F(xiàn)在專利及商標(biāo)局專利文件或記錄中,但 在其它方面仍保留所有著作權(quán)。本發(fā)明的實(shí)施例一般涉及并行處理領(lǐng)域。更具體來說,本發(fā)明的 實(shí)施例涉及多線程環(huán)境中的線程數(shù)據(jù)親和性。
      背景技術(shù)
      并行處理涉及同時(shí)執(zhí)行兩個(gè)或兩個(gè)以上指令線程。使用多個(gè)處理 器同時(shí)進(jìn)行任務(wù)可極大地提高各種應(yīng)用程序的性能。存在若干并行處 理體系結(jié)構(gòu),包括共享存儲(chǔ)器多核處理器、多處理器以及連貫緩沖非統(tǒng)一內(nèi)存尋址(cc-NUMA)體系結(jié)構(gòu)。在共享存儲(chǔ)器多核處理器和多處 理器系統(tǒng)中,多個(gè)處理元件(例如中央處理器(CPU))由操作系統(tǒng)并行操 作,并經(jīng)由總線互連來訪問存儲(chǔ)器。相反,cc-NUMA多處理體系結(jié)構(gòu)具有分為近存儲(chǔ)體和遠(yuǎn)存儲(chǔ)體的 存儲(chǔ)器。在共享存儲(chǔ)器多核處理器和多處理器系統(tǒng)中,所有處理元件 以相同速度訪問公共存儲(chǔ)器。在cc-NUMA中,訪問與處理元件在相 同的處理器板上的存儲(chǔ)器(本地存儲(chǔ)器)比訪問其它處理器板上的存儲(chǔ) 器(共享存儲(chǔ)器)更快,因而使用術(shù)語"非統(tǒng)一"。因此,cc-NUMA體 系結(jié)構(gòu)對(duì)于較大數(shù)量的處理元件能遠(yuǎn)比共享存儲(chǔ)器多核處理器和多處 理器系統(tǒng)更好地進(jìn)行縮放。"連貫緩沖NUMA"表示在本地系統(tǒng)中支 持高速緩存。在實(shí)踐方面,大多數(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é)點(diǎn)1-4。較大 的并行系統(tǒng)可具有更多節(jié)點(diǎn),但為了簡潔起見僅示出四個(gè)。每個(gè)節(jié)點(diǎn) 表示為具有作為處理元件5-11示出的一個(gè)或多個(gè)處理元件(有時(shí)又稱 作"核心")。每個(gè)節(jié)點(diǎn)還具有表示為存儲(chǔ)器13-16的本地存儲(chǔ)器。這 只是說明;節(jié)點(diǎn)可具有兩個(gè)以上處理元件以及經(jīng)由總線連接到這類處 理元件的 一個(gè)以上本地存儲(chǔ)器。一個(gè)處理元件本地的存儲(chǔ)器對(duì)于另一個(gè)處理元件可能不是本地 的。例如,對(duì)于處理元件5,存儲(chǔ)器13是本地的并且可快速存取。但 是,對(duì)于處理元件5,存儲(chǔ)器15不是本地的。處理元件5可經(jīng)由連接 節(jié)點(diǎn)1和節(jié)點(diǎn)3的鏈路來訪問存儲(chǔ)器15;但是,這種訪問比本地存儲(chǔ) 器訪問具有明顯更高的等待時(shí)間。從處理元件5訪問存儲(chǔ)器16甚至具 有更高的等待時(shí)間,因?yàn)楸仨毥?jīng)過兩個(gè)獨(dú)立鏈路。因此很明顯,希望在本地存儲(chǔ)器中具有由執(zhí)行線程所使用的數(shù)據(jù)。 這種情況的技術(shù)術(shù)語是"線程數(shù)據(jù)親和性"。在多線程系統(tǒng)中,數(shù)據(jù) 可在一個(gè)時(shí)間由一個(gè)處理元件使用,然后在另一個(gè)時(shí)間由另一個(gè)非本 地處理元件使用。線程數(shù)據(jù)親和性表示將數(shù)據(jù)移動(dòng)到采用該數(shù)據(jù)來執(zhí) 行線程的處理元件本地的存儲(chǔ)器的問題。已經(jīng)進(jìn)行了若干嘗試來解決線程數(shù)據(jù)親和性問題。 一種方式是擴(kuò) 展高級(jí)編程語言,以便允許由編程人員插入數(shù)據(jù)分布指示。但是,這 種方法損害了程序模型的簡單性,并且無法及時(shí)處理不規(guī)則存儲(chǔ)器存 耳M^式。此外,它要求進(jìn)行額外的編程。第二種方式采用由操作系統(tǒng)在后臺(tái)執(zhí)行的守護(hù)程序(demon)(又稱 作服務(wù))來進(jìn)行認(rèn)為適合于由操作系統(tǒng)所執(zhí)行的應(yīng)用程序的頁遷移。但 是,這種方法沒有利用頁遷移策略與程序語義之間的相關(guān)性,并且具 有不良響應(yīng)性。第三種方式為用戶提供可插入程序中以觸發(fā)頁遷移的庫例程集 合。但是,在進(jìn)行編譯器優(yōu)化時(shí),這種方法易于在編譯時(shí)產(chǎn)生副作用。


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