国产精品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>

      用于協(xié)調(diào)執(zhí)行的并行軟件的高性能無阻塞并行存儲管理器的制作方法

      文檔序號:6558696閱讀:226來源:國知局
      專利名稱:用于協(xié)調(diào)執(zhí)行的并行軟件的高性能無阻塞并行存儲管理器的制作方法
      本中請和標題為“并行軟件處理系統(tǒng)”的美國專利申請(代理人文檔號FIS990317US)以及標題為“把計算控制的相異流用作為可再使用數(shù)據(jù)對象的方法”的美國專利申請(代理人文檔號FIS990319US)中所說明的主題和權(quán)利要求有關,這二份申請由本申請的發(fā)明人提出并和本申請于同一日提交。
      本發(fā)明涉及計算機處理,尤其涉及并行計算機編程和處理。
      在利用分立、非并行處理的現(xiàn)有技術的計算中,各程序常常共享數(shù)據(jù)和其它部件。其的一個例子在

      圖1中示出,其中可以物理上分立在不同的存儲器存儲中的或者邏輯上分立在同一個存儲器存儲中的分立進程存儲器19a、19b包含用于整個進程可見的數(shù)據(jù)項的全局變量存儲器20a、20b,用于數(shù)據(jù)結(jié)構(gòu)的堆存儲器21a、21b,用于函數(shù)自變量和局部數(shù)據(jù)項的棧存儲器23a、23b,以及可根據(jù)需要充當堆或棧存儲器空間的自由存儲器空間22a、22b。自由存儲器空間的一部分可指定為可由二個分別在分立的進程存儲器19a、19b中操作的程序A、24a和程序B、24b使用的公用存儲器22c。每個程序A和B可訪問進程存儲器中指定的公用區(qū)22c,而不能訪問程序之間的其它存儲器。使用圖1的系統(tǒng)的程序員因限于訪問公用存儲器的數(shù)據(jù)結(jié)果從該系統(tǒng)得到相對少的幫助。
      并行處理在單個程序可以同時運行由程序管理的不同線程或獨立控制流方面提供改進。可在并行方式下執(zhí)行多個線程,并且這些線程可在松耦合或緊耦合方式下共享信息。在圖2中示出并行處理方案的一個例子,其中具有一個公用全局存儲器120和一個公用堆空間121的單個進程存儲器119含有多個??臻g123a、123b和操作多個線程的單個程序124,其中每個程序線程具有一個棧。如所示,示出的進程存儲器結(jié)構(gòu)可以操作任何數(shù)量的線程1-N并且包含任何數(shù)量的對應棧1-N。
      線程之間的協(xié)調(diào)的數(shù)據(jù)訪問通常需要操作系統(tǒng)的協(xié)助(帶有相關的代價),例如信號或鎖定。然而,在典型并行處理應用中,使用系統(tǒng)服務產(chǎn)生的串行化,例如存儲管理和對存儲器的存取協(xié)調(diào),經(jīng)常明顯地減少并行算法可達到的性能好處。當多于一個的線程訪問或者請求一數(shù)據(jù)對象或其它系統(tǒng)資源時出現(xiàn)串行化。如果發(fā)生這種沖突,只有一個線程訪問并且在該第一線程利用系統(tǒng)資源結(jié)束之前拒絕所有其它線程訪問。例如,圖2中示出的結(jié)構(gòu)是易出錯的,因為含有正由該程序操縱的信息的堆空間由于不同的線程試圖在同一時刻訪問相同的數(shù)據(jù)結(jié)構(gòu)遭受沖突。當此發(fā)生時,在由另一個程序線程訪問該數(shù)據(jù)結(jié)構(gòu)時一個或多個線程必須等待。
      在目前的實踐中,并行軟件中的存儲器管理也是一個復雜和低效為其主要缺點的區(qū)域。當做出分配或釋放存儲器的調(diào)用時,并行執(zhí)行的好處可能為零或者甚至降低到串行執(zhí)行更快。這是由于目前的為防止二個或多個控制流即線程試圖獲得或釋放存儲器區(qū)時的沖突必須采用的串行化技術造成的。這可明顯地降低并行程序的性能,并強制程序設計和實現(xiàn)中的非自然運用。這些曲解損害維護性、擴充性,并且是出錯源泉。更壞的是,和這些問題關聯(lián)的損失甚至會阻礙開發(fā)人員考慮否則為可行的并行解決辦法。
      在并行編程中,如上面所說明,對每個線程分配一個供執(zhí)行,通常并行地,的具體工作單元,并且當該工作結(jié)束時,各線程停止以退出。存在著建立線程、結(jié)束線程和管理線程的代價。該代價具有機器周期分量和編程復雜性分量。編程復雜性分量是軟件實現(xiàn)和設計中的出錯源泉。線程使用中的主導范式是不同地對待線程和數(shù)據(jù)。存在著控制流(線程),并且存在著數(shù)據(jù)。所造成的二分形成一種趨向?qū)Ω鞣N預計的解決辦法加以約束的環(huán)境,而且在實現(xiàn)期間形成復雜性從而易出錯。
      考慮到現(xiàn)有技術的問題和不足,從而本發(fā)明的一個目的是提供一種不太遭受出錯的并行處理結(jié)構(gòu)。
      本發(fā)明的另一個目的是提供一種在訪問公用系統(tǒng)服務例如數(shù)據(jù)結(jié)構(gòu)時較少遭受串行化限制的并行處理結(jié)構(gòu)。
      本發(fā)明的再一個目的是提供一種在分配或釋放存儲器時較少遭受串行化限制的并行處理結(jié)構(gòu)。
      本發(fā)明的另一個目的是提供一種在不同線程之間存在較少交互的并行處理結(jié)構(gòu)。
      本發(fā)明的另一個目的是提供一種減少建立、管理和終止線程中的代價和錯誤的并行處理結(jié)構(gòu)。
      本發(fā)明的其它目的和優(yōu)點中的一部分會從說明書變?yōu)榍宄兔黠@。
      本發(fā)明可以實現(xiàn)對業(yè)內(nèi)人士是明顯的上述的和其它的目的和優(yōu)點,本發(fā)明在一個方面上指向一種用于并行計算的計算機存儲器結(jié)構(gòu),其具有由一個平面構(gòu)成的層次結(jié)構(gòu)的第一層。該平面包括一個代表由程序結(jié)構(gòu)管理的一個獨立控制流的線程,一個用于數(shù)據(jù)結(jié)構(gòu)的堆部分,一個用于函數(shù)自變量的棧部分,以及可由該程序結(jié)構(gòu)的任何部分訪問的局部變量和全局數(shù)據(jù)。該存儲器結(jié)構(gòu)還具有由一個空間構(gòu)成的層次結(jié)構(gòu)第二層。該空間包含二個或更多的平面,其中該空間中的各個平面含有該程序結(jié)構(gòu)。該空間還包含可由各個平面之間的程序結(jié)構(gòu)訪問的公用數(shù)據(jù)。
      該存儲器結(jié)構(gòu)最好還具有由二個或更多的空間構(gòu)成的層次結(jié)構(gòu)的第三層。這些空間含有相同或不同的程序結(jié)構(gòu),并含有可由各個空間之間的程序結(jié)構(gòu)訪問的公用數(shù)據(jù)。該程序結(jié)構(gòu)包括一個程序庫并且還包括一個用于每個空間的函數(shù)表,其中該函數(shù)表適應于和每個空間中的庫交換服務。
      在一相關方面,本發(fā)明提供一種用于并行計算的計算機程序產(chǎn)品,其包括在其中含有計算機可讀代碼的計算機可用介質(zhì)。該計算機代碼定義一種計算機存儲器結(jié)構(gòu)和包括上面說明的層次結(jié)構(gòu)的第一層和第二層,并且最好還包括該層次結(jié)構(gòu)的第三層。
      本發(fā)明的另一個相關方面提供一種并行處理方法,其中首先提供一種具有上面說明的層次結(jié)構(gòu)的第一層和第二層的計算機存儲器結(jié)構(gòu)。該方法接著包括使用由該空間中的第一平面里的程序結(jié)構(gòu)管理的第一線程并訪問該第一平面中的數(shù)據(jù)和各個平面之間的公用數(shù)據(jù),以及使用由該空間中的第二平面里的程序結(jié)構(gòu)管理的第二線程并訪問該第二平面中的數(shù)據(jù)和各個平面之間的公用數(shù)據(jù)。除當由程序結(jié)構(gòu)明確請求外第一和第二線程彼此避免交互。
      該程序結(jié)構(gòu)包括一個程序庫并且還提供一個用于該空間的函數(shù)表,其中該函數(shù)表適應于和該空間中的該庫交換服務。該方法可包括利用第一和第二線程對于該函數(shù)表進行函數(shù)調(diào)用以訪問各個平面之間的公用數(shù)據(jù)和該空間中的公用數(shù)據(jù)。最好還提供層次結(jié)構(gòu)的由二個或更多的空間構(gòu)成的第三層,其中這些空間包含相同和不同的程序結(jié)構(gòu)以及可由各個空間之間的程序結(jié)構(gòu)訪問的公用數(shù)據(jù)。該方法包括通過第一和第二線程訪問各個空間之間的公用數(shù)據(jù)。
      再一個相關方面提供一種可由機器讀的程序存儲部件,其有形地含有可由該機器執(zhí)行的指令程序,以利用具有前面說明的層次結(jié)構(gòu)的第一層、第二層以及最好具有第三層的計算機存儲器結(jié)構(gòu)實現(xiàn)這些所說明的用于并行處理的方法步驟。
      在另一個方面,本發(fā)明提供一種在并行處理計算系統(tǒng)中分配存儲器的方法,其中在該計算系統(tǒng)中首先設置一個可用于并行處理的系統(tǒng)存儲器和第一、第二線程,每個線程代表由一程序結(jié)構(gòu)管理的獨立控制流并執(zhí)行不同的程序任務。該方法包括利用第一線程對系統(tǒng)存儲器請求存儲器;向第一線程分配超過該請求的第一存儲器池并關聯(lián)該存儲器池和第二線程;利用第二線程對系統(tǒng)存儲器請求存儲器;向第二線程分配超過該請求的第二存儲器池并關聯(lián)該存儲器和第一線程;利用第一線程對第二線程請求更多的存儲器;以及在不對系統(tǒng)存儲器作出請求下從第二線程對第一線程分配第二存儲器池的一部分。
      第一和第二存儲器池中的每一個最好包含由系統(tǒng)存儲器標記為用于第一和第二線程的存儲器部分。該方法因此包括由第二線程釋放標記為用于第一線程的第一存儲器池的一部分,以及包括把標記為用于第二線程的第二存儲器池的一部分分配給第一線程。在第二線程釋放預定的最少數(shù)量的這樣的存儲器之前可不對第一線程分配標記為用于第一線程的這部分的第二存儲器池,并且在第一線程請求來自第二線程的更多存儲器之前可不對第一線程分配標記為用于第一線程的這部分的第二存儲器池。第一和第二存儲器池中的每一個最好包括由系統(tǒng)存儲器標記為用于第一和第二線程的存儲器部分。該方法因此包括由第二線程釋放標記為用于第一線程一段預定時間的第二存儲器池的一部分,并且若第一線程在該預定時間之內(nèi)不請求存儲器為第二線程回收標記為用于第一線程的這部分第二存儲器池。
      在一相關方面中,本發(fā)明提供一種機器可讀的程序存儲部件,其有形地含有可由該機器執(zhí)行的指令程序,以實現(xiàn)上述在并行處理計算系統(tǒng)中分配存儲器的方法。
      另一個相關方面提供一種在并行處理計算系統(tǒng)中使用的存儲器結(jié)構(gòu),其包括一個可由并行處理使用的系統(tǒng)存儲器;指定的第一存儲器池并且可由第一線程使用,該第一線程代表由一程序結(jié)構(gòu)管理的一個控制流;以及指定的并且可由第二線程使用的第二存儲器池。第二線程代表一個獨立于第一線程由一程序結(jié)構(gòu)管理的控制流,并且第一和第二存儲器池中的每一個具有標記為用于另一個線程的存儲器池部分。第一和第二存儲器池中的每一個最好包含由系統(tǒng)存儲器標記為用于第一和第二線程的存儲器部分。
      另一個相關方面提供一種用于并行計算的計算機程序產(chǎn)品,其包括在其中含有計算機可讀代碼的計算機可使用的介質(zhì),其中該計算機代碼定義上面說明的計算機存儲器結(jié)構(gòu)。
      本發(fā)明的再一個方面提供一種并行處理方法,其中首先設置第一線程和第二線程,第一線程代表由一程序結(jié)構(gòu)管理的一個獨立的控制流,第一線程具有二個狀態(tài),第一狀態(tài)為該程序結(jié)構(gòu)處理工作而第二狀態(tài)不調(diào)度地等待要處理的工作;第二線程代表一個和第一線程分立的由一程序結(jié)構(gòu)管理的獨立控制流。該方法包括利用第二線程為第一線程準備要處理的工作和把第二線程準備的工作放到由第一線程處理的隊列中。若當把第二線程準備的工作放在該隊列中時第一線程等待要處理的工作,該方法包括調(diào)度第一線程并利用它處理該隊列中的工作。若當把第二線程準備的工作放在該隊列中時第一線程正在處理別的工作,該方法包括利用第一線程完成該其它工作的處理、訪問該隊列中的該工作并且接著處理該隊列中的該工作。
      第二線程可持續(xù)把另外的工作置入該隊列中,并且在完成處理前面的工作時第一線程序貫地處理該隊列中的該另外的工作。第二線程最好把放到第一線程隊列中的工作標記成是未完成的。若第二線程所準備的工作置入該隊列時第一線程正處理其它工作,并且當?shù)谝痪€程完成處理該隊列中的該工作時,該方法可包括利用第一線程把所完成的工作標記成是完成的。在第一線程中的前面的工作標記為完成的之前,使來自第二線程的后繼工作等待??芍匦率褂玫谝痪€程處理其它工作,并且在第一線程完成所需數(shù)量的工作后該程序結(jié)構(gòu)可破壞它。
      一個相關方面提供一種可由機器讀的程序存儲部件,其有形地含有可由該機器執(zhí)行的指令程序,以便利用i)代表由一程序結(jié)構(gòu)管理的獨立控制流的第一線程,第一線程具有二個狀態(tài),第一狀態(tài)為該程序結(jié)構(gòu)處理工作而第二狀態(tài)不調(diào)度地等待要處理的工作;以及ii)代表和第一線程分立的由一程序結(jié)構(gòu)管理的獨立控制流的第二線程,來實現(xiàn)上述的并行處理的方法步驟。
      本發(fā)明的特性確信是新穎的,并且在附屬權(quán)利要求書中利用獨特性敘述表征本發(fā)明的各要素。各圖僅是示例目的的并且不是按尺度繪出的。然而,可通過連帶著各附圖參照下面的詳細說明最好地從結(jié)構(gòu)上和操作方法二方面上理解本發(fā)明,附圖是圖1是現(xiàn)有技術用于分立程序的存儲器結(jié)構(gòu)的示意圖。
      圖2是現(xiàn)有技術用于并行程序的存儲器結(jié)構(gòu)的示意圖。
      圖3是本發(fā)明的用于并行存儲器結(jié)構(gòu)的層次結(jié)構(gòu)中的第一層的示意圖,其稱為一個平面并且把二個或更多的平面聚集到一個空間中。
      圖4是本發(fā)明的用于并行存儲器結(jié)構(gòu)的層次結(jié)構(gòu)中的第二層的示意圖,其描述圖3中的示出的多個空間。
      圖5是描述圖3中示出的該空間的語境或索引結(jié)構(gòu),以示出對一個平面內(nèi)的默認全局數(shù)據(jù)和對公用(平面)存儲器的數(shù)據(jù)的訪問。
      圖6是把每個全局變量的整數(shù)標識鏈接到一個唯一標識上的語境索引結(jié)構(gòu)的示意圖。
      圖7是多個空間的示意圖,每個空間具有通過公用(空間)存儲器鏈接的多個平面和一個公用程序。
      圖8是鏈接公用(空間)全局數(shù)據(jù)對象的語境索引結(jié)構(gòu)的示意圖。
      圖9是由系統(tǒng)存儲器分配給多個線程語境的分立的存儲器池的示意圖。
      圖10是圖9的分立的存儲器池的示意圖,以示出回收未使用的為其它線程標記的存儲器塊。
      圖11是把線程實現(xiàn)為對其分配工作的抽象數(shù)據(jù)對象的示意流程圖。
      在對本發(fā)明的優(yōu)選實施例進行說明中,將參照附圖1-11,其中相同的號碼表示本發(fā)明的相同特性。本發(fā)明的特性無需在各附圖中按尺度示出。并行軟件處理系統(tǒng)為了克服并行處理期間訪問系統(tǒng)服務中的串行化限制,本發(fā)明在高級語言語法下定制一種編程方法,該方法隱式地從程序員的權(quán)限去掉這些考慮從而導致并行應用中的明顯改進。具體地,在不同方面上,本發(fā)明提供一種自然分離數(shù)據(jù)空間和每個并行線程的協(xié)調(diào)系統(tǒng),一種關聯(lián)線程和數(shù)據(jù)空間的方法以及描述和管理這種分離的高級語言。含有后面進一步說明的結(jié)構(gòu)的本發(fā)明的系統(tǒng)可存儲在其它情況下是常規(guī)計算機程序或存儲器存儲部件中,例如半導體芯片、只讀存儲器或磁介質(zhì)如軟盤或計算機硬盤。
      在本發(fā)明建立的結(jié)構(gòu)中,每個線程具有它自己的數(shù)據(jù)空間,即和單個線程相關的存儲器區(qū),它和除明顯地說明為公用的所有其它數(shù)據(jù)空間是分離的。利用本發(fā)明自然地能設計和實現(xiàn)帶有最小的和良好定義的數(shù)據(jù)空間交互的并行算法,從而在程序員不必是并行化管理的專家時提供低成本高性能的并行化。
      本發(fā)明的并行結(jié)構(gòu)設置不同的棧,每個線程一個棧,并且對每個棧提供具有不同、分立的全局存儲器、堆空間和自由區(qū)的外觀和功能。圖3描述用于本發(fā)明的并行存儲器結(jié)構(gòu)的層次結(jié)構(gòu)的第一層,本文稱之為“平面”,并且在一個空間中組合二個或更多的平面。把存儲器劃分到分立的平面225a、225b中。平面225a、225b具有不同的平面存儲器區(qū)219a、219b。來自程序結(jié)構(gòu)224的一個線程在每個平面中的一個棧里運行,并且多個線程1-N可分別在多個棧1-N里運行。盡管這些線程在該并行計算系統(tǒng)中同時運行,在任何給定時刻最多只有一個線程訪問一個平面存儲器。平面存儲器219a、219b分別含有全局存儲器220a、220b,堆空間221a、221b和自由空間222a、222b,它們是分別為每個平面225a、225b組織和設置的。從而每個平面由通過線程、全局存儲器、堆存儲器和棧存儲器定義的一個語境構(gòu)成。在任何給定時間只有一個線程使用一個語境。還明顯地說明一個公用(平面)區(qū)222c,其由別的情況下分立的平面存儲器219a、219b共享。從而,從程序員的角度,該平面存儲器結(jié)構(gòu)具有運行分立的程序的外觀和功能性,如圖1中所示,盡管實際中它是按多個并行線程操作的,因為對于棧223a、223b中的每個線程公用(平面)存儲器222c中的所有數(shù)據(jù)結(jié)構(gòu)是可使用的并且越過不同的平面堆221a、221b中的選定數(shù)據(jù)結(jié)構(gòu)是可使用的。
      在本文中把多個平面聚集到一種存儲器結(jié)構(gòu)中并且所有平面并行地運行單個程序結(jié)構(gòu)的不同線程稱之為一個“空間”。程序的集合在這種空間中構(gòu)成單個相容的程序結(jié)構(gòu)??臻g230代表本發(fā)明的并行處理系統(tǒng)中的層次結(jié)構(gòu)的第二層。在圖4中描述多個空間230、230’、230”,其中每個空間含有一個或多個平面存儲器結(jié)構(gòu)。每個空間包含不同的程序224、224’、224”,彼此獨立運行。以類似于公用(平面)存儲器的方式,可在不同空間之間把自由存儲器指定成為公用(空間)。在不同空間230、230’、230”上指定的公用(空間)存儲器指定成為222d。多個空間代表本發(fā)明中的層次結(jié)構(gòu)的第三層。
      不顯式地成為公用的全局或堆存儲器對象是通過具體語言成分表示的。這些盡管在所有平面中是通過相同語言成分表示的對象通過每個平面中的分立存儲器予以支持。這樣,為每個線程自動例示各語言成分。這使程序員擺脫管理和分離這些存儲器對象的繁重任務。本發(fā)明的存儲器創(chuàng)立還提供在平面和空間之間共享信息的規(guī)定裝置,從而使程序員擺脫設置這些規(guī)定的負擔。
      如圖5中所示,在一指定空間中的每個平面包括語境(一個線程、堆、棧、全局數(shù)據(jù))和相同的程序結(jié)構(gòu),其中后者使用相同的可執(zhí)行程序代碼??臻g中的每個平面使用相同的程序結(jié)構(gòu)。在不同的空間之間,程序結(jié)構(gòu)可能相同或者可能不同。本文所使用的“語境”指的是索引結(jié)構(gòu),其實現(xiàn)全局變量的分離從而每個線程容易訪問各個全局變量。使用本發(fā)明的存儲器結(jié)構(gòu)的程序員建立所需的具體語境并利用該語境調(diào)用在公用(平面)或公用(空間)存儲器外部的該具體語境內(nèi)操作的程序。
      語境索引結(jié)構(gòu)具體地把每個全局變量的整數(shù)標識鏈接到諸如存儲器地址的唯一標識。例如如圖6中所示,在平面1內(nèi)存在全局變量G1、G2、G3,和在平面2內(nèi)存在分立的全局變量G1,G2。指定成G4(平面1,語境1),G3’(平面2,語境2)和G5(平面1,語境1),G4’(平面2,語境2)的全局數(shù)據(jù)變量指定成駐留在空間內(nèi)的公用(平面)中。第一平面中的每個語境1以及第二平面中的語境2能使用一個索引圖把它自己的用于全局變量的整數(shù)ID轉(zhuǎn)換這些全局變量的唯一ID。如所示,公用(平面)中G4和G3’以及G5和G4’是相同的對象。
      圖7描述通過公用(空間)存儲器鏈接的多個空間,其中每個空間具有多個平面和一個公用程序??臻g1包括各使用程序1的平面1和平面2??臻g2包括各使用不同程序2的平面1和平面2。公用(空間)存儲器對空間1和空間2中的每個是可使用的。以類似于圖6的方式,圖8示出如何利用不同的索引ID通過每個空間的語境訪問公用(空間)全局數(shù)據(jù)對象G6。例如,語言成分可提供定義或語法從而各語境可訪問公用(平面)或公用(空間)中的全局變量。在本發(fā)明的存儲器結(jié)構(gòu)中,公用(空間)存儲器可包含可以由不同空間中的不同程序共享的信息。從而,數(shù)據(jù)可存儲在可對特定平面訪問的默認全局數(shù)據(jù)存儲器、可在一個空間的不同平面上通過語境訪問的公用(平面)存儲器或可在不同空間上通過語境訪問的公用(空間)存儲器中的之一上。如所示,公用(空間)中的G6,G5’,G8”和G7是相同的對象。
      最好在本發(fā)明的存儲器結(jié)構(gòu)中建立根據(jù)IEEE標準1481-1999建立的可交換函數(shù)表,其中為每個空間建立一個這樣的函數(shù)表。在下面的表1和表2中描述函數(shù)表,其中為具體空間中使用的選定函數(shù)名(FCN名)建立一個函數(shù)指針(FCN指針)。
      表1FCN指針FCN名* FCN1* FCN2* FCN3表2FCN指針FCN名* FCN4* FCN5* FCN6應用程序可在每個空間中裝入一個程序。該應用和裝入的程序各進行函數(shù)表交換。函數(shù)表交換代表在該應用和裝入到一具體空間中的程序之間的服務交換。所有函數(shù)調(diào)用都具有一個語境自變量以便在公用(平面)或公用(空間)存儲器中找到所請求的數(shù)據(jù)。語境傳遞索引結(jié)構(gòu)位于何處。應用或裝入程序的函數(shù)調(diào)用包含語境的標識以便定位數(shù)據(jù),該數(shù)據(jù)或者是一平面內(nèi)的被當作默認位置的數(shù)據(jù)或者是公用(平面)或公用(空間)存儲器的位置。
      DCL(延遲計算器語言)是許多專用集成電路(ASIC)供應商用來說明他們的技術的一種語言。這些DCL庫是由應用動態(tài)裝入的可執(zhí)行模塊。應用供應商和ASIC供應商都遵循嚴格定義的標準??梢允褂肈CL和該接口定義建立依據(jù)本發(fā)明的并行處理系統(tǒng)。DCL系統(tǒng)(其包括一個運行期環(huán)境、一個編譯程序以及由它編譯好的各模塊)實現(xiàn)一個其中每個語境上最多執(zhí)行一個線程的語境系統(tǒng)。在應用或庫的請求時構(gòu)建一個語境。響應新語境請求,DCL運行期環(huán)境建立每個狀態(tài)變量的一份分離拷貝。狀態(tài)變量包括由ASSIGN語句建立的變量、表和模塊結(jié)構(gòu)。每個狀態(tài)是通過一個狀態(tài)變量數(shù)組表示的,其中每個語境具有它自己的狀態(tài)變量。系統(tǒng)為每個新語境執(zhí)行該語境上的各初始化語句從而把各狀態(tài)變量預置到已知值。
      DCL的基本操作要求把當前語境變量(標準結(jié)構(gòu))傳送到所有語句。語境變量對其執(zhí)行時的控制流和數(shù)據(jù)空間、平面提供完整的說明。運行期支持程序?qū)⑼该鞯剡x擇支持應用請求以及DCL程序并行執(zhí)行所需的適當存儲器對象。使用DCL時,可利用ASSIGN語句建立全局變量。這允許在編譯時刻通過語句類型(ASSIGN)識別全局變量,并且可通過單個函數(shù)集中更新全局變量。
      本發(fā)明通過語境分離ASSIGN結(jié)果,例如其中每個數(shù)組元素和一個語境相關的ASSIGN變量數(shù)組的結(jié)果。這會允許不必串行化地并行讀和寫ASSIGN變量值。DCL中的TABLEDEF語句讀入并且搜索信息表。本發(fā)明通過前面說明的語境系統(tǒng)分離這些表,這允許在真正并行方式下讀、搜索和更新這些表,無須串行化。
      盡管DCL允許應用把其它模塊的調(diào)用子規(guī)則添加到已存在的系統(tǒng)中,本發(fā)明還把添加到一個空間上的子規(guī)則和添加到另一個空間上的子規(guī)則分離開。這會允許應用保持對裝入的各個庫的獨立觀察。本發(fā)明還提供允許在庫開發(fā)員的請求下在多個語境上存在相同狀態(tài)變量的結(jié)構(gòu)以及在這些點上強制串行化的結(jié)構(gòu)。除了庫開發(fā)員的明確請求之外,各語境典型地假定狀態(tài)變量獨立性。由于只需要推敲必要的公用點,開發(fā)并行算法的方便性得到明顯改進。
      在操作中,通過自然地分開與線程相關的所有活動和語境,本發(fā)明獲得優(yōu)點。除了明確請求之外,不同線程在不同語境上操作并且從而彼此不變換。這消除掉并行處理中典型的串行化限制,從而本發(fā)明既簡化思維過程又簡化具體實現(xiàn)。
      高性能無阻塞并行存儲管理器本發(fā)明還通過使用線程語境提供并行環(huán)境中使用的無阻塞、有效存儲管理。該存儲管理器為每個語境保持分離的可使用的存儲器池,并且只從這些池對所考慮的語境分配存儲器。許多線程(如前面說明那樣每個語境一個線程)同時訪問該存儲管理器以在不會在多半時間內(nèi)阻塞執(zhí)行下得到或釋放存儲器。每當多于一個的線程同時請求一個要分配或釋放的存儲器區(qū)現(xiàn)有技術實施阻塞執(zhí)行,然而本發(fā)明僅當多于一個的語境同時耗盡存儲器池并且必須調(diào)用分配存儲器的系統(tǒng)服務時才阻塞執(zhí)行。本發(fā)明最好從系統(tǒng)得到一些大的存儲器區(qū),并且根據(jù)各線程的需要劃分存儲器區(qū)。由于僅當為一線程試圖得到這一些大區(qū)域的同時另一個線程也從系統(tǒng)得到它的大的區(qū)域時才出現(xiàn)線程的阻塞,通常本發(fā)明的性能遠遠超過常規(guī)方法。即使因一個線程調(diào)用系統(tǒng)以分配另一個大塊而阻塞,本發(fā)明仍能為其它線程對存儲器的請求服務只要它們的相關存儲器池仍在其中具有存儲器區(qū)的話。在常規(guī)情況下,可能性是并行應用只承受部分執(zhí)行阻塞,而且即使如此,它也是很少出現(xiàn)的。
      在釋放存儲器上存在二個方面,若一語境只釋放它分配的存儲器區(qū),在不阻塞需要該區(qū)的線程或任何其它線程下進行釋放操作。為了使當一個語境釋放由另一個語境分配的存儲器出現(xiàn)的串行化為最小,建立一個“延遲釋放”表。當一語境釋放一個不是它分配的存儲器區(qū)時,本發(fā)明把該區(qū)放在“延遲表”中。每個語境具有一組延遲表,并且每組延遲表具有用于每個其它線程的延遲表。接著把該存儲器放在識別釋放該區(qū)的語境以及另一個要對其臨時釋放的語境的延遲表中。這些表增長直至它們超過可由應用程序設置的一個尺度。當超過該尺度時,以不阻塞的方式把用于每個其它語境的延遲表傳送另一個現(xiàn)在擁有它的接收方語境。每個存儲器區(qū)中具有一個標記,該標記指示哪個語境分配該區(qū)。一旦完成傳送,發(fā)送方語境在接收方語境的已知點中不阻塞地設置一個標記。
      當一語境必須分配存儲器區(qū)時,在它向系統(tǒng)請求空間之前,它檢查它是否已經(jīng)從其它語境接收任何延遲釋放。若是,它回收這些存儲器區(qū)并試圖從它們滿足請求以代替調(diào)用系統(tǒng)服務。這更多地消除掉阻塞。
      接收方語境以不阻塞的方式回收被延遲的塊,并且這可以是異步的以避免阻塞。這種控制數(shù)據(jù)結(jié)構(gòu)布局以及操作次序為在異步環(huán)境中成功回收創(chuàng)造了條件,其唯一可能的代價是錯過處理過程中添加的一些回收。這些錯過的回收不會丟失,而是在下個回收周期內(nèi)收回。
      如圖9中所示,并行處理下操作的第一線程的語境1在對系統(tǒng)堆存儲器300的初始要求下得到包括存儲器塊310a、310b、310c、310d的自由存儲器310的一部分或池,其充當用于該具體語境的堆。任何數(shù)量的多個語境1-N可得到它們自己擁有的分立的存儲器池,例如線程N的語境N得到它自己的帶有存儲器塊320a、320b、320c、320d的存儲器池320。在分配存儲器之前用預定的語境標識符預標記池310、320中的每個塊。每個存儲器池310、320具有的存儲器塊多于它在對系統(tǒng)堆300作出初始要求時所需要的塊。圖10更詳細地示出對不使用的存儲器塊的回收。
      在第一種情況下,若某具體語境釋放一個它不需要的存儲器塊,并且若該存儲器塊曾預標識為分配給該相同語境,簡單地把該塊標識為仍可由該具體語境使用。在第二種情況下,若某具體語境釋放一個它不需要的存儲器塊,并且若該存儲器塊曾預標識為分配給另一個不同的語境,在和該另一個不同的語境對應的回收表上把該塊收集到該具體語境的相同的存儲器池中。圖10描述這樣的情況,其中用于語境1的存儲器池310釋放不需要的存儲器塊310e-h。由于這些存儲器塊310e-h事先用語境2的標識標記,塊310e-h保持在和語境2對應的語境1回收表312a中。當回收表312a上的塊的尺寸和/或內(nèi)容超過應用規(guī)定的尺度,語境1把開關314從314b置到314a,以指示各語境可回收回收表312a中的存儲器。語境1會把開關313置到313b。從而在語境2回收表312a中存儲器之前,把標記成屬于語境2的相繼自由的存儲器塊放在回收表312b中。當語境2用光堆存儲器320時,替代從系統(tǒng)存儲器尋找可使用的存儲器,它檢查是否已把某個回收表做成是可使用的并且定位可使用的存儲器塊310e-h,接著它釋放這些塊并包含到它自己的堆存儲器池320中。接著語境2把開關314置到314b,以表示語境2已處理該回收表并且現(xiàn)在能處理另一個回收表。類似地,當語境1需要比它自己存儲器池中的更多的存儲器時,它從其它語境,例如語境2,建立的回收表尋找存儲器,定位可使用的存儲器320e-h,釋放它們并把它們包含到存儲器池310中,全都不必從主系統(tǒng)存儲器中尋找存儲器。當回收表312b超過應用規(guī)定的尺度時,出現(xiàn)類似的操作,其中語境1把開關314從314b置到314c以指示語境2可回收表312b中的存儲器而且語境1把開關313置到313a,從而在語境2回收312b中的存儲器之前把標記為屬于語境2的相繼自由的存儲器塊放到表312a中。當語境2回收回收表312b中的存儲器時,它把開關314置到314b,以指示語境2已處理該表并且現(xiàn)在可處理其它回收表。本發(fā)明對每對語境允許任意數(shù)量的回收表。
      從一個語境可得到的對另一個標記的存儲器塊最好實際上在該另一個語境尋找附加的存儲器塊之前不被釋放和由該另一個語境回收。若在預定的時間周期后該另一個語境不回收這些存儲器塊,這個語境可回收它們供使用,同時仍在這些塊上保持該另一個語境的標識。在每個語境對主系統(tǒng)存儲器尋找存儲器之前,這些操作都可出現(xiàn)。
      對本發(fā)明的這個方面的測試已示出,和常規(guī)現(xiàn)有方法相比,本并行處理存儲器存取要快20.7倍。把計算控制的相異流用作為抽象數(shù)據(jù)流和不同地對待語境和數(shù)據(jù)的現(xiàn)有技術不同,本發(fā)明實現(xiàn)一種在并行環(huán)境中使用語境的新范式。本發(fā)明實質(zhì)建立語境并且捕獲它,把它和從程序員觀點為抽象的數(shù)據(jù)對象相捆綁。這使得軟件把線程(或控制流)對待成數(shù)據(jù)對象。這具有一些優(yōu)點。一個優(yōu)點是線程建立一次并根據(jù)需要再使用。這避免流行方法中的建立并破壞線程的成本。另一個優(yōu)點是線程是數(shù)據(jù)對象,這消除掉控制和數(shù)據(jù)之間流行的二分,并且賦予程序員更大的想象問題的解決辦法的思維空間。另一個優(yōu)點是,由于線程是數(shù)據(jù)對象,軟件開發(fā)員可使用以前不可能的操作。這些操作包括但不限于把線程附著到其它數(shù)據(jù)對象上(供以后的執(zhí)行中使用)。作為參數(shù)傳送線程(控制流)等等。
      本發(fā)明的這個方面實現(xiàn)具有在其上等待的線程的抽象數(shù)據(jù)對象。如任何傳統(tǒng)數(shù)據(jù)對象那樣,這種數(shù)據(jù)對象可在到處傳送并且可編入到程序的數(shù)據(jù)結(jié)構(gòu)中。在需要時,軟件向數(shù)據(jù)對象分配具體工作,接著等待的線程醒來并進行工作,在完成該工作后,線程再次等待以后的工作??蓮膽玫娜魏尾糠帧娜魏涡枰臅r間分配工作。在應用程序作出決定之前不摧毀線程。
      這種方法大大簡化需要控制通過線程使用的并行操作的軟件的操作。通過線程的抽象,從程序員的視角中去掉繁重的細節(jié)。通過把等待線程封裝成數(shù)據(jù)對象,由于越過控制流和數(shù)據(jù)之間的二分,程序員具有更多的自由度和更大的解決辦法范圍。
      圖11是把線程實現(xiàn)為對其分配工作的抽象數(shù)據(jù)對象的示意流程圖。第一線程指定成為一個數(shù)據(jù)對象(“bottle”),對于執(zhí)行程序結(jié)構(gòu)指定給它的工作它常規(guī)地是不調(diào)度地和不可用的。這種工作可以是通常能由并行處理中各線程實現(xiàn)的任何工作單元,例如要使用的函數(shù)、收集參數(shù)、關于把結(jié)果放在何處的指令等等。“bottle”和單個語境相關并且只能通過別的語境激勵以完成它的工作。在本發(fā)明中,每個bottle最好不能通過它自己的語境激勵。bottle具有二個狀態(tài),第一狀態(tài)為程序結(jié)構(gòu)處理工作,在第二狀態(tài)在不消耗執(zhí)行時間的暫停狀態(tài)下不調(diào)度地等待要處理的工作。bottle具有一個關聯(lián)隊列(Q),其中可通過一個或多個其它語境放置所請求的工作。在操作中,bottle為工作請求檢查該隊列,并且若在該隊列中存在等待的工作,bottle鎖定該隊列、移出一個工作單元、解鎖隊列并執(zhí)行該請求的工作。當在該工作單元中完成該請求的工作時,它把結(jié)果標記成是完成的并再次檢查該工作隊列。bottle順序地處理等待的工作,并且只要隊列中有等待執(zhí)行的工作實質(zhì)上在無盡的循環(huán)下操作。若該隊列是空的,bottle進入死鎖、不調(diào)度狀態(tài)以等待某個其它語境在該隊列中放入工作并進而使bottle是調(diào)度的和重新檢查工作隊列。
      代表由該程序結(jié)構(gòu)管理的與第一或“bottle”線程分離的一個獨立控制流的第二線程在圖11中用“l(fā)auncher”標識。launcher用于為“bottle”準備要處理的工作。通過鎖定工作隊列,在工作隊列上設置工作單元和接著解鎖隊列,launcher把工作放在由“bottle”處理的隊列中。若“bottle”是暫停的,launcher使它受到調(diào)度。launcher可繼續(xù)向bottle隊列增加其它工作。當把工作置入bottle隊列時,它把該工作標記為是未完成的。任何其它語境(bottle語境外面)可檢查某具體結(jié)果是否完成(假定每個其它語境訪問結(jié)果結(jié)構(gòu))。
      這樣,代替在完成單個任務后摧毀它,根據(jù)需要由程序結(jié)構(gòu)再次使用第一線程。
      本文說明的并行軟件系統(tǒng)可建立并存儲在機器中,最好是利用常規(guī)計算機可讀代碼在計算機可使用介質(zhì)上的常規(guī)計算機,在其它情況下為常規(guī)程序存儲部件上,例如半導體芯片、只讀存儲器、光讀介質(zhì)如CD-或DVD-ROM或者磁介質(zhì)如軟盤或計算機硬盤機。
      因此,本發(fā)明提供一種比起現(xiàn)有技術更少遭受出錯的并行處理結(jié)構(gòu)。在訪問公用系統(tǒng)服務例如數(shù)據(jù)結(jié)構(gòu)中,本發(fā)明的并行處理結(jié)構(gòu)較少遭受串行化限制。在分配或釋放存儲器中它也較少遭受串行化限制。另外,不同線程之間存在較少的交互。本發(fā)明提供一種在建立、管理和終止線程中減少代價和錯誤的并行處理結(jié)構(gòu)。軟件還可把每個線程當成數(shù)據(jù)對象。
      盡管連帶一特定的優(yōu)選實施例具體地說明了本發(fā)明,根據(jù)上面的說明許多更替、修改和改變對于業(yè)內(nèi)人士是明顯的。從而預期附屬權(quán)利要求書包含屬于本發(fā)明的真正范圍和精神的任何這樣的更替、修改和改變。
      從而,在說明本發(fā)明后我們的權(quán)利要求是
      權(quán)利要求
      1.一種在并行處理計算系統(tǒng)中分配存儲器方法,包括設置可用于并行處理的系統(tǒng)存儲器;設置第一和第二線程,每個所述線程代表由一程序結(jié)構(gòu)管理的獨立控制流并執(zhí)行不同的程序任務;利用第一線程對系統(tǒng)存儲器請求存儲器;向第一線程分配超過該請求的第一存儲器池并關聯(lián)該存儲器池和第二線程;利用第二線程對系統(tǒng)存儲器請求存儲器;向第二線程分配超過該請求的第二存儲器池并關聯(lián)該存儲器和第一線程;利用第一線程對第二線程請求更多的存儲器;以及在不對系統(tǒng)存儲器作出請求下從第二線程對第一線程分配第二存儲器池的一部分。
      2.權(quán)利要求1的方法,其中第一和第二存儲器池中的每一個包含由系統(tǒng)存儲器標記為用于第一和第二線程的存儲器部分,并且包括由第二線程釋放標記為用于第一線程的第一存儲器池的一部分和把標記為用于第二線程的第二存儲器池的一部分分配給第一線程。
      3.權(quán)利要求2的方法,其中在第二線程釋放預定的最少數(shù)量的這樣的存儲器之前不對第一線程分配標記為用于第一線程的該部分的第二存儲器池。
      4.權(quán)利要求2的方法,其中在第一線程請求來自第二線程的更多存儲器之前不對第一線程分配標記為用于第一線程的這部分的第二存儲器池。
      5.權(quán)利要求1的方法,其中第一和第二存儲器池中的每一個包含由系統(tǒng)存儲器標記為用于第一和第二線程的存儲器部分,并且包括第二線程對在一段預定時間標記為用于第一線程的第二存儲器池的一部分釋放,而且若第一線程在該預定時間內(nèi)不請求存儲器為第二線程回收標記為用于第一線程的這部分的第二存儲器池。
      6.一種機器可讀的程序存儲部件,其有形地含有可由機器執(zhí)行的指令程序,以在并行處理計算系統(tǒng)中實現(xiàn)分配存儲器的方法步驟,所述并行處理計算系統(tǒng)具有可用于并行處理的一個系統(tǒng)存儲器并且具有第一和第二線程,每個所述線程代表由一程序結(jié)構(gòu)管理的獨立控制流并執(zhí)行不同的程序任務,所述方法步驟包括利用第一線程對系統(tǒng)存儲器請求存儲器;向第一線程分配超過該請求的第一存儲器池并關聯(lián)該存儲器池和第二線程;利用第二線程對系統(tǒng)存儲器請求存儲器;向第二線程分配超過該請求的第二存儲器池并關聯(lián)該存儲器池和第一線程;利用第一線程對第二線程請求更多的存儲器;以及在不對系統(tǒng)存儲器作出請求下從第二線程對第一線程分配第二存儲器池的一部分。
      7.權(quán)利要求6的程序存儲部件,其中第一和第二存儲器池中的每一個包含由系統(tǒng)存儲器標記為用于第一和第二線程的存儲器部分,并且該方法包括由第二線程釋放標記為用于第一線程的第一存儲器池的一部分和把標記為用于第二線程的第二存儲器池的一部分分配給第一線程。
      8.權(quán)利要求7的程序存儲部件,其中在第二線程釋放預定的最少數(shù)量的這樣的存儲器之前不對第一線程分配標記為用于第一線程的該部分的第二存儲器池。
      9.權(quán)利要求7的程序存儲部件,其中在第一線程請求來自第二線程的更多存儲器之前不對第一線程分配標記為用于第一線程的這部分的第二存儲器池。
      10.權(quán)利要求6的程序存儲部件,其中第一和第二存儲器池中的每一個包含由系統(tǒng)存儲器標記為用于第一和第二線程的存儲器部分,并且該方法包括第二線程對在一段預定時間標記為用于第一線程的第二存儲器池的一部分釋放,而且若第一線程在該預定時間內(nèi)不請求存儲器為第二線程回收標記為用于第一線程的這部分的第二存儲器池。
      11.一種并行處理計算系統(tǒng)中使用的存儲器結(jié)構(gòu),包括一個可用于并行處理的系統(tǒng)存儲器;指定的并且可由第一線程使用的第一存儲器池,該第一線程代表由一程序結(jié)構(gòu)管理的一個控制流;以及指定的并且可由第二線程使用的第二存儲器池,該第二線程代表一個獨立于第一線程由一程序結(jié)構(gòu)管理的控制流,第一和第二存儲器池中的每一個具有標記為用于另一個線程的存儲器池部分。
      12.權(quán)利要求11的存儲器結(jié)構(gòu),其中第一和第二存儲器池中的每一個包含由系統(tǒng)存儲器標記為用于第一和第二線程的存儲器部分。
      13.一種用于并行計算的計算機程序產(chǎn)品,其包括在其中含有計算機可讀代碼的計算機可使用的介質(zhì),所述計算機代碼定義包括如下的計算機存儲器結(jié)構(gòu)指定的并且可由第一線程使用的第一存儲器池,該第一線程代表由一程序結(jié)構(gòu)管理的一個控制流;以及指定的并且可由第二線程使用的第二存儲器池,該第二線程代表一個獨立于第一線程由一程序結(jié)構(gòu)管理的控制流;第一和第二存儲器池中的每一個具有標記為用于另一個線程的存儲器池部分。
      14.權(quán)利要求13的計算機程序產(chǎn)品,其中第一和第二存儲器池中的每一個包含由系統(tǒng)存儲器標記為用于第一和第二線程的存儲器部分。
      全文摘要
      一種在并行處理計算系統(tǒng)中分配存儲器的方法,其中首先設置可用于并行處理的系統(tǒng)存儲器并且設置第一和第二線程。該方法包括:利用第一線程對系統(tǒng)存儲器請求存儲器,向第一線程分配第一存儲器池并關聯(lián)該存儲器池和第二線程;利用第二線程對系統(tǒng)存儲器請求存儲器;向第二線程分配第二存儲器池并關聯(lián)該存儲器池和第一線程;利用第一線程對第二線程請求更多的存儲器;以及在不對系統(tǒng)存儲器作出請求下從第二線程對第一線程分配第二存儲器池的一部分。
      文檔編號G06F9/50GK1330321SQ0112105
      公開日2002年1月9日 申請日期2001年6月18日 優(yōu)先權(quán)日2000年6月20日
      發(fā)明者哈里·J·比迪三世, 彼得·C·阿爾門德福 申請人:國際商業(yè)機器公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1