TWI455030B - 決定程式任務之平行度的方法與計算裝置及其機器可讀取媒體 - Google Patents

決定程式任務之平行度的方法與計算裝置及其機器可讀取媒體 Download PDF

Info

Publication number
TWI455030B
TWI455030B TW101110861A TW101110861A TWI455030B TW I455030 B TWI455030 B TW I455030B TW 101110861 A TW101110861 A TW 101110861A TW 101110861 A TW101110861 A TW 101110861A TW I455030 B TWI455030 B TW I455030B
Authority
TW
Taiwan
Prior art keywords
task
executed
parallel
determining whether
identification number
Prior art date
Application number
TW101110861A
Other languages
English (en)
Other versions
TW201303738A (zh
Inventor
jeffrey Olivier
Zhiqiang Ma
Paul Petersen
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of TW201303738A publication Critical patent/TW201303738A/zh
Application granted granted Critical
Publication of TWI455030B publication Critical patent/TWI455030B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/458Synchronisation, e.g. post-wait, barriers, locks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Debugging And Monitoring (AREA)

Description

決定程式任務之平行度的方法與計算裝置及其機器可讀取媒體
本發明關係於決定程式任務之平行度的方法與裝置。
序向程式以序向順序執行程式的各個個別任務。然而,很多現行電腦及計算裝置包含多核心技術並能平行執行程式的多重任務。因此,為了最大化多核心技術的優點,序向程式可以平行化。為如此,序向程式係被重組態,使得各種任務係以彼此平行方式執行。然而,平行程式係較序向程式更困難除錯及驗證。例如,取決於在任務間之資料相依性,如果兩或更多平行執行之任務想要存取相同記憶體位置,則可能發生競賽狀況及/或其他非決定狀況。因此,各種予以平行執行的任務的平行度必須被分析。
序向程式的各種任務共相關於可以或可不與一或更多其他任務平行執行的一組指令。該程式可以以根任務開始,其產生(即初始)其他任務。各個任務可以不產生額外任務、或產生一額外任務、或產生多數額外任務。產生另一任務的一任務典型稱為被產生任務的母任務,被產生之任務稱為子任務。具有相同母任務的兩任務係典型稱為同輩任務。
雖然本案的概念係容許各種修改及替代形式,但其特 定例示實施例已經以圖中之例示方式加以顯示並將於此詳細說明。然而,應了解的是,沒有意圖以限制本案的概念至特定所揭示形式,但相反地,則想要涵蓋所有修改、等效及替換仍落在隨附申請專利範圍所定義的精神與範圍內。
以下說明中,各種特定細節,例如邏輯實施法、運算碼、指明運算元的手段、資源分割/共享/複製實施法、系統元件的類型及相互關係、及邏輯分割/積集選擇係被說明,以提供對本案揭示的更完全了解。然而,將可以為熟習於本技藝者所了解的是,本案之實施例可以在沒有這些特定細節下實施。在其他實例中,控制結構、閘級電路及全軟體指令順序並未被詳細顯示,以不混淆本發明。熟習於本技藝者能以所包含之發明說明,在無須過度實驗下,將能實施適當功能。
在說明書中之指明“一實施例”、“實施例”、“例示實施例”等表示於此所述之實施例可以包含一特定特性、結構或特徵,但每一實施例可不必然包含該特定特性、結構或特徵。再者,此等用語可能不必然用於相同實施例。再者,當有關於一實施例所描述一特定特性、結構或特徵時,則補述在熟習於本技藝者之知識內配合其他不管已否詳述之其他實施例作用此特性、結構或特徵。
本發明之實施例可以以硬體、韌體、軟體或其任意組合加以實現。於電腦系統實施之本發明之實施例可以包含一或更多匯流排為主互連於元件及/或一或更多點對點互 連的元件之間。本發明之實施例也可以實施為儲存在一或更多非暫時、機器可讀取媒體的指令,其可以為一或更多處理器所讀取及執行。非暫時、機器可讀取媒體可以包含以一形式儲存或傳送資訊的任一非暫時機制,該形式係可以為一機器所讀取(例如,計算裝置)。例如,非暫時、機器可讀取媒體可以包含唯讀記憶體(ROM)、隨機存取記憶體(RAM)、磁碟儲存媒體、光學儲存媒體、快閃記憶體裝置及其他的任一或組合。
如圖1至4所示,可以在序向程式上執行決定電腦程式的各種任務的平行度的方法100,以決定是否該序向程式之兩或更多的任務可以彼此平行執行。如上所討論,一任務為可以或可不平行另一任務(即另一組指令)執行的一組指令。在其他實施例中,序向程式的個別任務可以被指明。例如,取決於所用程式之類型,個別任務可以被命名於該程式的軟體碼中。當然,方法100可以使用未命名程式。除了各種任務外,序向程式也可以包含一或更多等待同步化(例如,“wait_for_all”同步化)。此等待同步化係被用以表示所有後輩任務必須在任意後續任務或其他碼執行之前完成。在一些實施例中,一隱含等待同步化係假設出現在每一任務的結束,此各個母任務等待所有其後輩任務在完成其本身前完成。另外,等待同步化可以在部份實施例中發生於任務本身內。
一序向命名軟體程式500的例子,其包含多數各種任務,其中之部份係被平行執行,係被顯示於圖5中所示之 虛擬碼。程式500包含幾個巢套迴路及等待同步化。明確地說,例示程式500產生十一個任務具有三個等待同步化器(即“wait_for_all”同步化)內置於各種任務之間。雖然程式500係為序向程式,程式500的部份任務可以取決於任務間之資料相依性而平行執行。程式500的任務的執行歷史係被顯示於圖6中,作為直接非循環圖(DAG)600。因此,程式500之各個任務已經根據任務產生之順序,被指定任務識別數(“任務ID”)。由於程式500的序向本質,各個任務係依據深度第一執行被產生或初始,及因此,相關任務ID係被指定於例示圖600中,以上升的數值順序表示。
為了決定程式500的哪些任務可以彼此平行執行,圖表600的幾個特性應被了解。首先,雖然現行任務被執行,但如果相關於另一正執行任務的任務ID係大於現行任務的任務ID,則該另一正執行任務為現行任務的後輩(例如,子、孫、曾孫等)。例如,任務3為任務2的後輩(即子)及任務1的後輩(即孫)。應了解的是,子任務可以一直與前輩任務平行(即,現行任務)執行,除非前輩任務已經執行一等待同步化(即,“wait_for_all”),在子任務完成之後。例如,一等待同步化602係在任務4執行後,實施於圖600中。因此,如果任務2已經執行等待同步化602,則任務4不能平行於其母任務2執行。
也應了解的是,雖然現行任務被執行時,現行任務不能平行於以定義在現行任務產生前執行的前輩任務的任何 部份。此特性係被序向程式500的深度第一執行所確保(即子任務並不能在被以串列執行產生的任務前以平行執行產生)。當然,現行任務可能平行於前輩任務的部份,並將在現行任務完成後被執行。另外,如果兩任務為同輩任務(即兩任務並未具有前輩-後輩關係),則兩任務可以平行執行,除非兩任務的最少共同前輩已經在前一任務完成執行後執行一等待同步化。例如,任務3及4為同輩任務並可以平行執行。然而,雖然任務4及5也是同輩工作,但任務5並不能與任務4平行執行,因為其至少共同前輩任務2已經在前一任務(任務4)完成後及在產生任務5之前,執行等待同步化602。
根據上述圖600的觀察,只有這些現行正被執行的任務需要被追蹤以決定任務的平行度。為如此作,兩資料結構被使用。一任務資料結構係被用以追蹤現正執行任務。任務資料結構700的一實施例係如圖7所示。任務資料結構700包含多數記錄、輸入項或節點702。各個節點702對應於現正執行的任務。如所示,任務資料結構700的各個節點702係被實施為二維陣列並被指定以一任務ID及有關於該任務的等待數。如上所討論,各個任務係被指定以任務ID,其獨特地指明對應於其他現正執行任務的個別節點的任務。另外,各個等待數對應於如下所更詳述之等待同步化執行前的現行任務的最後後輩任務的任務ID。當新任務被產生時,相關任務ID及等待數係被加入至任務資料結構700。另外,當任務完成執行時,其相關任 務ID及等待數係由任務資料結構700移除。在任務資料結構700中表示之現正執行任務係被追蹤及經由使用指向現行任務的節點702的現行任務指標704而指明。當然,應了解的是,其他資料結構也可以使用於其他實施例中,以追蹤現正執行任務。
如以下所更詳述,各個任務的各個歷史記憶體存取也被追蹤及記錄以指明於任務間之資料相依性。為此,記憶體存取資料結構係被使用以追蹤哪些任務已經存取一特定記憶體位址。記憶體存取資料結構800的一實施例係被顯示於圖8中。記憶體存取資料結構800包含多數記錄、輸入項或節點802。各個節點802對應於已經先前為至少一任務所存取的一記憶體位址。如所示,各個節點802係被實施為二維陣列並被指定一記憶體位址及已經被存取之對應記憶體位址的任務識別數名單。如以下所更詳細討論,當一任務存取記憶體位置時,該任務係被相較於其他已經被先前存取的任務的記憶體位置,以決定是否這些任務可以平行執行。另外,有關於現行任務的任務識別數係被加入至存取記憶體位置的任務名單。再者,應了解的是,其他資料結構也可以用於其他實施例中,以追蹤此等記憶體存取。
現參考圖9,任務資料結構700係在所示程式500的各種執行步驟時示於圖9a-9x。在圖9a中,根任務1係被加入至任務資料結構700。根任務係被指定1為任務ID及1為等待數。在圖9b中,任務2產生並加入至任務資 料結構700。任務2係指定以2為任務ID及2為等待數。圖9c中,任務3被產生並加入至任務資料結構700。任務3係被指定以3為任務ID及3為等待數。在圖9d中,任務3已經完成執行並由任務資料結構700移除。任務指標係被減至現正執行任務(任務2)點。在圖9e中,任務4係被產生並加至任務資料結構700。任務4係被指定4為任務ID及4為等待數。在圖9f中,任務4已經完成執行並由任務資料結構700移除。任務指標係被減量至正執行任務(任務2)的點。在圖9g中,任務2在任務4完成後執行等待同步化(見圖6)。因此,任務2的等待數被更新以指明在等待同步化(即任務4)前執行的最後後輩任務,如上所討論。
在圖9h中,任務5被產生並加入至任務資料結構700。任務5被指定以5為任務ID及5為等待數。在圖9i中,任務5已經執行完成並由任務資料結構700移除。任務指標係被減量至現正執行任務(任務2)的點。在圖9j中,任務6產生及加入至任務資料結構700。任務6係被指定6為任務ID及6為等待數。在圖9k中,任務6已經完成執行並由任務資料結構700移除。任務指標係被減量至現正執行任務(任務2)的點。在圖9l中,任務2已經完成執行並由任務資料結構700移除。任務指標係被減量至現正執行任務(任務1)的點。在圖9m中,任務7產生並加入至任務資料結構700中。任務7係被指定以7為任務ID及7為等待數。在圖9n中,任務8被產生並加入至 任務資料結構700中。任務8係被指定8為任務ID及8為等待數。在圖9o中,任務8已經完成執行及由任務資料結構700移除。任務指標係被減量至現正執行任務(任務7)的點。在圖9p中,任務9產生並加入至任務資料結構700。任務9係被指定以9為任務ID及9為等待數。在圖9q中,任務9已完成執行並由任務資料結構700移除。任務指標係被減量至現正執行任務(任務7)的點。在圖9r中,在任務9完成後,任務7執行等待同步化(見圖6)。因此,在如上討論,任務7為等待數係被更新以指明執行於等待同步化前之最後後輩任務(即任務9)。
在圖9s中,任務10產生並加入至任務資料結構700。任務10被指定以10為任務ID及10為等待數。在圖9t中,任務10已經完成並由任務資料結構700移除。任務指標係減量至現正執行任務(任務7)的點。在圖9u中,任務11係被產生及加入至任務資料結構700中。任務11係被指定以11為任務ID及11為等待數。在圖9v中,任務11已經執行完成並由任務資料結構700移除。任務指標被減量至現正執行任務(任務7)的點。在圖9w中,任務7已經完成執行,並由任務資料結構700移除。任務指標係被減量至現正執行任務(任務1)的點。在圖9x中,任務1在任務7完成後執行等待同步化(見圖6)。因此,任務1的等待數係被更新,以指明在等待同步化之前執行的最後後輩任務(即任務11),如上所討論。程式 500現已經完成執行。
如上所討論,任務資料結構700及記憶體存取資料結構800係被使用以決定順序程式(例如,程式500)這些任務可以平行執行。於藉由現正執行任務之記憶體存取時,現正執行任務係相較於其他已經先前存取相同記憶體位置的任務,以決定是否該現行任務可以與先前任務平行執行。取決於在兩任務間之關係及/或任務的前輩,任務的平行度可以被決定。
再次參考圖1至4,決定各種任務的平行度的方法100以方塊102開始電腦程式,其中任務資料結構700及記憶體存取資料結構800係被初始化,及記憶體存取資料結構係被使用以追蹤哪些任務已經存取一特定記憶體位址。在方塊104中,決定是否新任務已經產生(即已經初始)。如果是,方法100進行至方塊106,其中更新任務資料結構700。即,新產生任務係被加入至任務資料結構700中。如此作,如圖2所示,可以執行更新任務資料結構700的方法200。該方法200可以以方塊202開始,其中現行任務指標Current_Task係增量至指向任務資料結構700的新節點702。在方塊204中,現行任務的任務ID係被設定至下一序向任務ID。另外,在方塊206中,現行任務的等待數係被設定為下一序向任務識別數(即,等待數被設定等於現行任務的任務ID)。因此,任務資料結構700係更新以包含指定至新任務之任務ID數及等待數。
回到圖1,在任務資料結構700被更新後,或如果沒有新任務產生時,方法100進行至方塊108。在方塊108,決定是否現行任務已存取任何記憶體位置。如果是,該方法100進行至方塊110,其中現行任務係比較已經存取相同記憶體位置的其他任務,以決定是否現行任務可以與其他任務的一或更多平行執行。例如,參考圖3,用以決定存取共同記憶體位置的任務間之平行度的方法300以方塊302開始。在方塊302中,決定是否為方塊322存取之記憶體位址任務已經先前為另一任務所存取。如果否,則方法300進行至方塊316,其中記憶體存取資料結構800被更新。即,新節點802係被建立及存取記憶體位置及現行任務的任務ID係被加入至在新節點中之記憶體存取資料結構800。
回到方塊302,如果記憶體位址已經先前為另一任務所存取,則方法進行至方塊304。在方塊304中,下一任務已經先前存取的記憶體任置已經由記憶體存取資料結構800檢索。例如,一變數Other_Task_ID可以被設定等於相關記憶體存取名單的下一任務的任務ID。在方塊306中,決定是否其他任務為現行任務的後輩(例如,子、孫、曾孫等)。即,決定是否其他任務的任務ID為大於現行任務的任務ID。如果是,則方法300進行至方塊308。在方塊308中,決定是否現行任務等待後輩任務完成執行。如上所討論,任務可以被指示藉由在另一任務後插入等待同步化命令(例如,wait_for_all命令)以等待該另一 任務的完成。其可以決定是否現行任務等待後輩任務,藉由比較另一任務(即後輩任務)的任務ID與現行任務的等待數,如在方塊308所示,其係在任務資料結構700中更新,如在圖9中所討論地執行等待同步化命令。
如果另一後輩任務的任務ID大於現行任務的等待數,則決定該現行任務並未等待該後輩任務完成執行並可以與該另一後輩任務平行執行。因此,方法300進行至方塊310,其中平行度報告係被更新,以表示現行任務可以與該後輩任務平行執行。然而,如果該另一後輩任務的任務ID並未大於現行任務的等待數,則決定現行任務等待該另一後輩任務完成執行且不能與該後輩任務平行執行。因此,方法300進行至方塊312,其中平行度報告係被更新,以表示現行任務不能與該另一後輩任務平行執行。
回頭參考方塊306,如果另一任務被決定不是現行任務的後輩(即該另一任務的任務ID係不大於現行任務的任務ID),方法300進行至方塊314。在方塊314中,決定是否該另一任務為現行任務的母任務。如此作,前輩任務指標可以用以以現行任務的母任務開始“喚醒”任務樹狀資料結構700。在每一代位準中,前輩任務的任務ID(即為前輩任務指標所現行參考任務)係與另一任務的任務ID相比。因此,如果該前輩任務指標係指向該現行任務的母任務及前輩任務及該另一任務的任務ID係相同的,決定該另一任務為現行任務的母任務。
如果該另一任務係被決定為現行任務的母任務,則決 定現行任務不能與該另一任務平行執行,或者決定在現行任務的產生之前,執行該另一任務的該部份。因此,方法300進行至方塊312,其中平行度報告係被更新以表示現行任務與該另一任務不能平行執行。然而,如果該另一任務並不是該現行任務的母任務,該方法進行至方塊316。在方塊316中,現行任務與該另一任務的最少共同前輩被決定。如此,前輩任務指標係被減量至“喚起”該任務樹,直到該另一任務的任務ID大於為前輩任務指標所參考的任務的任務ID為止。在此一點,為前輩任務所參考的任務係為該現行任務與該另一任務兩者的前輩任務(即,前輩任務係為該兩任務的最少共同前輩任務)。
在最少共同前輩任務已經在方塊316被決定後,方法300進行至方塊318,其中決定是否該前輩任務等待其他任務,以完成執行。為如此作,該另一任務的任務ID係比較該最少共同前輩任務的等待數。如果該另一任務的任務ID係大於該最少共同前輩任務的等待數,則決定最少共同前輩任務並未等待後輩任務以完成執行。因此,現行任務可以與該另一任務平行執行。因此,方法300進行至方塊310,其中平行度報告係被更新以表示該現行任務可以與另一任務平行執行。然而,如果該另一任務的任務ID係不大於該最少共同前輩的等待數,則決定該最少共同前輩等待另一後輩任務以完成執行。因此,現行任務不能與該另一任務平行執行。因此,方法300進行至方塊312,其中,平行度報告係被更新,以表示現行任務不能 與另一後輩任務平行執行。
在平行度報告已經在方塊310、312更新後,方法300進行至方塊320。在方塊320中,決定是否任何額外任務已經先前存取相關記憶體位置。即,決定是否任何額外任務ID係在記憶體名單中。如果是,則方法300回到方塊304,其中,下一任務ID係由記憶體存取名單檢索。然而,如果不是,則方法300進行至方塊322,其中記憶體存取資料結構800以現行任務的任務ID更新。
現回到參考圖1,在現行任務已經檢查與另一存取相同記憶體位置之任務的平行度後,或者如果現行任務並未存取記憶體位置,方法100進行至方塊112。在方塊112中,決定是否現行任務已經完成執行。如果否,則方法100進行至方塊116,其中決定是否一等待同步化係予以執行。一等待同步化可以取決於程式500的結構在一任務執行的任何時間或在其完成後加以執行。如果決定一等待同步化係予以執行,則等待同步化被完成及任務資料結構700係更新於方塊118。即,如上所討論,現行任務的等待數係被設定至等待同步化前的最後完成任務的任務ID,以表示現行任務必須等待前一任務的完成。
現回到參考方塊112,如果決定現行任務已經完成,則方法100進行至方塊114,其中任務資料結構700的現行任務指標Current_Task被減量。在現行任務指標已經在方塊114減量後,或者,在任務資料結構700在方塊118被更新後,則方法100進行至方塊120,其中,決定是否 需要額外任務ID。即,在執行大程式時,所用之任務ID數可以隨時間增加及消耗大量的記憶體資源。
如果需要額外任務ID,則任務資料結構及記憶體存取資料結構可以在方塊122中最佳化。用以最佳化任務及記憶體資料結構700、800的方法400的一實施例係示於圖4中。該方法400以方塊402開始,其中各種最佳化變數係被初始化。例如,該程式的根任務的等待數被設定至1。另外,母任務指標係被設定至根任務及現行位準指標係被設定至根任務的第一子。在方塊404中,決定是否現行位準大於現行任務的位準。如果是,則方法400離開。如果否,則方法400進行至方塊406。在方塊406中,為現行位準指標所參考的任務的任務ID係被設定至等待數加上為母任務指標所參考的任務加二。在方塊408中,為現行位準指標所參考的任務的等待數係被設定至該任務的任務ID加一。另外,在方塊410中,任何對應於記錄於記憶體存取資料結構800之任務ID係根據任務資料結構700的修改任務ID加以更新。即,如果任務ID被再指定於任務資料結構700中時,則相同任務ID係被再指定該相同新任務ID於記憶體存取資料結構800中,如果有的話。隨後,在方塊412中,現行位準指標及母指標被增量。以此方式,現正執行任務的任務ID係被再指定以降低所用之ID的整體數。
回到參考圖1,在任務資料結構700已經最佳化(或如果沒有需要/使用最佳化),則方法100進行至方塊124 。在方塊124中,決定是否所有程式的任務已經完成。如果否,則方法100回到方塊104,其中決定是否新任務已經產生。然而,如果現行程式的所有任務已經完成執行,則方法100進行至方塊126,其中產生平行度報告。如上所討論,平行度報告可以指明這些任務可以平行執行及/或這些任務不能平行執行。該平行度報告可以實施為實體或虛擬報告(例如,該報告可以印刷或顯示在顯示螢幕上)。
應了解的是,在上述說明中,決定是否兩任務可以彼此平行執行可以包含決定是否兩任務的整體可平行執行及/或決定是否一任務的一特定部份(例如,一次組指令)可以與另一任務的整體及/或一部份平行執行。例如,在現行任務的上述平行分析中,如果該另一任務為現行任務的前輩任務,則在平行分析中之有關的前輩任務的特定部份為在現行任務產生前及在最後等待同步化之後執行之前輩任務的該部份。然而,如果該另一任務係為現行任務的同輩任務,則在平行分析之有關同輩任務的部份係為同輩任務的整體(假設同輩任務並未為圖3的方塊316、318的最少共同前輩檢查所過濾)。對於現行任務,在平行化分析中之有關部份係為在最後等待同步化後執行的現行任務的部份,其可以為該現行任務的整體或只是其一部份。
應了解的是,方法100可以執行於任一類型的計算裝置上,其可以執行於此所述之功能,例如桌上型電腦、膝上型電腦、手持電腦、行動計算裝置或其他電腦或計算裝 置。例如,一例示計算裝置1000係被顯示於圖10中。在圖10的所示實施例中,計算裝置1000包含處理器1002、晶片組1006、記憶體1008、顯示器1010、一或更多周邊裝置1012、及通訊電路1014。在一些實施例中,幾個前述元件可以加入於計算裝置1000之母板上,而其他元件也可以經由例如周邊埠通訊地耦接至母板。再者,應了解的是,計算裝置1000可以包含其他元件、次元件、及在電腦及/或計算裝置所常見的裝置,這些為清楚起見並未示於圖10中。
計算裝置1000的處理器1002可以實施為任意類型的處理器,其可以執行軟體/韌體,例如微處理器、數位信號處理器、微控制器或類似物。處理器1002係被顯示實施為單一核心處理器,具有處理器核心1004。然而,在其他實施例中,處理器1002可以實施為具有多處理器核心1004的多核心處理器。另外,計算裝置1000可以包含具有一或更多處理器核心1004的額外處理器1002。
計算裝置1000的晶片組1006可以包含記憶體控制器集線器(MCH或“北橋”)、輸入/輸出控制器集線器(ICH或“南橋”)、及韌體裝置。晶片組1006的韌體裝置可以實施為用以儲存基本輸入/輸出系統(BIOS)資料的記憶體裝置及/或指令及/或其他資訊(例如,用於計算裝置1000的開機時所用之BIOS驅動程式)。然而,在其他實施例中,也可以使用其他組態的晶片組。例如,在一些實施例中,晶片組1006可以實施為平台控制器集線器( PCH)。在此等實施例中,記憶體控制器集線器(MCH)可以為加入或相關於處理器1002,及處理器1002可以直接與記憶體1008通訊(如圖10之虛線所示)。
處理器1002係經由若干通訊路徑通訊地耦接至晶片組1006。這些信號路徑(及如圖10所示之其他信號路徑)可以實施為任意類型信號路徑,其可以促成於計算裝置1000之元件間之通訊。例如,該等信號路徑可以實施為任意數量的有線、纜線、光導、印刷電路板軌跡、導孔、匯流排、干涉裝置及/或類似物。
計算裝置1000的記憶體1008可以實施為一或更多記憶體裝置或資料儲存位置,包含例如動態隨機存取記憶體裝置(DRAM)、同步動態隨機存取記憶體裝置(SDRAM)、雙資料率同步動態隨機存取記憶體裝置(DDR SDRAM)、快閃記憶體裝置、及/或其他揮發記憶體裝置。該記憶體1008係經由若干信號路徑相通地耦接至晶片組1006。雖然只有一單一記憶體裝置1008係示於圖10,但在其他實施例中,計算裝置1000可以包含額外記憶體裝置。各種資料及軟體可以儲存於記憶體裝置1008中。例如,一或更多作業系統、應用程式、程式、程式庫、及驅動程式,其作成為處理器1002所執行的軟體堆疊,並可以在執行時內佇於記憶體1008中。再者,儲存在記憶體1008中之軟體及資料係可以在記憶體1008與周邊裝置1012的資料儲存裝置間調換作為部份的記憶體管理操作。
計算裝置1000的顯示器1010可以實施為任意類型之 顯示器。例如,顯示器1010可以實施為陰極射線管(CRT)顯示器、液晶顯示器(LCD)、或其他顯示器。另外,顯示器1010可以整合至計算裝置1000或可以為分開周邊裝置與計算裝置1000相通耦合。
計算裝置1000的周邊裝置1012可以包含任意數量的周邊或介面裝置。例如,周邊裝置1012可以包含一顯示器、鍵盤、滑鼠、一或更多資料儲存裝置,例如內部或外部硬碟機、及/或其他周邊裝置。包含在周邊裝置1012的特定裝置可以例如取決於想要使用之計算裝置1000。周邊裝置1012可以經由若干信號路徑相通地耦接至晶片組1006,藉以允許晶片組1006及/或處理器1002,以自周邊裝置1012接收輸入或送出輸出至周邊裝置1012。
計算裝置1000的通訊電路1014可以實施為任意數量的裝置及電路,用以完成於計算裝置1000與其他外部裝置間之通訊。例如,在一些實施例中,通訊電路1014可以使計算裝置1000透過網路通訊。
如上所討論,計算裝置1000可以用以執行用以決定電腦程式之各種任務的平行度的方法100。方法100的結果可以經由顯示器1010顯示給使用者。
雖然本案已經在圖式及前述說明中詳述及顯示,但此等顯示與說明係被認為是在性質上例示性並不是限制用,應了解的是只有顯示及描述例示實施例,所有改變及修改係在所想要保護的本案的精神內。
1000‧‧‧計算裝置
1002‧‧‧處理器
1004‧‧‧處理器核心
1006‧‧‧晶片組
1008‧‧‧記憶體
1010‧‧‧顯示器
1012‧‧‧周邊裝置
1014‧‧‧通訊電路
於此所述之本發明係以附圖中之例示及非限制方式加以顯示。為了顯示簡單及明瞭,於圖中所示之元件並不必然依規格繪出。例如,部份元件的尺寸為了清楚起見可能相對其他元件放大。再者,當適當考量時,參考標號已經在各圖式中被重覆,以表示對應或類似元件。
圖1為決定電腦程式任務之平行度的方法的至少一實施例的簡化流程圖;圖2為用以更新在圖1中之方法所用之任務資料結構的方法的至少一實施例的簡化流程圖;圖3為用以決定是否可以平行兩或更多任務的方法的至少一實施例的簡化流程圖;圖4為用於圖1中之方法的最佳化的任務與記憶體存取資料結構的方法的至少一實施例的簡化流程圖;圖5為一予以平行化之例示序向程式的至少一實施例的虛擬碼代表圖;圖6為圖5的序向程式的任務的簡化代表圖;圖7為用於圖1的方法之任務資料結構的至少一實施例的例示圖;圖8為用於圖1的方法的記憶體存取資料結構的至少一實施例的例示圖;圖9a-9x為於圖7的序向程式上執行圖1的方法時所產生之任務資料結構的至少一實施例的例示圖;及圖10為用以執行圖1的方法的計算裝置之至少一實 施例的簡化方塊圖。
100‧‧‧方法

Claims (25)

  1. 一種決定程式任務之平行度的方法,包含:產生任務資料結構,以儲存關係於程式之多數任務的資料,該任務資料結構包含至少一節點,對應於該多數任務的一任務,該任務資料結構的各個節點包括任務識別數及等待數;回應於第一任務的產生,更新該任務資料結構;決定是否該第一任務已經存取先前為第二任務所存取的記憶體位置;及使用(i)該第一任務的該任務識別數,及(ii)該第一任務的該等待數之至少之一,決定是否該第一任務可以與該第二任務平行執行,其中該任務識別號由其他現正執行任務獨特地指明該對應任務及該等待數對應於在等待同步化命令前執行之對應任務的最後後輩任務的任務識別數。
  2. 如申請專利範圍第1項所述之方法,其中更新該任務資料結構包含:附加新節點至該任務資料結構,該新節點對應於該第一任務;指定任務識別數至該新節點;及指定等待數給該新節點,其中該等待數等於該指定至該新節點的任務識別數。
  3. 如申請專利範圍第1項所述之方法,其中決定是否該第一任務已經存取了為該第二任務所先前存取的記憶體 位置包含存取記憶體存取資料結構,其將記憶體位置共相關至先前被存取的個別記憶體位置的任務的任務識別數。
  4. 如申請專利範圍第3項所述之方法,其中決定是否該第一任務已經存取了為該第二任務所先前存取的記憶體位置包含決定是否對應於該記憶體位置的記憶體位址係出現在該記憶體存取資料結構。
  5. 如申請專利範圍第1項所述之方法,其中決定是否該第一任務可以與該第二任務平行執行包含:決定是否該第二任務為該第一任務的後輩任務;及回應於該第二任務為該第一任務的後輩任務,決定是否該第一任務等待該第二任務的完成。
  6. 如申請專利範圍第5項所述之方法,其中決定是否該第一任務等待該第二任務的完成包含決定為以下之一:(i)如果該第一任務並未等待該第二任務的完成,則該第一任務可以與該第二任務平行執行,或(ii)如果該第一任務等待該第二任務的完成,則該第一任務不能與該第二任務平行執行。
  7. 如申請專利範圍第1項所述之方法,其中決定是否第一任務可以與該第二任務平行執行包含:比較該第一任務的該任務識別數與該第二任務的該任務識別數;及回應於該第二任務的該任務識別數係大於該第一任務的該任務識別數,決定為以下之一:(i)如果該第二任務的該任務識別數大於該第一任 務的該等待數,則該第一任務可以與該第二任務平行執行,或(ii)如果該第二任務的該任務識別數不大於該第一任務的該等待數,則該第一任務不可與該第二任務平行執行。
  8. 如申請專利範圍第1項所述之方法,其中決定是否該第一任務可以與該第二任務平行執行包含決定是否該第一任務為該第二任務的子。
  9. 如申請專利範圍第8項所述之方法,其中決定是否該第一任務可以與該第二任務平行執行包含決定該第一任務及該第二任務不能平行執行,如果該第一任務為該第二任務的子。
  10. 如申請專利範圍第1項所述之方法,其中決定是否該第一任務可以與該第二任務平行執行包含:決定該第一任務與該第二任務的至少共同前輩任務;及決定該是否該至少共同前輩任務已經等待該第二任務的完成。
  11. 如申請專利範圍第10項所述之方法,其中決定是否該至少共同前輩任務已經等待該第二任務的完成包含比較該第二任務的該任務識別數與該至少共同前輩任務的該等待數。
  12. 如申請專利範圍第11項所述之方法,其中決定是否該第一任務可以與該第二任務平行執行包含決定為以下 之一:(i)如果該至少共同前輩任務未等待該第二任務的完成,則該第一任務可以與該第二任務平行執行,或(ii)如果該至少共同前輩任務已經等待該第二任務的完成,則該第一任務與該第二任務不能平行執行。
  13. 如申請專利範圍第1項所述之方法,其中該等待數等於以下兩者之一的該任務識別數(i)該對應任務或(ii)該對應任務的後輩任務。
  14. 如申請專利範圍第1項所述之方法,更包含重新指定該任務資料結構的該至少一節點的該任務識別數。
  15. 一種機器可讀取媒體,包含多數指令,其回應被執行造成機器:產生任務資料結構,以儲存相關於一程式的多數任務的資料,該任務資料結構包含對應於該多數任務的一任務的至少一節點,該任務資料結構的各個節點包含任務識別數及等待數;反應於第一任務的產生,而更新該任務資料結構;藉由存取記憶體存取資料結構,其將記憶體位置共相關於節點的任務識別數,其對應於先前已經存取個別記憶體位置的任務,而決定是否該第一任務已經存取先前已經為第二任務所存取之記憶體位置;及回應於該第一任務已經存取先前已經為該第二任務所存取的記憶體位置,藉由使用以下之一(i)該第一任務的該任務識別數及(ii)該第一任務的該等待數,決定是 否該第一任務可以與該第二任務平行執行,其中該任務資訊數獨特地由其他現正執行任務指明該對應任務及該等待數對應於一節點的該任務識別數,該節點對應於在等待同步化命令前執行之該對應任務的最後後輩任務。
  16. 如申請專利範圍第15項所述之機器可讀取媒體,其中更新該任務資料結構包含:將新節點附加至該任務資料結構,該新節點對應於該第一任務;指定任務識別數至該新節點;及指定一等待數給該新節點,其中該等待數係等於該指定任務識別數。
  17. 如申請專利範圍第15項所述之機器可讀取媒體,其中決定是否該第一任務與該第二任務可平行執行包含:決定是否該第二任務為該第一任務的後輩任務;及回應於該第二任務為該第一任務的後輩任務,決定為以下之一:(i)如果該第一任務並未等待該第二任務的完成,則該第一任務可以與該第二任務平行執行,或(ii)如果該第一任務等待該第二任務的完成,則該第一任務不可與該第二任務平行執行。
  18. 如申請專利範圍第15項所述之機器可讀取媒體,其中決定是否該第一任務可以與該第二任務平行執行包含如果該第一任務為該第二任務的子,則決定該第一任務不 可與該第二任務平行執行。
  19. 如申請專利範圍第15項所述之機器可讀取媒體,其中決定是否該第一任務可與該第二任務平行執行包含:決定該第一任務與該第二任務的至少一共同前輩任務;及決定是否該至少共同前輩任務已經等待該第二任務的完成。
  20. 如申請專利範圍第19項所述之機器可讀取媒體,其中決定是否該至少共同前輩任務已經等待該第二任務的完成包含比較該第二任務的該任務識別數與該至少共同前輩任務的該等待數。
  21. 如申請專利範圍第20項所述之機器可讀取媒體,其中決定是否該第一任務可以與該第二任務平行執行包含決定為以下之一:(i)如果該至少共同前輩任務並未等待該第二任務的完成,則該第一任務可以與該第二任務平行執行,或(ii)如果該至少共同前輩任務已經等待該第二任務的完成,則該第一任務不可與該第二任務平行執行。
  22. 一種計算裝置,包含:處理器;及記憶體裝置,具有多數指令儲存於其中,當其為該處理器所執行時,使得處理器:產生任務資料結構,以儲存有關於程式的多數任務的資料,該任務資料結構包含至少一節點,對應於該多數任 務的任務,該任務資料結構的各個節點包含任務識別數及等待數;回應於第一任務的產生,更新該任務資料結構;決定是否該第一任務已經存取先前已經為第二任務所存取的記憶體位置;及藉由比較對應於該第一任務的節點的該任務識別數與對應於該第二任務的節點的該任務識別數,而決定回應於該第一任務已經存取為該第二任務所先前存取的記憶體位置,其中該任務識別數獨特地由其他現正執行任務指明該對應任務及該等待數對應於一節點的該任務識別數,該節點對應於在等待命令前執行的該對應任務之最後後輩任務。
  23. 如申請專利範圍第22項所述之計算裝置,其中決定是否該第一任務可以與該第二任務平行執行包含:決定是否該第二任務為該第一任務的後輩任務;及回應於該第二任務為該第一任務的後輩任務,決定為以下之一:(i)如果該第一任務並未等待該第二任務的完成,則該第一任務可以與該第二任務平行執行,或(ii)如果該第一任務等待該第二任務的完成,則該第一任務不可與該第二任務平行執行。
  24. 如申請專利範圍第22項所述之計算裝置,其中決定是否該第一任務可以與該第二任務平行執行包含:如果 該第一任務為第二任務的子,則決定該第一任務與該第二任務不可平行執行。
  25. 如申請專利範圍第22項所述之計算裝置,其中決定是否該第一任務可以與該第二任務平行執行包含:決定該第一任務與第二任務的至少共同前輩任務;及決定是否該至少共同前輩任務已經等待該第二任務的完成。
TW101110861A 2011-04-02 2012-03-28 決定程式任務之平行度的方法與計算裝置及其機器可讀取媒體 TWI455030B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201161471140P 2011-04-02 2011-04-02
PCT/US2011/054454 WO2012138376A1 (en) 2011-04-02 2011-09-30 Method and devices for determining parallelism of tasks of a program

Publications (2)

Publication Number Publication Date
TW201303738A TW201303738A (zh) 2013-01-16
TWI455030B true TWI455030B (zh) 2014-10-01

Family

ID=46969490

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101110861A TWI455030B (zh) 2011-04-02 2012-03-28 決定程式任務之平行度的方法與計算裝置及其機器可讀取媒體

Country Status (3)

Country Link
US (1) US9489246B2 (zh)
TW (1) TWI455030B (zh)
WO (1) WO2012138376A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9489246B2 (en) 2011-04-02 2016-11-08 Intel Corporation Method and device for determining parallelism of tasks of a program
CN110968412B (zh) * 2019-12-13 2022-11-11 武汉慧联无限科技有限公司 一种任务执行方法、系统及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6223281B1 (en) * 1996-07-31 2001-04-24 International Business Machines Corporation Method of controlling the degree of parallelism when performing parallel processing on an inherently serial computer program
TW200811709A (en) * 2006-08-16 2008-03-01 Tien-Fu Chen Method and apparatus for cooperative multithreading
TW200844864A (en) * 2007-03-29 2008-11-16 Microsoft Corp Parallel DLL tree initialization

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6950928B2 (en) * 2001-03-30 2005-09-27 Intel Corporation Apparatus, method and system for fast register renaming using virtual renaming, including by using rename information or a renamed register
US7124403B2 (en) * 2001-08-15 2006-10-17 Sun Microsystems, Inc. Methods and apparatus for managing defunct processes
US8141082B2 (en) 2008-02-28 2012-03-20 Intel Corporation Node-based representation of multi-threaded computing environment tasks, and node-based data race evaluation
US9489246B2 (en) 2011-04-02 2016-11-08 Intel Corporation Method and device for determining parallelism of tasks of a program

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6223281B1 (en) * 1996-07-31 2001-04-24 International Business Machines Corporation Method of controlling the degree of parallelism when performing parallel processing on an inherently serial computer program
TW200811709A (en) * 2006-08-16 2008-03-01 Tien-Fu Chen Method and apparatus for cooperative multithreading
TW200844864A (en) * 2007-03-29 2008-11-16 Microsoft Corp Parallel DLL tree initialization

Also Published As

Publication number Publication date
WO2012138376A1 (en) 2012-10-11
TW201303738A (zh) 2013-01-16
US20130290975A1 (en) 2013-10-31
US9489246B2 (en) 2016-11-08

Similar Documents

Publication Publication Date Title
US9223628B2 (en) Task scheduling based on dependencies and resources
CN109669772B (zh) 计算图的并行执行方法和设备
US9524179B2 (en) Virtual-machine-deployment-action analysis
US8914673B2 (en) Distributed testing within a serial testing infrastructure
US8479185B2 (en) Method and system for utilizing parallelism across loops
US11163677B2 (en) Dynamically allocated thread-local storage
KR20140014090A (ko) 기민 통신 오퍼레이터
US20130268941A1 (en) Determining an allocation of resources to assign to jobs of a program
US8087015B2 (en) Assignment of application models to deployment targets
He et al. Preparing NERSC users for Cori, a Cray XC40 system with Intel many integrated cores
Wasi-ur-Rahman et al. MR-Advisor: A comprehensive tuning, profiling, and prediction tool for MapReduce execution frameworks on HPC clusters
Galante et al. A programming-level approach for elasticizing parallel scientific applications
US10540193B2 (en) Software-defined microservices
TWI455030B (zh) 決定程式任務之平行度的方法與計算裝置及其機器可讀取媒體
US20170185325A1 (en) Allocating storage in a distributed storage system
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
CN107102898B (zh) 一种基于numa架构的内存管理、构建数据结构的方法及装置
JP6322968B2 (ja) 情報処理装置、情報処理方法およびプログラム
CN110879744B (zh) 利用多线程执行计算图的方法和系统
Wada et al. A power management framework with simple DSL for automatic power-performance optimization on power-constrained HPC systems
Hegde et al. D2P: From recursive formulations to distributed-memory codes
Morman et al. The Future of GNU Radio: Heterogeneous Computing, Distributed Processing, and Scheduler-as-a-Plugin
US20220019531A1 (en) Allocating Variables to Computer Memory
Malyshkin et al. Optimization of parallel execution of numerical programs in luNA fragmented programming system
Wang Performance Modeling for Cloud Platforms: A Data Driven Approach

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees