專利名稱:減少并行程序中的循環(huán)的塊的無鎖調(diào)度的制作方法
技術(shù)領(lǐng)域:
本發(fā)明 一般涉及共享存儲(chǔ)器并行程序。
背景技術(shù):
共享存儲(chǔ)器并行程序包括在共享地址空間中并發(fā)執(zhí)行的多個(gè)線 程。例如,不同的線程可能同時(shí)計(jì)算一列數(shù)字的不同部分的總和。
循環(huán)是程序中的重復(fù)。循環(huán)可^L嵌套。將多個(gè)線程應(yīng)用于循環(huán)的 執(zhí)行的一種常見方法是在線程上劃分循環(huán)迭代。通過讓線程并發(fā)執(zhí)行 各種循環(huán)迭代,可比單個(gè)線程執(zhí)行所有迭代更快地執(zhí)行該循環(huán)。
共享存儲(chǔ)器并行程序可采用各種編程語言來編寫。OpenMP是可 用于指定以Fortran、 C或C+十編程語言編寫的程序的共享存儲(chǔ)器并行 性的一組編譯指令、庫例程和環(huán)境變量的規(guī)范。例如參見從OpenMP 體系結(jié)構(gòu)小組可得到的OpenMP規(guī)范C/C十+版本2.0(2002年3月)。
與給定循環(huán)迭代及其相應(yīng)循環(huán)索引有關(guān)的術(shù)語"迭代索引"表示 在順序執(zhí)行循環(huán)時(shí)在給定循環(huán)迭代之前的迭代次數(shù)。例如,在順序執(zhí) 行循環(huán)時(shí),待執(zhí)行的第一循環(huán)迭代可能具有迭代索引零。待順序執(zhí)行 的第二循環(huán)迭代可能具有迭代索引一,依此類推。如果并行執(zhí)行循環(huán)
迭代,則循環(huán)迭代仍然映射到相同的"迭代索引"。迭代索引無需從 零開始,但是可應(yīng)用相對(duì)于零基定義的常數(shù)偏移量。迭代索引無需以 一的遞增來進(jìn)行,而是還可通過以另一個(gè)常數(shù)值的遞增來進(jìn)行。
圖1是實(shí)現(xiàn)本發(fā)明的一實(shí)施例的基于處理器的系統(tǒng)的示意圖; 圖2示出根據(jù)一個(gè)實(shí)施例、用于確定下一個(gè)塊中的初始迭代索引和迭代次數(shù)的裝置;以及
圖3示出本發(fā)明的一個(gè)實(shí)施例的流程圖。
具體實(shí)施例方式
OpenMP規(guī)范包含調(diào)度子句,它規(guī)定如何將循環(huán)的迭代劃分為稱 作塊的毗連非空子集以及如何在線程之間分配這些塊。塊是循環(huán)迭代 的毗連子集,并且可具有定義那個(gè)塊的范圍的初始迭代和最終迭代。 塊的大小是它包含的迭代次數(shù)。 一種調(diào)度方法可用來確定何時(shí)將塊分 配給線程以及將塊分配給哪一個(gè)線程。OpenMP允許程序員指定若干 調(diào)度方法其中之一。在靜態(tài)調(diào)度方法中,將循環(huán)迭代劃分為相同大小 的塊,并且將塊分配給線程,而不管各塊涉及多少工作量。在動(dòng)態(tài)調(diào) 度方法中,將循環(huán)迭代劃分為相同大小的塊,并且將各"t妄連塊分配給 下一個(gè)線程,該下一個(gè)線程完成處理它^皮分配的前一個(gè)塊。在指導(dǎo)調(diào) 度方法中,將循環(huán)迭代劃分為大小遞減的塊,使得接連分配的塊的塊 大小逐漸減小,并且將各接連塊分配給下一個(gè)線程,該下一個(gè)線程完 成處理它纟皮分配的前一個(gè)塊。
迭代索引與循環(huán)索引之間的關(guān)系允許根據(jù)其中一個(gè)直接計(jì)算另一個(gè)。
與給定塊有關(guān)的術(shù)語"塊索引"可表示在給定塊之前分配的塊的 數(shù)量,因此,要分配的第一塊可能具有塊索引零。在本發(fā)明的一實(shí)施 例中,所使用的塊索引無需從零開始,但是可應(yīng)用相對(duì)于零基定義的 常數(shù)偏移量。在一個(gè)實(shí)施例中,塊索引無需以一的遞增來進(jìn)行,而是 還可通過以另一個(gè)值的遞增來進(jìn)行。
當(dāng)程序執(zhí)行指導(dǎo)調(diào)度時(shí),可在某個(gè)接連線程請(qǐng)求下一組迭代時(shí)將 屬于某個(gè)塊的迭代的毗連集合分配給該接連線程。最小塊大小可以至 少為一。線程可請(qǐng)求并獲得某個(gè)塊,然后執(zhí)行該塊的迭代。線程重復(fù) 這些步驟,直到?jīng)]有剩下待分配的迭代。為了獲得大小逐漸減小的接 連塊,可將接連塊的大小限制為與未分配迭代的次數(shù)成正比。使塊大小和未分配迭代的次數(shù)相關(guān)的常數(shù)可以是線程數(shù)量,使得將塊大d 、確 定為等于未分配迭代的次數(shù)除以線程數(shù)量乘另 一個(gè)常數(shù)。在確定塊大 小時(shí)可采用整數(shù)舍入。在從上述計(jì)算確定的大小比最小塊大小更小時(shí), 可將最小塊大小用于該塊大小。塊不能包括該循環(huán)中不存在的迭代, 因此,最后 一個(gè)塊中的實(shí)際迭代次數(shù)可能比最小塊大小更小。
在指導(dǎo)調(diào)度方法的一個(gè)實(shí)施例中,可通過共享變量來表示已經(jīng)分
配的迭代次數(shù),并且可通過以下步驟來執(zhí)行塊的分配讀取共享變量, 以便獲得已經(jīng)分配的迭代次數(shù);在某個(gè)算術(shù)計(jì)算中使用那個(gè)值,以便 確定待分配的下一個(gè)塊的初始和最終迭代;以及然后將已更新值回寫 到共享變量,從而反映新的塊分配。所存儲(chǔ)的實(shí)際值可以不是已經(jīng)分 配的迭代次數(shù)。例如,它可以是尚未分配的迭代次數(shù)。如果兩個(gè)線程 試圖并發(fā)執(zhí)行上述步驟,則它們可能以獲取同一個(gè)塊結(jié)束,使得兩次 執(zhí)行同一個(gè)塊??墒褂面i定來防止這類情況。線程可在讀取共享變量 之前獲取鎖定,并在對(duì)該共享變量進(jìn)行寫操作之后將該鎖定釋放。中 間算術(shù)計(jì)算可能涉及若干指令,特別是除法,它可能需要大量時(shí)間。 鎖定的使用可能降低循環(huán)執(zhí)行的速度,因?yàn)榈却@得另一個(gè)塊的各線 程必須等待輪到它獲取該鎖定,并且算術(shù)計(jì)算可能增加線程保持該鎖 定的時(shí)間長(zhǎng)度,因此增加其它線程的等待時(shí)間。
為了提高速度,本發(fā)明的一些實(shí)施例可允許線程確定待分配的下 一個(gè)塊的初始和最終迭代索引,而無需保持鎖定,并且無需使用需要 采用涉及除法的冗長(zhǎng)計(jì)算來進(jìn)行更新的共享變量。
圖1示出基于多處理器的系統(tǒng)100的一個(gè)實(shí)施例?;诙嗵幚砥?的系統(tǒng)100可包括編譯器115。編譯器可以是0^++編譯器、Fortran 編譯器或者可創(chuàng)建具有循環(huán)145或多個(gè)循環(huán)的編譯程序140的任何編 譯器?;蛘?,程序可以被解釋而不被編譯,或者是它們的某種組合(例 如"及時(shí)"編譯器)。在編譯器創(chuàng)建程序140之后,基于多處理器的系 統(tǒng)100可運(yùn)行程序140。在程序140中初始化循環(huán)145時(shí),可將循環(huán) 145的塊分配^^線程105。當(dāng)線程105完成對(duì)于分配給線程105的塊的操作時(shí),線程105可 請(qǐng)求下一個(gè)塊??稍诙嗵幚砥骰蚱渌嗑€程系統(tǒng)上執(zhí)行線程105。在 基于多處理器的系統(tǒng)100上,處理器可執(zhí)行線程的操作。在處理器上 執(zhí)行的線程105的操作可包括使用塊迭代計(jì)算器160根據(jù)共享塊索引 135來確定塊的初始或最終循環(huán)索引。
請(qǐng)求下一個(gè)塊的線程105可根據(jù)塊中的初始迭代索引和迭代次數(shù) 來確定待分配的下一個(gè)塊的初始和最終迭代??筛鶕?jù)共享塊索引135 的值、循環(huán)中迭代125的總數(shù)以及例如線程數(shù)量等的其它參數(shù)由封閉 式方程確定塊中的初始迭代索引和迭代次數(shù)。
共享塊索引135可駐留在存儲(chǔ)器的共享位置或者共享寄存器中。 塊迭代計(jì)算器160可在循環(huán)145開始時(shí)初始化共享塊索引,并且每當(dāng) 線程105請(qǐng)求塊時(shí),塊迭代計(jì)算器160均可使用遞增器130來自動(dòng)讀 取并遞增共享塊索引135的值。
自動(dòng)讀取并遞增變量表示讀取該變量的值、將該值遞增給定常數(shù)、 然后將新值回寫到該變量,其方式是,任何可觀測(cè)結(jié)果都好像是由另 一個(gè)線程對(duì)同一個(gè)變量的其它任何訪問嚴(yán)格地在讀取步驟之前或者在 寫入步驟之后發(fā)生,但不是在讀取步驟與寫入步驟之間發(fā)生。例如, 如果兩個(gè)線程執(zhí)行原子讀取,并且以遞增值二對(duì)初始值為零的變量進(jìn) 行遞增,則最終值必須為四。若沒有對(duì)可觀測(cè)結(jié)果的上述限制,則有 可能讓最終值成為二。
例如,可通過可向Intel②(位于加利福尼亞的圣克拉拉)購買的采用 Intel 32位體系結(jié)構(gòu)的處理器和Itanium⑧處理器中存在的取和加 (fetch-and-add)指令來進(jìn)行對(duì)共享變量的原子讀取及遞增。
增量不一定為一。取決于計(jì)算機(jī)系統(tǒng)的性質(zhì),增量可以是不同于 一的值。例如,如果由于其它某個(gè)目的而需要字的低階位,則遞增二 可能是有利的。
一旦塊迭代計(jì)算器160已經(jīng)獲得塊索引,則塊迭代計(jì)算器160可 確定下一個(gè)塊的初始和最終循環(huán)索引,而無需等待其它線程。當(dāng)線程完成處理該塊時(shí),該線程可請(qǐng)求另一個(gè)塊。
無需使用與所分配的前一個(gè)塊有關(guān)的循環(huán)或迭代索引信息即可確 定下一個(gè)塊的初始和最終循環(huán)索引,v(人而減少確定初始和最終循環(huán)索 引的等待時(shí)間。
可采用與使用直接支持自動(dòng)讀取和遞增的處理器指令不同的方法
來執(zhí)行自動(dòng)讀取和遞增共享塊索引135的值的步驟。例如,鎖定可在 讀取和遞增塊索引135之前被獲取,并在已經(jīng)將新值回寫到塊索引之 后被釋放。
圖2示出用于確定在處理多個(gè)塊中的一個(gè)循環(huán)時(shí)待分配給線程的 下一個(gè)塊的初始迭代索引和迭代次數(shù)的裝置的一實(shí)施例。當(dāng)線程105 請(qǐng)求待分配的下一個(gè)塊時(shí),線程105可使用圖2的實(shí)施例??蓪D2 的裝置用作塊迭代計(jì)算器160來確定下一個(gè)塊的初始和最終迭代索 引。該裝置可包括第一存儲(chǔ)器200,它可存儲(chǔ)可在初始化循環(huán)之前預(yù) 先計(jì)算的常數(shù)??捎蓤?zhí)行該循環(huán)的所有線程來共享第一存儲(chǔ)器,或者 各線程可具有副本。在一個(gè)實(shí)施例中,在預(yù)先計(jì)算了常數(shù)之后,遞增 器205可使索引遞增。遞增器205可自動(dòng)讀取并遞增索引的值。遞增 器205可根據(jù)系統(tǒng)要求來使索引遞增任何數(shù)量。例如,遞增器205可 使索引遞增一。
在遞增器205已經(jīng)使索引遞增之后,第一比較器210可將所檢索 的索引值與循環(huán)常數(shù)之一進(jìn)行比較。如果所檢索的索引值小于該常數(shù), 則第一計(jì)算器215可確定待分配給線程105的下一個(gè)塊中的初始迭代 索引和迭代次數(shù)。如果所檢索的索引值大于或等于該常數(shù),則第二計(jì) 算器220可確定待分配給線程105的下一個(gè)塊的初始迭代索引。
一旦由第二計(jì)算器220確定了待分配給線程的下一個(gè)塊的初始迭 代索引,第二比較225就可將初始迭代與循環(huán)中的迭代總數(shù)進(jìn)行比較。 如果初始迭代索引小于循環(huán)中的迭代總數(shù),則第三計(jì)算器230可確定 下一個(gè)塊中的迭代次數(shù)。如果初始迭代索引大于或等于循環(huán)中的迭代 總數(shù),則已經(jīng)分配了所有塊,并且該裝置可以不返回值。 一旦由第一、第二或第三計(jì)算器215、 220或230確定了待分配的下一個(gè)塊中的初始 迭代索引和迭代次數(shù),這些值就可存儲(chǔ)在第二存儲(chǔ)器235中。
圖3示出確定待分配給線程的下一個(gè)塊的初始迭代索引和迭代次 數(shù)的方法的一實(shí)施例的流程圖。圖3的方法可通過硬件、軟件或固件 來實(shí)現(xiàn)。在該方法通過軟件實(shí)現(xiàn)時(shí),執(zhí)行該方法的指令可存儲(chǔ)在計(jì)算 機(jī)可讀介質(zhì)中。在一個(gè)實(shí)施例中,該方法在300通過預(yù)先計(jì)算常數(shù)a、 c和Sc,開始。在一個(gè)實(shí)施例中,常數(shù)a可等于l-l/(2n),其中的n可 以是線程數(shù)量。在一個(gè)實(shí)施例中,常數(shù)c可能等于ceil(loga((2k+l)n/T)), 其中,k可以是用戶指定的塊中的最小迭代次數(shù),n可以是線程數(shù)量, 以及T可以是循環(huán)中的迭代總數(shù)。在這里,函數(shù)"ceil(x)"表示等于或大 于x的最小整數(shù)。在一個(gè)實(shí)施例中,常數(shù)Sc,可等于floor((l-ae)T)。在 這里,函數(shù)"floor(x)"表示等于或者小于x的最大整數(shù)。雖然通過公式 定義了常數(shù),但是一些實(shí)施例不限于這些公式。在使用指導(dǎo)調(diào)度器來 執(zhí)行循環(huán)時(shí),可指定參數(shù)k,其中k是塊可包含的最小迭代次數(shù)。當(dāng) 剩余迭代次數(shù)小于k時(shí),在一個(gè)塊中仍然可分配剩余迭代,使得可特 別允許那個(gè)塊的大小比k更小。
在已經(jīng)預(yù)先計(jì)算常數(shù)a、 c、 Sc,之后,可在305自動(dòng)讀取并增加索 引,其中,可根據(jù)實(shí)現(xiàn)該方法的系統(tǒng)的要求來使索引遞增一或者另一 數(shù)量。讀取值i可以是直接在該遞增前的值。讀取值i用于確定塊中的 初始迭代和迭代次數(shù),因?yàn)樵诰€程確定它的下一個(gè)塊時(shí),可由其它線 程使索引遞增多次。隨后,可將變量i與常數(shù)c進(jìn)行比較,310。如果 變量i小于c,則在315,可根據(jù)floor((l-ai)T)和Ci來確定下一個(gè)未分 配塊的初始迭代索引,可根據(jù)floor((l-ai")T)-floor((l-ai)T)來確定待分 配的迭代次數(shù)。相對(duì)于先前分配塊的大小的下一個(gè)未分配塊中的迭代 次數(shù)的增加可使用針對(duì)Si和Ci的^^式來進(jìn)行??稍?35返回待分配的 下一個(gè)塊的初始迭代索引Si和迭代次數(shù)Q。下一個(gè)塊中的初始迭代索 引和迭代次數(shù)可用來確定待分配的下一個(gè)塊的初始和最終循環(huán)索引。 然后可將下一個(gè)塊分配給線程。在310中i大于或等于c時(shí),可根據(jù)Sc,+(i-c)k來確定下一個(gè)未分配塊的初始迭代索引Si, 320。在325,可 將在320確定的起始迭代索引Si與循環(huán)中的迭代總數(shù)T進(jìn)行比較。如 果Si小于T,則在330,可根據(jù)min(T-Sbk)來確定待分配的迭代次數(shù) Ci??蓪⒊跏嫉饕齋i和迭代次數(shù)d返回(335)并分配給線程。在 325中Si大于或等于T時(shí),因?yàn)樵?40沒有剩下待分配的迭代,所以 循環(huán)可結(jié)束。
如果沒有^l丸行菱形框310中在索引與c之間的比較,^f吏得無條件 地按照路線"是",則框315的所得計(jì)算結(jié)果可能產(chǎn)生小于k乃至零 的迭代次數(shù)的值而仍然有至少k個(gè)未分配迭代。通過在菱形框310執(zhí) 行校驗(yàn)可防止這種異常。菱形框325的校驗(yàn)可確定循環(huán)是否已經(jīng)結(jié)束 或者是否還有需要分配的迭代。
在方法300中,在實(shí)施例開始時(shí),對(duì)于各循環(huán)可計(jì)算一次所計(jì)算 的常數(shù)。在多線程系統(tǒng)中,線程均可獨(dú)立計(jì)算常數(shù)。通過不等待一個(gè) 線程完成計(jì)算并將常數(shù)的值發(fā)送給其它線程,允許各線程計(jì)算常數(shù)可 提高系統(tǒng)的速度。如果在先前已經(jīng)完成同一個(gè)循環(huán)之后對(duì)該循環(huán)重新 初始化,則線程可重新計(jì)算常數(shù)。
在305,原子讀取和遞增步驟可使共享塊索引遞增。這個(gè)指令可 阻止其它線程在完成索引的遞增之前訪問該索引。使用原子操作、如 取和加、比較和交換或者取和減,可避免可能產(chǎn)生于保持鎖定的瓶頸。 因?yàn)?一次只有一個(gè)線程可保持鎖定,所以其它線程必須等待輪到它們 獲取該鎖定。如杲擁有鎖定的線程被中斷,或者在保持鎖定的同時(shí)執(zhí) 行長(zhǎng)計(jì)算,則這可能產(chǎn)生長(zhǎng)延遲。原子操作的一個(gè)優(yōu)點(diǎn)在于,由于操 作的不可分和不可中斷的性質(zhì),其它線程在操作期間不能訪問變量, 因而不需要鎖定。為了獲得自動(dòng)讀取和遞增塊索引的效果,使用不可 分和不可中斷指令的一個(gè)備選方案是獲取鎖定,執(zhí)行非原子讀取,之 后進(jìn)行非原子遞增,然后釋^:該鎖定。這仍然允許操作能夠比保持鎖 定的同時(shí)執(zhí)行除法運(yùn)算時(shí)更快地完成。
本說明書中提到的"一個(gè)實(shí)施例"或"一實(shí)施例"表示結(jié)合該實(shí)施例描述的具體特征、結(jié)構(gòu)或特性包含在本發(fā)明所包含的至少 一個(gè)實(shí) 現(xiàn)中。因此,短語"一個(gè)實(shí)施例"或"在一實(shí)施例中"的出現(xiàn)不一定 都表示同一個(gè)實(shí)施例。此外,具體特征、結(jié)構(gòu)或特性可通過與所述具 體實(shí)施例不同的其它適當(dāng)形式來創(chuàng)立,并且所有這類形式均可包含在 本申請(qǐng)的權(quán)利要求書中。
雖然結(jié)合有限的實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,但是本領(lǐng)域的技術(shù) 人員會(huì)從中知道大量的修改和變更。所附權(quán)利要求書意在涵蓋落入本 發(fā)明的真正精神和范圍內(nèi)的所有這類修改和變更。
權(quán)利要求
1.一種方法,包括根據(jù)索引來確定塊的初始迭代和最終迭代這兩者中的至少一個(gè)。
2. 如權(quán)利要求l所述的方法,還包括將所述索引存儲(chǔ)在共享變量中。
3. 如權(quán)利要求l所述的方法,還包括使所述索引遞增。
4. 如權(quán)利要求3所述的方法,還包括通過不可分和不可中斷的 操作來執(zhí)行所述遞增。
5. 如權(quán)利要求l所述的方法,還包括使所述索引遞增一。
6. 如權(quán)利要求l所述的方法,還包括將所述塊分配給線程。
7. 如權(quán)利要求l所述的方法,還包括根據(jù)所述塊中的初始迭代 和一些迭代來確定所述最終迭代。
8. 如權(quán)利要求l所述的方法,還包括根據(jù)所述塊中的最終迭代 和一些迭代來確定所述初始迭代。
9. 一種包含指令的計(jì)算機(jī)可讀介質(zhì),所述指令在^支執(zhí)行時(shí)佳羞于 處理器的系統(tǒng)能夠執(zhí)行以下操作根據(jù)索引來確定塊的初始迭代和最終迭代這兩者中的至少一個(gè)。
10. 如權(quán)利要求9所述的計(jì)算機(jī)可讀介質(zhì),還存儲(chǔ)在纟皮執(zhí)行時(shí)使 所述基于處理器的系統(tǒng)能夠執(zhí)行以下操作的指令將所述索引存儲(chǔ)在 共享變量中。
11. 如權(quán)利要求9所述的計(jì)算機(jī)可讀介質(zhì),還存儲(chǔ)在被執(zhí)行時(shí)使 所述基于處理器的系統(tǒng)能夠執(zhí)行以下操作的指令使所述索引遞增。
12. 如權(quán)利要求11所述的計(jì)算機(jī)可讀介質(zhì),還存儲(chǔ)在被執(zhí)行時(shí)使 所述基于處理器的系統(tǒng)能夠執(zhí)行以下操作的指令通過不可分和不可 中斷的操作來執(zhí)行所述遞增。
13. 如權(quán)利要求9所述的計(jì)算機(jī)可讀介質(zhì),還存儲(chǔ)在纟皮執(zhí)行時(shí)使 所述基于處理器的系統(tǒng)能夠執(zhí)行以下操作的指令使所述索引遞增一。
14. 如權(quán)利要求9所述的計(jì)算機(jī)可讀介質(zhì),還存儲(chǔ)在被執(zhí)行時(shí)4吏 所述基于處理器的系統(tǒng)能夠執(zhí)行以下操作的指令將所述塊分配給線 程。
15. 如權(quán)利要求9所述的計(jì)算機(jī)可讀介質(zhì),還存儲(chǔ)在被執(zhí)行時(shí)使 所述基于處理器的系統(tǒng)能夠執(zhí)行以下操作的指令根據(jù)所述塊中的初 始迭代和一些迭代來確定所述最終迭代。
16. 如權(quán)利要求9所述的計(jì)算機(jī)可讀介質(zhì),還存儲(chǔ)在被執(zhí)行時(shí)使 所述基于處理器的系統(tǒng)能夠執(zhí)行以下操作的指令根據(jù)所述塊中的最 終迭代和一些迭代來確定所述初始迭代。
17. —種裝置,包括 共享存儲(chǔ)器并行程序;以及調(diào)度器,耦合到所述共享存儲(chǔ)器并行程序,用于根據(jù)索引來確定 塊的初始迭代和最終迭代這兩者中的至少 一個(gè)。
18. 如權(quán)利要求17所述的裝置,包括耦合到所述調(diào)度器的遞增器, 用于使所述索引遞增。
19. 如權(quán)利要求17所述的裝置,包括產(chǎn)生指令的所述共享存儲(chǔ)器 并行程序。
20. 如權(quán)利要求19所述的裝置,包括處理所述指令的處理器。
21. 如權(quán)利要求17所述的裝置,包括根據(jù)所述塊中的初始迭代和 一些迭代來確定所述最終迭代的調(diào)度器。
22. 如權(quán)利要求17所述的裝置,包括根據(jù)所述塊中的最終迭代和 一些迭代來確定所述初始迭代的調(diào)度器。
23. —種系統(tǒng),包括共享存儲(chǔ)器并行程序;調(diào)度器,耦合到所述共享存儲(chǔ)器并行程序,用于根據(jù)索引來確定塊的初始迭代和最終迭代這兩者中的至少一個(gè);以及 編譯器,產(chǎn)生處理所述塊的指令。
24. 如權(quán)利要求23所述的系統(tǒng),包括耦合到所述調(diào)度器的遞增器,用于使所述索引遞增。
25. 如權(quán)利要求23所述的系統(tǒng),包括處理所述指令的處理器。
26. 如權(quán)利要求23所述的系統(tǒng),包括根據(jù)所述塊中的初始迭代和 一些迭代來確定所述最終迭代的調(diào)度器。
27. 如權(quán)利要求23所述的系統(tǒng),包括根據(jù)所述塊中的最終迭代和 一些迭代來確定所述初始迭代的調(diào)度器。
全文摘要
可通過將循環(huán)迭代劃分為大小遞減的塊,在并行處理器上執(zhí)行循環(huán)。通過減少線程在確定待分配給線程的下一組迭代時(shí)所花費(fèi)的時(shí)間,可實(shí)現(xiàn)速度的提高??筛鶕?jù)共享變量中存儲(chǔ)的塊索引來確定下一組迭代。使用共享變量使線程能夠并發(fā)地執(zhí)行操作,以便減少另一個(gè)線程使共享變量遞增的時(shí)間段的等待時(shí)間。
文檔編號(hào)G06F9/45GK101292225SQ200680039160
公開日2008年10月22日 申請(qǐng)日期2006年10月23日 優(yōu)先權(quán)日2005年10月21日
發(fā)明者A·羅比森, G·哈布, J·奇亞 申請(qǐng)人:英特爾公司