亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于并行數(shù)據(jù)的可配置劃分的制作方法

文檔序號:6593894閱讀:198來源:國知局
專利名稱:用于并行數(shù)據(jù)的可配置劃分的制作方法
用于并行數(shù)據(jù)的可配置劃分
背景技術(shù)
控制并行性在多線程化環(huán)境和多處理環(huán)境中得到支持。編程模型中的控制并行性 涉及對并行執(zhí)行兩個或更多個指令序列的支持。多線程環(huán)境通過支持并行執(zhí)行兩個或更多 個線程,或通過至少允許開發(fā)者在多個處理器核可用的情況下以促進線程指令序列的并行 執(zhí)行的方式構(gòu)造軟件來例如支持控制并行性。編程模型中的數(shù)據(jù)并行性涉及對并行處理數(shù)據(jù)集中的兩個或更多個部分的支持。 數(shù)據(jù)并行性因此涉及處理數(shù)據(jù)的指令中的某種形式的控制并行性。然而,控制并行性不一 定涉及任何數(shù)據(jù)并行性;例如,每一線程可能僅僅對其自己的內(nèi)部變量進行操作,而不對底 層共享數(shù)據(jù)集的某一部分進行操作。例如,當(dāng)圖形處理器同時對四個像素進行操作時,在計 算機硬件內(nèi)的較低層上發(fā)生一些形式的數(shù)據(jù)并行性。其他形式的數(shù)據(jù)并行性已在較高層上 繼續(xù)進行,例如將元素數(shù)組分成被并行處理的子集。

發(fā)明內(nèi)容
在一些實施方式中,數(shù)據(jù)劃分接口支持并行數(shù)據(jù)的劃分。數(shù)據(jù)劃分實現(xiàn)與數(shù)據(jù)劃 分接口相關(guān)聯(lián)。數(shù)據(jù)分區(qū)具有在數(shù)據(jù)劃分接口中未指定的但是在數(shù)據(jù)劃分實現(xiàn)中是專用的 組織結(jié)構(gòu)。例如,劃分可以按照塊(chunk)、條(stripe)、域(range)或另一組織結(jié)構(gòu)來實 現(xiàn)。一些實施方式提供用于創(chuàng)建數(shù)據(jù)分區(qū)和用于從數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素的操作。一些支 持用于促進負(fù)載平衡的動態(tài)劃分。給定的示例僅僅是說明性的。本發(fā)明內(nèi)容不旨在標(biāo)識所要求保護的主題的關(guān)鍵特 征或必要特征,也不旨在用于限制所要求保護的主題的范圍。相反,提供本發(fā)明內(nèi)容以便以 簡化形式介紹下面在具體實施方式
中進一步描述的一些概念。創(chuàng)新性用權(quán)利要求來界定, 且在本發(fā)明內(nèi)容與權(quán)利要求沖突時,應(yīng)以權(quán)利要求為準(zhǔn)。


將參考附圖來給出更具體的描述。這些圖僅示出所選擇的方面且因而并不完全決 定有效范圍或范圍。圖1是示出操作環(huán)境中的計算機系統(tǒng)和經(jīng)配置的存儲介質(zhì)實施方式的框圖;圖2是進一步示出配置有數(shù)據(jù)劃分接口、至少一種數(shù)據(jù)劃分實現(xiàn)和至少一種數(shù)據(jù) 劃分的計算機系統(tǒng)的框圖;圖3是進一步示出數(shù)據(jù)劃分接口的框圖;圖4是進一步示出數(shù)據(jù)劃分實現(xiàn)的框圖;圖5是示出具有應(yīng)用程序、用于處理并行數(shù)據(jù)的代碼、用于劃分的并行數(shù)據(jù)和處 理結(jié)果的配置的框圖;以及圖6是示出某種方法的步驟和經(jīng)配置的存儲介質(zhì)實施方式的流程圖。
具體實施例方式腿用于數(shù)據(jù)并行性的許多方法依賴于作為用于實現(xiàn)并行性的主要或唯一的機制的 數(shù)據(jù)劃分。然而存在無數(shù)用于劃分特定數(shù)據(jù)結(jié)構(gòu)的方法。盡管用于劃分?jǐn)?shù)據(jù)的一般方法是 可能的,但是將以特定的方式使用的用于特定數(shù)據(jù)結(jié)構(gòu)的最優(yōu)劃分技術(shù)可以完全取決于所 涉及的算法和數(shù)據(jù)結(jié)構(gòu)。例如,如果數(shù)據(jù)結(jié)構(gòu)支持隨機存取,那么可以是這樣的情況可以將其內(nèi)容以粗 粒度劃分并依賴于提供對數(shù)據(jù)的0(1)訪問一即用以檢索元素的恒定時間訪問一的索 引器。此數(shù)據(jù)的分割對于數(shù)組和對于數(shù)據(jù)結(jié)構(gòu)——例如Microsoft .NET Framework IList<T>s (Microsoft . NET 框架 I 列表 <T>s) (Microsoft Corporation (微軟公司) 的商標(biāo))——可以非常有效,且甚至可以以改善空間局部性的方式來劃分?jǐn)?shù)據(jù)。替換地,可 以是這樣的情況索引器并不真正是0(1)且存在更有效的數(shù)據(jù)訪問方法。例如,考慮實現(xiàn) 列表接口的樹,但是對于每一次訪問,要求0(log η)遍歷以定位所期望的節(jié)點。鑒于此遍 歷成本,可以尋找替代的訪問方法。對于比如樹和XML文檔等非線性數(shù)據(jù)結(jié)構(gòu),進行樹的初始橫向劃分可以導(dǎo)致更好 的訪問時間和更少的開銷。粗分割可以導(dǎo)致更多的工作集頁面。對于充滿指針的密集數(shù)據(jù) 結(jié)構(gòu),局部性可以呈現(xiàn)為大的益處,所以用戶可能希望使用更細(xì)粒度的方法來分割數(shù)據(jù)結(jié) 構(gòu)內(nèi)部的元素。一些問題可以受益于非常具體的數(shù)據(jù)-阻塞結(jié)構(gòu)。例如,高斯消去法和JPEG解碼 要求同時對輸入的特定部分進行訪問。這種要求改變了局部性影響算法的性能的方式,且 可能要求算法專用的數(shù)據(jù)劃分技術(shù)。最壞情形可能是在通用處理架構(gòu)將需要使用對其同步訪問的單個線性計數(shù) 器的上下文中,數(shù)據(jù)結(jié)構(gòu)缺乏對隨機存取的支持。這適用于例如任何Microsoft . NET Framework IEnumerable<T> (Microsoft: . NET 框架 I 可枚舉 < >),且嚴(yán)重地限制可擴縮性。與具體的策略無關(guān),隨著時間的過去,可以開發(fā)更好的算法,且可能希望允許它們 被插入到處理架構(gòu)中并用于驅(qū)動劃分。因此,對數(shù)據(jù)并行性系統(tǒng)的可定制部分進行劃分是有幫助的。在此討論的一些實 施方式提供對可插入劃分算法的特定但深入徹底的支持。一些實施方式還在允許可插入劃 分的接口中提供特定功能,例如,諸如用于確定數(shù)據(jù)元素是否可以通過順序位置來訪問的 規(guī)程、用于提供用來輔助數(shù)據(jù)劃分的提示的規(guī)程和用于追蹤執(zhí)行掛起以促進并行數(shù)據(jù)的更 好的動態(tài)劃分的規(guī)程?,F(xiàn)在將參考例如在圖中示出的那些實施方式等示例性實施方式,且在此將使用專 用的語言來描述示例性實施方式。但是,相關(guān)領(lǐng)域的技術(shù)人員和具有本發(fā)明內(nèi)容的所有權(quán) 的人應(yīng)想到的、在此所示出的特征的改變和進一步的修改和在此所示出的原理的附加應(yīng)用 應(yīng)被認(rèn)為是在權(quán)利要求的范圍內(nèi)。在本發(fā)明內(nèi)容中闡明術(shù)語的含義,所以應(yīng)仔細(xì)留心這些闡明來閱讀權(quán)利要求。給 出具體的示例,但是相關(guān)領(lǐng)域的技術(shù)人員將理解,其他示例還可以落在所使用的術(shù)語的含 義內(nèi)且落在一個或多個權(quán)利要求的范圍內(nèi)。術(shù)語在這里并不必定具有它們在一般的用法 中、在特定行業(yè)的用法中或在特定字典或字典集中具有的相同含義。附圖標(biāo)記可以與各種措辭一起使用,以幫助示出術(shù)語的廣度。從給定文本片段中省去參考數(shù)字并不必定意味著 圖的內(nèi)容沒有被該文本所討論。發(fā)明人主張并行使他們對其自己的詞典學(xué)的權(quán)利。在此, 在具體實施方式
中和/或在申請文件中的其他地方,術(shù)語可以被顯式地或隱式地定義。在此所使用的“并行數(shù)據(jù),,是容許數(shù)據(jù)并行性的數(shù)據(jù)。并行數(shù)據(jù)集因此涉及可以 被并行處理的多個數(shù)據(jù)元素。在給定的配置中,例如,例如數(shù)組、樹、或列表等數(shù)據(jù)結(jié)構(gòu)可以 包括并行數(shù)據(jù)。程序常常含有非并行數(shù)據(jù)——即一般不容許數(shù)據(jù)并行性的數(shù)據(jù)——的個體 片段。含有在文字處理器中正被查看的單個文件的文件名的字符串將是示例。術(shù)語“數(shù)據(jù)” 在此包括并行數(shù)據(jù)和非并行數(shù)據(jù)兩者,除非另外指出?!坝嬎銠C系統(tǒng)”可以包括,例如一個或多個服務(wù)器、主板、處理節(jié)點、個人計算機(便 攜式的或非便攜式的)、個人數(shù)字助理、蜂窩式或移動電話和/或提供至少部分地由指令控 制的一個或多個處理器的設(shè)備。指令可以是以在存儲器和/或?qū)S秒娐分械能浖男问健?具體地,盡管可以出現(xiàn)許多實施方式在服務(wù)器計算機上運行的情況,但是其他實施方式可 以在其他計算設(shè)備上運行,且任何一個或多個這樣的設(shè)備可以是給定實施方式的一部分。“多線程計算機系統(tǒng)”是支持多個執(zhí)行線程的計算機系統(tǒng)。線程可以并行運行、順 序運行或以并行執(zhí)行(例如,多處理)和順序執(zhí)行(例如,時間分片)的組合的方式來運 行。已經(jīng)以各種配置設(shè)計多線程環(huán)境。執(zhí)行線程可以并行運行,或線程可以被組織為并行 執(zhí)行但實際上輪流按順序執(zhí)行??梢岳缤ㄟ^在多處理環(huán)境中在不同的核心上運行不同的 線程、通過在單個處理器核心上將不同的線程進行時間分片、或通過時間分片和多處理器 線程化的某種組合來實現(xiàn)多線程??梢岳缤ㄟ^內(nèi)核的線程調(diào)度程序、通過用戶-空間信 號、或通過用戶-空間和內(nèi)核操作的組合來發(fā)起線程上下文切換。例如,線程可以輪流對共 享數(shù)據(jù)進行操作,或每一個線程可以對其自己的數(shù)據(jù)進行操作。“邏輯處理器”或“處理器”是單個獨立硬件線程。例如,每核心運行兩個線程的超 線程四核芯片具有八個邏輯處理器。處理器可以是通用的,或它們可以被定制為專用的用 途,例如圖形處理、信號處理、浮點算術(shù)處理、加密、I/O處理等?!岸嗵幚砥鳌庇嬎銠C系統(tǒng)是具有多個邏輯處理器的計算機系統(tǒng)。多處理器環(huán)境以各 種配置出現(xiàn)。在給定的配置中,所有的處理器可以在功能上相同,然而在另一配置中,一些 處理器可以由于具有不同的硬件功能、不同的軟件指派或兩者而不同于其他處理器。取決 于配置,處理器可在單個總線上彼此緊密地耦合,或它們可以松散地耦合。在一些配置中, 處理器共享中央存儲器,在一些配置中,它們各自具有它們自己的本地存儲器,而在一些配 置中,存在共享存儲器和本地存儲器兩者。如在此所使用的涉及數(shù)據(jù)結(jié)構(gòu)的術(shù)語僅僅如它們的表達限定詞那樣具體。例如, 沒有進一步限定,術(shù)語“列表”包括鏈接列表和使用數(shù)組實現(xiàn)的列表兩者。無論何時對數(shù)據(jù)劃分或其他數(shù)據(jù)結(jié)構(gòu)作出參考,應(yīng)理解,與簡單地存在于紙上相 反,數(shù)據(jù)結(jié)構(gòu)例如按程序員的意愿中或作為線上的瞬時信號來配置計算機可讀存儲器。操作環(huán)境參考圖1,用于實施方式的操作環(huán)境100可以包括,例如計算機系統(tǒng)102,其可以是 多線程化的或不是多線程化的,且可以是多處理器或不是多處理器。人類用戶104可以通 過使用屏幕、鍵盤和其他外圍設(shè)備106與計算機系統(tǒng)102或與一實施方式中的另一計算機 系統(tǒng)交互。在一些實施方式中,存儲設(shè)備和/或聯(lián)網(wǎng)設(shè)備可以被認(rèn)為是外圍裝備。本身可以是多線程的或不是多線程的且可以是多處理的或不是多處理的其他計算機系統(tǒng)(未示 出),可以經(jīng)由例如網(wǎng)絡(luò)接口裝備使用至網(wǎng)絡(luò)108的一條或多條連接來與計算機系統(tǒng)102或 與另一系統(tǒng)實施方式交互。計算機系統(tǒng)102包括至少一個邏輯處理器110。類似于其他合適的系統(tǒng),計算機系 統(tǒng)102也包括一個或多個存儲器112。存儲器112可以是易失性的、非易失性的、固定在適 當(dāng)?shù)奈恢玫?、可移動的、磁的、光的?或是其他類型的。具體地,當(dāng)被插入或以其他方式被 安裝時,例如CD、DVD、記憶棒或其他可移動非易失性存儲器介質(zhì)等經(jīng)配置的介質(zhì)114可以 在功能上變成計算機系統(tǒng)102的一部分,從而使得其內(nèi)容可訪問以供處理器110使用。可 移動的經(jīng)配置的介質(zhì)114是存儲器112的示例。存儲器112的其他示例包括內(nèi)置式RAM、 ROM、硬盤和不能被用戶104容易地移除的其他存儲設(shè)備。介質(zhì)114配置有可由處理器110執(zhí)行的指令116。介質(zhì)114還配置有通過執(zhí)行指 令116來創(chuàng)建、修改、引用和/或以其他方式使用的數(shù)據(jù)118。指令和數(shù)據(jù)形成被設(shè)計用于 處理并行數(shù)據(jù)的代碼120的部分。例如,代碼120可以被應(yīng)用程序122和/或被操作系統(tǒng) 1 調(diào)用。數(shù)據(jù)118可以包括含有并行數(shù)據(jù)130的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)中的一些可以由數(shù)據(jù) 劃分1 來組織,數(shù)據(jù)劃分126中的每一個具有專用的組織結(jié)構(gòu)128。指令116和數(shù)據(jù)118配置它們駐留在其中的存儲器112/介質(zhì)114 ;當(dāng)該存儲器是 給定計算機系統(tǒng)的功能部分時,指令116和數(shù)據(jù)118還配置該計算機系統(tǒng)。為了清晰示出, 存儲器112在圖1中以單個框來示出,但是應(yīng)理解,存儲器可以具有不同的物理類型,且在 諸圖中示出的代碼120、并行數(shù)據(jù)130和其他數(shù)據(jù)118、應(yīng)用程序122和其他項可以部分地 或完全地駐留在一個或多個存儲器112中,由此配置那些存儲器。在給定的操作環(huán)境中,計算機系統(tǒng)102或另一計算機系統(tǒng)可以運行一個或多個應(yīng) 用程序122,可以運行操作系統(tǒng)124,且可以使用現(xiàn)在已知的或在將來所形成的任何網(wǎng)絡(luò)接 口裝備。具體地,應(yīng)用程序122可以被嵌入。并行數(shù)據(jù)130可能是現(xiàn)行的或可能正等待從 另一位置進行檢索。上面未明確命名的其他軟件和/或硬件132還可以存在于給定的配置 中。操作環(huán)境可以包括一個或多個多線程計算機系統(tǒng)或非多線程計算機系統(tǒng)。這些計 算機系統(tǒng)可以被群集、客戶端服務(wù)器網(wǎng)絡(luò)化和/或?qū)Φ染W(wǎng)絡(luò)化。一些操作環(huán)境包括獨立的 (非網(wǎng)絡(luò)化的)計算機系統(tǒng)。用于一些實施方式的合適操作環(huán)境中的一些包括Microsoft .NET 環(huán)境 (Microsoft Corporation的商標(biāo))。具體地,期望一些操作環(huán)境包括目前被稱為對.NET Framework (· NET框架)的并行擴展(Parallel Extensions :PFX)的軟件以覆蓋例如 Parallel LINQ(并行 LINQ :PLINQ)或 Task Parallel Library (任務(wù)并行庫TPL)等數(shù)據(jù) 并行組件,從而允許將定制劃分提供器包括在用于公共數(shù)據(jù)類型的并行擴展自身中、包括 在.NET Framework(例如用于像XML文檔之類的其他數(shù)據(jù)類型)中、以及包括在終端開發(fā) 者代碼中。一些合適操作環(huán)境包括Java :環(huán)境(Sun Microsystems (太陽微系統(tǒng)),Inc. 的商標(biāo)),且一些合適操作環(huán)境包括利用例如C++或C-Siarp等語言的環(huán)境。
現(xiàn)在轉(zhuǎn)到圖1到圖5,一些實施方式包括配置有數(shù)據(jù)劃分接口 202和數(shù)據(jù)劃分實現(xiàn) 204的計算機系統(tǒng)。在下面更詳細(xì)地討論這些組件。
一些實施方式包括經(jīng)配置的計算機可讀存儲介質(zhì)114,其是存儲器112的示例。存 儲器112可以包括盤(磁盤、光盤或其他),RAM,EEPROM或其他ROM和/或其他可配置存儲 器。通用存儲器112可以是可移動的或不可移動的且可以是易失性的或非易失性的,通用 存儲器112可以被配置成使用以從可移動介質(zhì)114和/或例如網(wǎng)絡(luò)連接等另一源讀出的相 應(yīng)數(shù)據(jù)118和指令116的形式的組件——例如數(shù)據(jù)劃分接口 202和數(shù)據(jù)劃分實現(xiàn)204—— 的實施方式,以便由此形成經(jīng)配置的存儲器112的形式的經(jīng)配置的介質(zhì),該經(jīng)配置的存儲 器能夠使計算機系統(tǒng)以在此公開的類型不可知方式執(zhí)行數(shù)據(jù)劃分方法步驟并提供數(shù)據(jù)劃 分能力。圖1到圖5因而有助于示出經(jīng)配置的存儲介質(zhì)實施方式和方法實施方式以及系統(tǒng) 實施方式。在一些實施方式中,將存在可與一個或多個處理器110和存儲器112操作地通信 的外圍裝備,例如人類用戶I/O設(shè)備(屏幕、鍵盤、鼠標(biāo)、話筒、揚聲器、運動傳感器等等)。 然而,實施方式還可以被深深地嵌入在系統(tǒng)中,以使得人類用戶104不能直接地與該實施 方式交互。在一些實施方式中,例如,計算機系統(tǒng)中將存在使用諸如分組交換網(wǎng)絡(luò)接口卡、無 線收發(fā)機或電話網(wǎng)絡(luò)接口的組件來提供對網(wǎng)絡(luò)108的訪問的聯(lián)網(wǎng)接口裝備。然而,實施方 式還可以通過直接存儲器存取、可移動非易失性介質(zhì)或其他信息存儲-檢索和/或傳送方 法來進行通信,或計算機系統(tǒng)中的實施方式可以在不與其他計算機系統(tǒng)通信的情況下操作。正如圖2中所示出,計算機系統(tǒng)102可以配置有數(shù)據(jù)劃分接口 202和數(shù)據(jù)劃分實 現(xiàn)204。含有數(shù)據(jù)元素210的數(shù)據(jù)分區(qū)208還存在于所示出的配置中。數(shù)據(jù)分區(qū)208被定 義在數(shù)據(jù)劃分1 中。數(shù)據(jù)劃分1 可以被視為數(shù)據(jù)分區(qū)208的集合、被視為用于產(chǎn)生數(shù)據(jù) 分區(qū)208的集合的方案或兩者,這取決于結(jié)構(gòu)圖或程序圖是否最好地適應(yīng)上下文。線程206 可以使用數(shù)據(jù)劃分實現(xiàn)中的例程,以嘗試訪問給定的數(shù)據(jù)分區(qū)208的個體數(shù)據(jù)元素210。由 訪問嘗試返回的結(jié)果212可以包括數(shù)據(jù)元素210、狀態(tài)代碼或兩者。正如圖3所示出,數(shù)據(jù)劃分接口的一些實施方式包括一個或多個“過程導(dǎo)引”。過 程導(dǎo)引可以被實現(xiàn)為方法簽名、類型簽名、過程規(guī)范、方法聲明等等。過程導(dǎo)引提供諸如函 數(shù)或其他軟件例程的名稱、例程所預(yù)期的參數(shù)和值(如果例程有任何返回的話)等信息。圖3示出數(shù)據(jù)劃分接口 202的若干可能的過程導(dǎo)引300。創(chuàng)建劃分過程導(dǎo)引302 定義與嘗試創(chuàng)建其中數(shù)據(jù)元素210被指派到數(shù)據(jù)分區(qū)208的數(shù)據(jù)劃分126的一個或多個例 程的接口。獲得數(shù)據(jù)元素過程導(dǎo)引304定義與嘗試從數(shù)據(jù)分區(qū)208移除數(shù)據(jù)元素210以供 處理的一個或多個例程的接口。支持次序位置過程導(dǎo)引310定義與嘗試通過標(biāo)識個體數(shù)據(jù) 元素210在數(shù)據(jù)集內(nèi)部的相應(yīng)次序位置來提供指示是否可訪問個體數(shù)據(jù)元素210的結(jié)果的 一個或多個例程的接口。支持動態(tài)劃分過程導(dǎo)引312定義與嘗試提供指示給定的數(shù)據(jù)劃分 126是否支持添加和/或移除數(shù)據(jù)分區(qū)208、和/或在將數(shù)據(jù)元素210初始指派到數(shù)據(jù)分區(qū) 208之后在數(shù)據(jù)分區(qū)208之間移除數(shù)據(jù)元素210的結(jié)果的一個或多個例程的接口。通知阻 塞進入過程導(dǎo)引320和匹配通知阻塞退出過程導(dǎo)引322定義與嘗試在用于處理并行數(shù)據(jù) 130的代碼120中提供工作器線程206的執(zhí)行狀態(tài)(阻塞的/未阻塞的)的一個或多個例 程的接口。圖3還示出在數(shù)據(jù)劃分接口 202內(nèi)部的若干接口??砂ɑ騻魉蛣澐州o助值308的劃分輔助接口 306嘗試提供用于創(chuàng)建數(shù)據(jù)劃分126的提示或?qū)?。獲取當(dāng)前分區(qū)接口 314嘗試提供當(dāng)前數(shù)據(jù)劃分126。個體數(shù)據(jù)分區(qū)接口 316嘗試提供對數(shù)據(jù)劃分126中的數(shù) 據(jù)分區(qū)208的訪問。獲取下一數(shù)據(jù)元素接口 318嘗試從數(shù)據(jù)劃分中的數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元 素和更新用于遍歷數(shù)據(jù)元素以輪流獲取每一數(shù)據(jù)元素的狀態(tài)變量。接口 306、314、316、318中的任一個或全部可以含有過程導(dǎo)引300。實際上,接口 306、314、316、318的給定實施方式可以包括變量和/或一個或多個過程導(dǎo)引。同樣地,在一 些實施方式中,可使用變量來作為過程導(dǎo)引302、304、310、312、320、322的補充或替代。然 而,通過諸如Clharp或Java等語言,使數(shù)據(jù)劃分接口 202保持免于關(guān)于任何特定數(shù)據(jù)劃 分組織結(jié)構(gòu)128的假設(shè)在一些情況下通過使用過程導(dǎo)引而非使用其他方法可能是最容易 實現(xiàn)的。圖4示出實現(xiàn)數(shù)據(jù)劃分接口 202中存在的操作的數(shù)據(jù)劃分實現(xiàn)204的可能的過程 主體400中的一些。給定的數(shù)據(jù)劃分接口 202可以具有一個以上的相應(yīng)數(shù)據(jù)劃分實現(xiàn)204, 這是因為數(shù)據(jù)劃分126的組織結(jié)構(gòu)1 在數(shù)據(jù)劃分接口 202中是未被指定的但是在數(shù)據(jù)劃 分實現(xiàn)204的例程中是專用的。創(chuàng)建劃分過程主體402實現(xiàn)嘗試創(chuàng)建其中數(shù)據(jù)元素210被 指派到數(shù)據(jù)分區(qū)208的數(shù)據(jù)劃分126的例程。獲得數(shù)據(jù)元素過程主體404實現(xiàn)嘗試從數(shù)據(jù) 分區(qū)208移除數(shù)據(jù)元素210以供處理的例程。支持次序位置過程主體410實現(xiàn)嘗試通過標(biāo) 識個體數(shù)據(jù)元素210在數(shù)據(jù)集內(nèi)部的相應(yīng)次序位置來提供指示是否可以訪問個體數(shù)據(jù)元 素210的結(jié)果的例程。支持動態(tài)劃分過程主體412實現(xiàn)嘗試提供指示給定數(shù)據(jù)劃分1 是 否支持添加數(shù)據(jù)分區(qū)208和/或在將數(shù)據(jù)元素210初始指派到數(shù)據(jù)分區(qū)208之后在數(shù)據(jù)分 區(qū)208之間移除數(shù)據(jù)元素210的結(jié)果的例程。通知阻塞進入過程主體420和匹配通知阻塞 退出過程主體422實現(xiàn)常識在用于處理并行數(shù)據(jù)130的代碼120中提供工作器線程206的 執(zhí)行狀態(tài)(阻塞的/未阻塞的)的例程。通知阻塞過程主體420、422共同作為重劃分機制424的示例,通過重劃分機制 424,允許線程206可以準(zhǔn)予其他線程處理先前被指派到允許線程的數(shù)據(jù)元素210。當(dāng)允許 線程例如在I/O調(diào)用上即將阻塞時或當(dāng)允許線程即將被終止時,可以賦予這樣的準(zhǔn)許。圖4還示出數(shù)據(jù)劃分實現(xiàn)204內(nèi)部的若干接口實現(xiàn)。劃分輔助實現(xiàn)406嘗試提供 用于創(chuàng)建數(shù)據(jù)劃分126的提示或指導(dǎo)。獲取當(dāng)前分區(qū)實現(xiàn)414嘗試提供當(dāng)前的數(shù)據(jù)劃分 126。個體數(shù)據(jù)分區(qū)實現(xiàn)416嘗試提供對數(shù)據(jù)劃分126中的數(shù)據(jù)分區(qū)208的訪問。獲取下 一數(shù)據(jù)元素實現(xiàn)318嘗試從數(shù)據(jù)劃分的數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素,且如果成功的話,則更新 用于遍歷數(shù)據(jù)元素以輪流獲取每一個數(shù)據(jù)元素的狀態(tài)變量。圖5示出具有應(yīng)用程序122、用于處理并行數(shù)據(jù)的代碼120、用于劃分的并行數(shù)據(jù) 130和處理結(jié)果212的配置。在一種實施方式中,代碼120包括并行處理庫,例如用于.NET 并行處理支持庫的Microsoft Parallel Extensions (微軟并行擴展)中的一個,例如,按 本文中的教導(dǎo)合適地修改的Microsoft Parallel LINQ(微軟并行LINQ :PLINQ)庫或Task Parallel Library (任務(wù)并行庫TPL)。在所示出的配置中,用于處理并行數(shù)據(jù)的代碼120 包括動態(tài)劃分代碼502,但是應(yīng)理解,并不是所有實施方式都支持動態(tài)劃分。動態(tài)劃分代碼 是一種類型的劃分器代碼504;其他類型的劃分器代碼504可以創(chuàng)建數(shù)據(jù)劃分,但是這樣做 而不支持動態(tài)劃分。
在一些實施方式中,并行處理代碼120向應(yīng)用程序122詢問數(shù)據(jù)分區(qū)208,然后,處理應(yīng)用程序提供進程數(shù)據(jù)130,由此產(chǎn)生計算結(jié)果212。盡管圖5清楚地示出由并行處理代 碼120返回的結(jié)果212,但應(yīng)理解,其他軟件,尤其是應(yīng)用程序122,還一般地產(chǎn)生計算結(jié)果。 的確,由并行處理代碼120返回的結(jié)果212可以被傳遞到應(yīng)用程序122中的例程,其將該結(jié) 果212 (或基于該結(jié)果212的另一結(jié)果)傳遞到應(yīng)用程序120的另一部分,由此產(chǎn)生應(yīng)用程 序122的結(jié)果部分。在一些情況下,應(yīng)用程序122向代碼120完全地指定將被使用的數(shù)據(jù)劃分126。 在一些情況下,通過向代碼120提供劃分輔助值308,應(yīng)用程序122把將被使用的數(shù)據(jù)劃分 126部分地指定給代碼120。在一些情況下,應(yīng)用程序122既不提供完全劃分也不提供劃分 輔助值,且將使用的數(shù)據(jù)劃分126的細(xì)節(jié)完全留給代碼120。并不是圖中示出的每一項都需要存在于每一種實施方式中。盡管在此在文本和示 圖中通過特定示例示出一些可能性,但是實施方式可以偏離這些示例。舉例來說,示例的具 體的特征可以被省略、被重命名、被不同地分組、被重復(fù)、被以硬件和/或軟件不同地實例 化,或是示例中的兩個或更多個中出現(xiàn)的特征的混合。在一個位置示出的功能性還可以在 一些實施方式中以不同的位置提供。方法概覽圖6以流程圖600示出一些方法實施方式。在一個給定的實施方式中,方法的零 個或更多個所示出的步驟可以被重復(fù),也許帶有要操作的不同參數(shù)或數(shù)據(jù)。實施方式中的 步驟還可以以與圖中安排的從上到下的次序不同的次序進行。各步驟可以連續(xù)地、以部分 重疊的方式或完全地并行地執(zhí)行。其中流程圖600被遍歷以指示在方法期間執(zhí)行的步驟的 次序可以在方法的一種執(zhí)行和方法的另一執(zhí)行之間變化。流程圖遍歷次序還可以在一種方 法實施方式和另一方法實施方式之間變化。步驟還可以被省略、被組合、被重命名、被再分 組或以其他方式偏離所示出的流程,只要所執(zhí)行的方法是可操作的并符合至少一項權(quán)利要 求。在數(shù)據(jù)劃分接口獲得步驟602期間,軟件開發(fā)者(或代表開發(fā)者起作用的代碼) 獲得數(shù)據(jù)劃分接口 202。通過包括含有實現(xiàn)數(shù)據(jù)劃分接口 202的代碼的文件、通過鏈接這樣 的文件、通過加載這樣的文件、或通過用于將軟件能力引入環(huán)境或引入特定程序中的任何 機制,可以完成獲得步驟602。開發(fā)者被理解為特定的類型的用戶104;終端用戶還被認(rèn)為 是用戶104。在過程導(dǎo)引獲得步驟604期間,開發(fā)者或環(huán)境獲得過程導(dǎo)引300。過程導(dǎo)引獲得步 驟604可以與接口獲得步驟602 —致,但是還應(yīng)理解,通過獲得602數(shù)據(jù)劃分接口 202,可以 在一些情況中由此獲得604若干過程導(dǎo)引300。在數(shù)據(jù)劃分實現(xiàn)關(guān)聯(lián)步驟606期間,數(shù)據(jù)劃分實現(xiàn)204與數(shù)據(jù)劃分接口 202相關(guān) 聯(lián)??赏ㄟ^對類進行實例化、通過鏈接、通過設(shè)置例程的地址指針或通過用于使過程主體 400與過程導(dǎo)引300相關(guān)聯(lián)以使得對過程導(dǎo)引的調(diào)用向過程主體傳遞控制(且在一些情況 下還可傳遞參數(shù))的任何其他機制來完成關(guān)聯(lián)步驟606。在過程主體關(guān)聯(lián)步驟608期間,過程主體400與過程導(dǎo)引300相關(guān)聯(lián)。給定的過 程導(dǎo)引300可與在系統(tǒng)中的不同的位置的不同過程主體400關(guān)聯(lián)608。過程主體關(guān)聯(lián)步驟 608可以與實現(xiàn)關(guān)聯(lián)步驟606 —致,但是還應(yīng)理解,通過關(guān)聯(lián)606數(shù)據(jù)劃分實現(xiàn)204,可以在 一些情況下由此關(guān)聯(lián)608若干過程主體400。
在數(shù)據(jù)劃分接口過程調(diào)用步驟610期間,數(shù)據(jù)劃分接口 202中具有過程導(dǎo)引300 的過程被調(diào)用。調(diào)用步驟610可以使用向例程傳遞控制的機制來完成,且可以包括向例程 傳遞參數(shù)。在可以由調(diào)用步驟610引起的創(chuàng)建數(shù)據(jù)劃分嘗試步驟612期間,作出創(chuàng)建數(shù)據(jù)劃 分1 的嘗試。嘗試步驟612可以包括調(diào)用數(shù)據(jù)劃分實現(xiàn)204過程主體400,例如創(chuàng)建劃分 過程主體402。在可以由調(diào)用步驟610引起的獲得數(shù)據(jù)元素嘗試步驟614期間,作出獲得數(shù)據(jù)元 素210的嘗試。獲得哪一元素取決于數(shù)據(jù)分區(qū)208的實現(xiàn)和當(dāng)前的內(nèi)容。如果要移除特定 元素,那么可以在步驟614指定搜索準(zhǔn)則。獲得數(shù)據(jù)元素嘗試步驟614返回被獲得的元素 (如果元素被獲得),且可以返回狀態(tài)代碼。嘗試步驟614可以包括調(diào)用數(shù)據(jù)劃分實現(xiàn)204 過程主體400,例如獲得數(shù)據(jù)元素過程主體404。在可以由調(diào)用步驟610引起的配置支持次序位置步驟616期間,軟件被配置為調(diào) 用將指示數(shù)據(jù)劃分是否支持基于數(shù)據(jù)元素的次序位置訪問數(shù)據(jù)元素的數(shù)據(jù)劃分實現(xiàn)指令。 次序位置可以是相對于給定數(shù)據(jù)分區(qū)、相對于數(shù)據(jù)劃分中的所有數(shù)據(jù)分區(qū)、相對于存儲器 地址、或相對于一些其他基礎(chǔ)。配置步驟616可以包括配置對數(shù)據(jù)劃分實現(xiàn)204過程主體 400——例如支持次序位置過程主體410——的調(diào)用。在可以由調(diào)用步驟610引起的配置支持動態(tài)劃分步驟618期間,軟件被配置為調(diào) 用將指示數(shù)據(jù)劃分是否支持動態(tài)改變的數(shù)據(jù)劃分實現(xiàn)指令,動態(tài)改變例如數(shù)據(jù)分區(qū)的添 加、或在進行中將對不同的數(shù)據(jù)分區(qū)重新分配數(shù)據(jù)元素。配置步驟618可以包括配置對數(shù) 據(jù)劃分實現(xiàn)204過程主體400——例如支持動態(tài)劃分過程主體412——的調(diào)用。在可以由調(diào)用步驟610引起的使用獲取當(dāng)前分區(qū)步驟620期間,軟件被配置為獲 得當(dāng)前的數(shù)據(jù)劃分126。使用步驟620可以包括對數(shù)據(jù)劃分實現(xiàn)204過程主體400——例 如獲取當(dāng)前分區(qū)實現(xiàn)414中的過程主體——的調(diào)用。在可以由調(diào)用步驟610引起的使用個體數(shù)據(jù)分區(qū)步驟622期間,軟件被配置為 訪問數(shù)據(jù)劃分126中的數(shù)據(jù)分區(qū)。使用步驟622可以包括對數(shù)據(jù)劃分實現(xiàn)204過程主體 400——例如個體數(shù)據(jù)分區(qū)實現(xiàn)416中的過程主體——的調(diào)用。在可以由調(diào)用步驟610引起的使用獲取下一數(shù)據(jù)元素步驟擬4期間,軟件被配置 為從數(shù)據(jù)劃分126的數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素。使用步驟6M可以包括對數(shù)據(jù)劃分實現(xiàn)204 過程主體400——例如獲取下一數(shù)據(jù)元素實現(xiàn)418中的過程主體——的調(diào)用。在可以由調(diào)用步驟610引起的使用通知阻塞過程步驟擬6期間,軟件被配置為調(diào) 用數(shù)據(jù)劃分實現(xiàn)指令,數(shù)據(jù)劃分實現(xiàn)指令將幫助動態(tài)劃分代碼120來聲明由阻塞線程206 所表示的數(shù)據(jù)塊中任何尚未被處理的元素里的一些或全部并將它們供給其他線程,由此促 進負(fù)載平衡的數(shù)據(jù)劃分126。使用步驟擬4可以包括對數(shù)據(jù)劃分實現(xiàn)204過程主體400—— 例如通知阻塞過程主體420、422中的一個——的調(diào)用。在可以由調(diào)用步驟610引起的使用劃分輔助接口步驟6 期間,軟件可以提供例 如具有至少一個劃分輔助值308的代碼120,以幫助數(shù)據(jù)劃分126的創(chuàng)建(或在一些情況 下,動態(tài)調(diào)整)。使用步驟6 可以包括對數(shù)據(jù)劃分實現(xiàn)204過程主體400——例如劃分輔 助實現(xiàn)406中的過程主體一的調(diào)用。在執(zhí)行步驟630期間,數(shù)據(jù)劃分實現(xiàn)204中的指令116由一個或多個處理器110執(zhí)行。在定義步驟632期間,使用例如Clharp或Java等支持類的語言來定義類構(gòu)造ο示例代碼記住迄今所提供的關(guān)于系統(tǒng)、方法和操作環(huán)境的信息,下面討論用于示例實施方 式的程序代碼。實施方式不限于在此提供的程序代碼,且給定的實施方式可以包括附加程 序代碼、不同的程序代碼、用不同的代碼編程語言編寫的代碼、和/或偏離于所提供的示例 的其他方式。在示例代碼之后回頭參考示例代碼繼續(xù)討論各種實施方式。示例包括三個新的接口,且使用C-Siarp作為編程語言public interface IPartitionableCollection<T>{IPartitionedCollection<T>GetInitialPartitions(int p,bool needsOrdinalPosition);bool SupportsTrackingOrdinalPositions{get ;}bool SupportsDynamicPartitioning{get ;}}public interface IPartitionedCollection<T>{IPartition<T>[]CurrentPartitions {get ;}IPartition<T>AddDynamicPartition();void RemoveDynamicPartition(IPartition<T>p);}public interface IPartition<T>{bool MoveNext(ref T elem);bool MoveNext(ref T elem, ref int index);bool TrackingOrdinalPositions{get ;}}在應(yīng)用程序122內(nèi),例如,數(shù)據(jù)結(jié)構(gòu)實現(xiàn)IPartitionableCollection<T> (I可劃分集合<T>)以指示其具有定制劃分算法。數(shù)據(jù)結(jié)構(gòu)返回表示劃分操作的 結(jié)果的IPartitionedCollectionCDd經(jīng)劃分集合<T>)對象;隨后,所返回的 對象可以用于訪問所得到的分區(qū)。如果支持動態(tài)劃分——如由在查詢時返回 真的SupportsDynamicPartitioning(支持動態(tài)劃分)所指示的,則所返回的 IPartitionedCollection<T>對象還可以用于添加新的動態(tài)分區(qū)或移除現(xiàn)有分區(qū)。實現(xiàn)還 可以在helper(助手)類里,即它不需要由含有數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)。例如,如果用戶具 有數(shù)據(jù)結(jié)構(gòu)GroceryShoppingList (雜貨購物單),那么,GroceryShoppingList可以實現(xiàn) IPartitionableCollection<T>,或者 GroceryShoppingListPartitioner (雜貨購物單劃 分器)可以實現(xiàn) IPartitionableCollection<T> 且可被傳遞給GroceryShoppingList 以便 劃分。注意,IPartition<T> (I 分區(qū) <T>)非常類似于 IEnumerator<T> (I 計數(shù)器 <T>),且 事實上在合理的實現(xiàn)中可以是同一個,盡管此示例使用分離的接口來削減多余的接口方法 調(diào)用。舉例來說,后面跟隨了 Current (當(dāng)前)的傳統(tǒng)IEnumeratoKT〉. MoveNext (I計數(shù)器<T>.下移)變成了對IPartition<T>. MoveNext的單個調(diào)用。在一種變體中,調(diào)用GetFirstElement (獲得第一元素)過程以獲取分區(qū)的第一數(shù) 據(jù)元素,且調(diào)用GetNextElement (獲得下一元素)過程以輪流獲取每一個接下來的數(shù)據(jù)元ο在一個示例中,代碼調(diào)用可劃分集合上的GethitialPartitions (獲得初始分 區(qū)),可劃分集合提供經(jīng)劃分的集合,代碼可以從該經(jīng)劃分的集合訪問數(shù)組中的所有當(dāng)前分 區(qū)。變體使用GetFirstPartition和GetNextPartition過程貫穿數(shù)據(jù)劃分進行迭代。在另一變化中,代替上面所示出的公共接口而使用基類,且代替一個或多個接口 方法調(diào)用而使用單個虛擬方法調(diào)用。當(dāng)代碼120——例如像PLINQ或TPL的引擎——需要劃分這樣的含有并行數(shù)據(jù)130 的結(jié)構(gòu)時,代碼 120 在 IPartitionableCollection<T> 上調(diào)用 GetInitialPartitions0 該 調(diào)用傳遞作為參數(shù)的所期望分區(qū)數(shù)量P以及是否應(yīng)跟蹤次序位置的指示。所得到的經(jīng)劃分 的對象包含CurrentPartitions (當(dāng)前分區(qū))數(shù)組中的ρ個分區(qū)。數(shù)據(jù)分區(qū)208可以由數(shù) 量、句柄、字符串或數(shù)據(jù)劃分代碼所選擇的其他標(biāo)識符來標(biāo)識。許多劃分技術(shù)可以平凡地支持對次序位置的訪問,但是對于那些不支持這種訪問 的技術(shù),SupportsI^rackingOrdinalPositions (支持跟蹤次序位置)將返回假(意味著集 合完全不明白次序排序),且替代的策略可以用于指派索引。一種方法提供默認(rèn)值,在該默 認(rèn)值下,所有分區(qū)在IPartitionedCollectionCD上訪問相同的共享int (整型)計數(shù)器bool MoveNext(ref T elem, ref int index){MyPartitionedCollection<T>mpc =...;if(...具有更多···){elem=···下一元素…;index = Interlocked. Increment(refmpc. m_sharedPrivateIndex);}return false ;}如果 GeWnitialPartitions 被調(diào)用且 needsOrdinalPosition (需要次序位置)為真,則可使用此默認(rèn)值,然而底層集合其自己對SupportsI^rackingOrdinalPositions返 回假。


作為提供器的簡單的示例,考慮對列表<T>起作用的劃分提供器class PartitionabIeList<T> IParalIeIPartitionableCollection<T>{ private IList〈T>m—list ;public PartitionabIeList<T>(IList<T>list){m—list = list ;}public IPartitionedCollection<T>GetInitialPartitions ( int p,bool needsOrdinalPosition){ return new PartitionedList〈T>(m—list,p);
}public bool SupportsTrackingOrdinalPositions{get{return true ;}}public bool SupportsDynamicPartitioning{get{returnfalse ;}}class PartitionedList:IPartitionedCollection<T> {private List〈IPartition〈T>>m—parts ;internal PartitionedList(IList〈T>list,int p){int stride = list. Count/p ;m—parts = new List〈IPartition〈T>> ();for (int i = O ;i < ρ ;i++)m—parts[i] = new ListPartition〈T> (list,stride*i,Math. Min (stride* (i+1),data. Length);}public IPartition<T>[]CurrentPartitions {get {return m—parts· ToArray() ;}}public IPartition<T>AddDynamicPartition() {thrownewNotSupportedException () ;}}class ListPartition<T>: IPartition<T> {private IList〈T>m—list ;private int m—curr ;private int m—to ;internal ListPartition(IList〈T>list, int from, intto) {m—list = list ;m—curr = from ;m—to = to ;}public bool MoveNext(ref T elem,ref int index){if (m—curr < m—to) {elem = m—list[m—curr];index = m—curr ;m—curr++ ;}return true ;}public bool TrackingOrdinalPositions{get{return
true;}}}}具體地,可以對以下公共數(shù)據(jù)類型使用各種箱外(out-of-the-box)內(nèi)部提供器 IList<T>、IEnumerable<T> 和數(shù)組。其他 Microsoft. NET Framework 提供器將也許變成用 于XML文檔、數(shù)據(jù)集(DataSets)等等的公共數(shù)據(jù)劃分提供器。采用其他數(shù)據(jù)類型的API可 以默認(rèn)采用非常高效的技術(shù),例如PLINQ的AsParallel (作為并行)、TPL的R)rEach (對每——小、絕絕I 乂 寸寸。一般地,期望由初始分區(qū)所返回的所有分區(qū)加上任何隨后動態(tài)添加(經(jīng)由 IPartitionedCollection<T> 的 AddDynamicPartition (添力口動態(tài)分區(qū)))當(dāng)中的不變量將 是以下情形由所有分區(qū)208枚舉(直到關(guān)于它們的MoveNext (下移)返回假)的所有元 素210的并將是底層集合中保持的完全數(shù)據(jù)集。同樣地,期望交集將為空。這還涉及動態(tài) 的添加和移除,以使得動態(tài)地添加新的分區(qū)或移除現(xiàn)有分區(qū)不允許兩個分區(qū)枚舉器看到相 同的元素。如果原始集合含有兩個相同的對象,出于此劃分的目的,它們被認(rèn)為是不同的元ο對于動態(tài)劃分,考慮與列表有關(guān)的示例代碼。在小心地選擇ρ時、在致力于處理那 些P個塊的工作是均勻時、以及在對代碼的執(zhí)行存在很少的外部的影響時,例如在正消耗 資源的相同的機器上運行的其他應(yīng)用程序時,將以上元素分割成P個類似大小的塊的樸素 策略(naive Strategy)可以起作用。當(dāng)不是這種情況時,負(fù)載不平衡會成為問題,例如一些 分區(qū)可以遠比其他分區(qū)更快地從MoveNext返回假。因此,巧妙的實現(xiàn)可以例如在分區(qū)208 之間共享在IPartitionedCollectionCD其自己中的狀態(tài),以便在各次迭代上得到負(fù)載平 衡。此外,如果用戶發(fā)現(xiàn)ρ的初始大小是錯誤的——例如由于處理分區(qū)之后線程206 阻塞——那么支持動態(tài)添加的經(jīng)劃分的集合允許一些系統(tǒng)(例如PLINQ或TPL)添加新的 分區(qū)208。任何合適的同步技術(shù)可以用于保護數(shù)據(jù)結(jié)構(gòu)中用于進行處理的部分,包括上述的 相同的負(fù)載平衡機制。在稍后的點,例如一旦上述線程解除阻塞,如果那些附加動態(tài)分區(qū)不 再被視為對于最優(yōu)性能來說是必要的,那么可以移除這些附加動態(tài)分區(qū)。在一些實施方式中,動態(tài)劃分代碼502包括線程阻塞提示機制,包括嘗試阻止工 作器線程206中的負(fù)載平衡受到工作器線程中的長期阻塞的負(fù)面影響的通知阻塞過程主 體420、422和響應(yīng)劃分器代碼504。例如,假設(shè)特定劃分器代碼504已經(jīng)在代碼120中提供PFX運行時庫,且具有被表 示為P1、P2、P3、P4的大小幾乎相等的四個數(shù)據(jù)分區(qū)208。假設(shè)PFX已經(jīng)開始使用這四個工 作器線程206在這些分區(qū)上執(zhí)行。還假設(shè)了下列三個階段的假定執(zhí)行簡檔。階段1是T = Oms到T = 50ms。假設(shè)不存在阻塞,且假設(shè)分區(qū)中的每一個都正好 得到半程處理,也就是說,在階段1期間,每一分區(qū)中的數(shù)據(jù)元素210的一半被處理。階段2是T = 50ms到T = 100ms。第一工作器線程做出阻塞操作系統(tǒng)調(diào)用(例 如,文件讀操作),該阻塞操作系統(tǒng)調(diào)用將保持阻塞該線程50ms。其他三個工作器線程206 保持照常處理。在此階段結(jié)束時,分區(qū)P2、P3和P4將已經(jīng)被相對應(yīng)的工作器線程完全處 理。
階段3是T = IOOms到T = 150ms?,F(xiàn)在,第一工作器線程已經(jīng)被解除阻塞(即, 返回文件讀調(diào)用),第一工作器線程保持處理分區(qū)P1。由于當(dāng)?shù)谝还ぷ髌骶€程被阻塞時處 理完成了半程,因此處理將從其離開之處繼續(xù),且因此正好用了 50ms來完成分區(qū)P1,在此 示例中這又標(biāo)志著并行數(shù)據(jù)的處理的完成?,F(xiàn)在考慮在此示例中的CPU利用簡檔。在階段1期間,我們在所有四個邏輯處理 器110上已經(jīng)得到100%的利用率,因為所有工作器線程206都在運行。在階段2期間,一 個線程被阻塞且三個線程保持運行,因此利用率為75%。在階段3期間,只有一個線程具有 實際工作剩余,因此這最后IOOms期間利用率降低到25%。不平衡的原因是,當(dāng)?shù)谝还ぷ髌骶€程206不能夠做任何實際工作時,以及當(dāng)它已 經(jīng)將數(shù)據(jù)中的一些傳遞給其他線程以加速工作時,該線程時常保持對分區(qū)Pi的絕對占有。 舉例來說,通過在四個線程中均勻地分割剩余的工作而不是將所有工作都留給第一線程, 階段3可在四分之一的時間內(nèi)(也就是說在12. 5ms而非50ms內(nèi))就完成最后的工作。—些實施方式在劃分器代碼504中提供重劃分機制424,通過重劃分機制424,當(dāng) 允許線程進入阻塞時,例如以上示例中的第一工作器線程等線程可以允許其他線程訪問允 許線程的當(dāng)前分區(qū)的剩余部分。然后,其他工作器線程可以奪取或被給予允許線程的分區(qū) 208的部分以便處理。
在一種實施方式中,IPartition (I分區(qū))接口獲取兩個新的方法,當(dāng)PFX運行時探 測到工作器線程將要進入阻塞時和當(dāng)其被解除阻塞時,PFX運行時將調(diào)用這兩種新的方法。 在一種變化中,這兩個方法可以合并成單個方法。該方法過程導(dǎo)引300可以被寫成如下Interface IPartition{…void NotifyBlockingEntry ();void NotifyBlockingExitO ;}相對應(yīng)的過程主體420、422可發(fā)送信號、設(shè)置標(biāo)記或以其他方式向其他線程告知 當(dāng)前位于被指派給即將阻塞的允許線程的數(shù)據(jù)分區(qū)中的數(shù)據(jù)元素的可用性。這些通知由數(shù) 據(jù)劃分器代碼504處理,以使得動態(tài)劃分邏輯可以聲明由此IPartition實例代表的數(shù)據(jù) 塊的任何還未被處理的元素210,并將它們潛在地作為新的IPartition對象而給予其他線 程。這種共享允許只持續(xù)到從PFX作出匹配NotifyBlockingExitO (通知阻塞退出0)調(diào) 用,在此之后IPartition. MoveNext () (I分區(qū).下移())將繼續(xù)照常工作,除了以下情形之 外如果該分區(qū)208的任何元素210被分發(fā)其他線程,則在解阻之后,此分區(qū)的原主(允許 線程)將從不接收來自MoveNext ()(下移())的那些元素。
回頭參考示例代碼,現(xiàn)在繼續(xù)方法、系統(tǒng)和經(jīng)配置的介質(zhì)實施方式的討論。一些實施方式提供可以由軟件開發(fā)者用于配置并行數(shù)據(jù)130的劃分的方法。 方法包括獲得作為一組的數(shù)據(jù)劃分接口 202(例如IPartitionableCollection<T>、 IPartitionedCollection<T>和IPartition<T>)或提供相似功能性的另外某組其他接口 的步驟602。具體地,所述方法包括獲得604用于調(diào)用創(chuàng)建數(shù)據(jù)劃分1 的過程的至少一個過程導(dǎo)引300和獲得604用于調(diào)用從由數(shù)據(jù)劃分定義的數(shù)據(jù)分區(qū)208獲得數(shù)據(jù)元素210的 過程的至少一個過程導(dǎo)引300。例如,“過程”可以被編碼為函數(shù)或編碼為空過程。數(shù)據(jù)劃分126具有在數(shù)據(jù)劃分接口 202中保留為未被指定的組織結(jié)構(gòu)128。例如, 組織結(jié)構(gòu)1 可以調(diào)用列表、樹、或其他數(shù)據(jù)結(jié)構(gòu)以容納數(shù)據(jù)元素,且組織結(jié)構(gòu)1 可以將 數(shù)據(jù)元素條、數(shù)據(jù)元素塊、數(shù)據(jù)元素域、或數(shù)據(jù)元素的某一其他組織調(diào)用到分區(qū)中。但是含 有數(shù)據(jù)元素210的具體的數(shù)據(jù)結(jié)構(gòu)以及用于將元素210分割成分區(qū)中的具體方法都不需要 在數(shù)據(jù)劃分接口 202中指定。這些實施方式的方法還包括將數(shù)據(jù)劃分接口 202與數(shù)據(jù)劃分實現(xiàn)204關(guān)聯(lián)606, 例如 PartitionableListCD (可劃分列表 <T>)、PartitionedList (經(jīng)劃分列表)和 ListPartitionCD (列表分區(qū)<Τ>)。具體地,方法包括將實現(xiàn)數(shù)據(jù)劃分126的創(chuàng)建的至少 一個過程主體400與實現(xiàn)從數(shù)據(jù)分區(qū)208獲得數(shù)據(jù)元素210的至少一個過程主體400關(guān)聯(lián) 608。數(shù)據(jù)劃分126的組織結(jié)構(gòu),包括容納數(shù)據(jù)元素的數(shù)據(jù)結(jié)構(gòu),以及用于在分區(qū)之間分割 數(shù)據(jù)元素的規(guī)則或啟發(fā),在數(shù)據(jù)劃分實現(xiàn)204中是專用的。一些方法進一步包括配置616軟件以調(diào)用數(shù)據(jù)劃分實現(xiàn)指令,例如 IPartitionableCollection<T>. SupportsTrackingOrdinalPosition(I 可戈Ll 分集合 <T>. 支持跟蹤次序位置),以指示數(shù)據(jù)劃分1 是否支持基于數(shù)據(jù)元素的初始位置對數(shù)據(jù)元素 210的訪問。一些方法進一步包括配置618軟件以調(diào)用數(shù)據(jù)劃分實現(xiàn)指令,例如 IPartitionableCollection<T>. SupportsDynamicPartitioning(I 可戈Ll分集合 <T>.支持 動態(tài)劃分),以指示數(shù)據(jù)劃分是否支持動態(tài)劃分。一些方法包括配置例如動態(tài)劃分代碼502 等軟件以調(diào)用執(zhí)行動態(tài)劃分以促進負(fù)載平衡的數(shù)據(jù)劃分實現(xiàn)指令。一些方法進一步包括配置軟件以使用6 劃分輔助接口 306來將至少一個劃分輔 助值308傳送到數(shù)據(jù)劃分實現(xiàn)指令,例如劃分器代碼504。劃分輔助值308的一些示例包 括處理時間對數(shù)據(jù)元素分布的數(shù)量;優(yōu)選的劃分方案;要避免的劃分方案;通過重劃分機 制4M提供的阻塞的/解除阻塞的線程狀態(tài);在沒有任何參數(shù)化的情況下,可能的數(shù)據(jù)元素 處理特性(每元素的固定成本、{線性地,按指數(shù)規(guī)律地}x{增加,下降}、無規(guī)律的...)的 枚舉;以及處理特性的參數(shù)化描述(例如,“與X的上限和Y的下限不成規(guī)律”)。具體地,應(yīng)用程序122或操作系統(tǒng)124中的軟件可以被配置為將下列劃分輔助值 中的至少一個傳送到數(shù)據(jù)劃分實現(xiàn)指令指示數(shù)據(jù)元素的處理時間與數(shù)據(jù)元素的數(shù)量如何 相關(guān)的處理時間分布值、標(biāo)識特定劃分方案,例如域劃分、條劃分或塊劃分,的劃分方法值。一些方法包括定義632用于實現(xiàn)具體的數(shù)據(jù)劃分組織結(jié)構(gòu),例如 ListPartition<T>,的類的構(gòu)造器。一些實施方式向計算機系統(tǒng)102提供被組織在異類分區(qū)(例如,根據(jù)多個組織結(jié) 構(gòu)128)中的并行數(shù)據(jù)130。該系統(tǒng)包括配置成至少有可執(zhí)行指令116的至少一個存儲器 112和配置成執(zhí)行用于數(shù)據(jù)劃分的指令的至少一部分的至少一個邏輯處理器110 ;—些系 統(tǒng)包括多個邏輯處理器。系統(tǒng)還包括數(shù)據(jù)劃分接口 202,數(shù)據(jù)劃分接口 202配置存儲器并被設(shè)計為調(diào)用用 于創(chuàng)建數(shù)據(jù)劃分的過程和調(diào)用用于從數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素的過程。數(shù)據(jù)劃分126具有在 數(shù)據(jù)劃分接口中是未指定的組織結(jié)構(gòu)128。
一些系統(tǒng)還包括單個數(shù)據(jù)劃分實現(xiàn)204。其他系統(tǒng)在存儲器中包括兩個或更多個 數(shù)據(jù)劃分實現(xiàn)204,然而數(shù)據(jù)劃分實現(xiàn)204中的每一個與相同的數(shù)據(jù)劃分接口 202 —致并與 之相關(guān)聯(lián)。第一數(shù)據(jù)劃分實現(xiàn)204包括實現(xiàn)第一數(shù)據(jù)劃分126的創(chuàng)建的指令和實現(xiàn)從第一 數(shù)據(jù)劃分的數(shù)據(jù)分區(qū)208獲得數(shù)據(jù)元素210的指令。第一數(shù)據(jù)劃分具有在第一數(shù)據(jù)劃分實 現(xiàn)中是專用的第一組織結(jié)構(gòu)128。同樣地,第二數(shù)據(jù)劃分實現(xiàn)204包括實現(xiàn)第二數(shù)據(jù)劃分 126的創(chuàng)建的指令和實現(xiàn)從第二數(shù)據(jù)劃分的數(shù)據(jù)分區(qū)208獲得數(shù)據(jù)元素210的指令。第二 數(shù)據(jù)劃分具有在第二數(shù)據(jù)劃分實現(xiàn)中是專用的且還不同于第一組織結(jié)構(gòu)的第二組織結(jié)構(gòu) 128。例如,第一組織結(jié)構(gòu)可以是成條的,而第二組織結(jié)構(gòu)是成塊的,但是兩個數(shù)據(jù)分區(qū)都使 用相同的接口 202來創(chuàng)建。在一些系統(tǒng)中,數(shù)據(jù)劃分接口 202包括支持次序位置過程導(dǎo)引310,例 如 IPartitionableCollection<T>. SupportsTrackingOrdinalPositions,支持次序 位置過程導(dǎo)引310用于調(diào)用數(shù)據(jù)劃分實現(xiàn)204指令116,例如ListPartitionCD. TrackingOrdinalPositions ()(列表分區(qū)<T>.跟蹤次序位置0),數(shù)據(jù)劃分實現(xiàn)204指令 116指示數(shù)據(jù)劃分1 是否支持基于數(shù)據(jù)元素的初始位置對數(shù)據(jù)分區(qū)208的數(shù)據(jù)元素210 的訪問。在一些系統(tǒng)中,數(shù)據(jù)劃分接口 202包括支持動態(tài)劃分過程導(dǎo)引312,例如 IPartitionableCollection<T>. SupportsDynamicPartitioning() (I 可戈Ll分集合 <T>.支 持動態(tài)劃分0),支持動態(tài)劃分過程導(dǎo)引312用于調(diào)用數(shù)據(jù)劃分實現(xiàn)204指令116,例如 PartitionedList. AddDynamicPartition()(經(jīng)劃分列表.添加動態(tài)分區(qū)0),數(shù)據(jù)劃分實 現(xiàn)204指令116指示數(shù)據(jù)劃分1 是否支持以將數(shù)據(jù)分區(qū)208添加到數(shù)據(jù)劃分126中的先 前創(chuàng)建的數(shù)據(jù)分區(qū)組的形式的動態(tài)劃分。在一些系統(tǒng)中,數(shù)據(jù)劃分接口 202包括用于獲得當(dāng)前數(shù)據(jù)劃分的接口定義,例 如含有獲取當(dāng)前分區(qū)屬性的獲取當(dāng)前分區(qū)接口 314,例如IPartitionedCollection. CurrentPartitions[] (I經(jīng)劃分集合.當(dāng)前分區(qū)[]))。“接口定義”可以是例如Clharp公 共接口或具有公共屬性的類,或其在另一編程語言中可以是相似的構(gòu)造。在一些系統(tǒng)中,數(shù)據(jù)劃分接口 202包括用于獲得當(dāng)前的數(shù)據(jù)劃分的接口定義,例 如含有個體數(shù)據(jù)分區(qū)屬性的獲取當(dāng)前分區(qū)接口 316,例如IPartitionCD。在一些系統(tǒng)中,數(shù)據(jù)劃分接口 202包括用于獲得當(dāng)前數(shù)據(jù)劃分的接口定義, 例如含有獲取下一數(shù)據(jù)元素屬性的獲取下一數(shù)據(jù)元素接口 318,例如IPartitionCD. MoveNext () (I分區(qū)<T>.下移())方法中的一種。經(jīng)配置的介質(zhì)一些實施方式提供配置有計算機數(shù)據(jù)和計算機指令(例如數(shù)據(jù)118和指令116)的 存儲介質(zhì),計算機指令用于執(zhí)行提供正如上面所討論的阻塞-束縛(blocking-bounding) 語義學(xué)的方法。所配置的存儲介質(zhì)可以例如是存儲器112,且具體地可以是可移動存儲介質(zhì) 114,例如CD、DVD或閃存。一些實施方式提供配置有計算機數(shù)據(jù)和用于劃分?jǐn)?shù)據(jù)的計算機指令的存儲介質(zhì) 114,該方法包括將數(shù)據(jù)劃分實現(xiàn)與數(shù)據(jù)劃分接口進行關(guān)聯(lián)606,數(shù)據(jù)劃分實現(xiàn)被設(shè)計為 實現(xiàn)數(shù)據(jù)劃分的創(chuàng)建和實現(xiàn)從數(shù)據(jù)劃分的數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素,數(shù)據(jù)劃分具有在數(shù)據(jù)劃 分實現(xiàn)中是專用的且在數(shù)據(jù)劃分接口中是未指定的組織結(jié)構(gòu);以及執(zhí)行630數(shù)據(jù)劃分實現(xiàn)的指令,用于創(chuàng)建數(shù)據(jù)劃分。在一些實施方式中,所述方法包括在第一次運行應(yīng)用程序時執(zhí)行630數(shù)據(jù)劃分 實現(xiàn)的指令以從數(shù)據(jù)元素的集合創(chuàng)建第一數(shù)據(jù)劃分;以及在第二次運行應(yīng)用程序時執(zhí)行數(shù) 據(jù)劃分實現(xiàn)的指令以從數(shù)據(jù)元素的集合創(chuàng)建第二數(shù)據(jù)劃分。兩個數(shù)據(jù)劃分不同,因為數(shù)據(jù) 元素中的至少一個在第一數(shù)據(jù)劃分中被指派到與在第二數(shù)據(jù)劃分中不同的數(shù)據(jù)分區(qū)。艮口, 相同的數(shù)據(jù)可以在不同的執(zhí)行運行上被不同地劃分。在一些實施方式中,執(zhí)行數(shù)據(jù)劃分實現(xiàn)的指令來創(chuàng)建數(shù)據(jù)劃分的步驟將數(shù)據(jù)元素 指派到數(shù)據(jù)分區(qū)。如果被指派到給定數(shù)據(jù)分區(qū)的數(shù)據(jù)元素的數(shù)量隨后下降至預(yù)定閥值,那 么計算機指令將至少一個其他數(shù)據(jù)元素指派到給定數(shù)據(jù)分區(qū)。即,在一些實施方式中,動態(tài) 劃分代碼502操作用于幫助分區(qū)208在它們中間內(nèi)部地進行負(fù)載平衡。具體地,如果預(yù)定 閥值為零,那么MoveNext ()將失敗,且內(nèi)部負(fù)載平衡將在隨后把數(shù)據(jù)元素210移動到空的 分區(qū)208中。在一些實施方式中,執(zhí)行數(shù)據(jù)劃分實現(xiàn)的指令以創(chuàng)建數(shù)據(jù)劃分的步驟將數(shù)據(jù)元素 指派到數(shù)據(jù)分區(qū),且處理開始。具體地,從分區(qū)208獲得數(shù)據(jù)元素210。隨后,創(chuàng)建附加數(shù)據(jù) 分區(qū)208并向其指派數(shù)據(jù)元素210。即,在先前創(chuàng)建的分區(qū)208已處于使用中之后,新的分 區(qū)208被創(chuàng)建并被填充。一般地說,存在至少兩個種類的動態(tài)劃分(a)在現(xiàn)有的分區(qū)中移動數(shù)據(jù)元素,和 (b)創(chuàng)建新的分區(qū)和將數(shù)據(jù)元素移入它們中。當(dāng)數(shù)據(jù)元素從一個數(shù)據(jù)分區(qū)被重新指派到另 一數(shù)據(jù)分區(qū)時,一些實施方式執(zhí)行類型(a)動態(tài)劃分。還未被指派到線程的數(shù)據(jù)元素池仍 然是數(shù)據(jù)分區(qū)208。一些實施方式執(zhí)行類型(b)動態(tài)劃分,且一些實施方式執(zhí)行兩種類型的 動態(tài)劃分。在一些實施方式中,方法包括執(zhí)行數(shù)據(jù)劃分實現(xiàn)的指令以接收用于數(shù)據(jù)劃分的至 少一個劃分輔助值308。例如,代碼120中的PFX庫可以向應(yīng)用程序122給出當(dāng)劃分?jǐn)?shù)據(jù) 130時可以使用的一個或多個提示,或應(yīng)用程序122可以將提示值308提供到代碼120,這 取決于劃分器代碼504所駐留的地方。在一些實施方式中,方法包括執(zhí)行指令,例如通知阻塞過程主體420、422或 實現(xiàn)重劃分機制424的一些其他代碼,通過重劃分機制424,允許線程206可以準(zhǔn)許 其他線程許可處理先前被指派到允許線程的數(shù)據(jù)元素210。在一些實施方式中,線程 阻塞提示將以數(shù)據(jù)劃分接口(例如,IPartition)為目標(biāo),而不是劃分器接口(例如, IPartitionableCollection),或最低限度地,阻塞提示與特定數(shù)據(jù)劃分實例相關(guān)聯(lián)。在一 些實施方式中,提示值308被提供用于配置特定劃分器接口,例如,以便共享的庫塊劃分器 可以很好地與比如單調(diào)遞增分發(fā)一起起作用。更一般地,在圖6中闡釋的或以其他方式在此教導(dǎo)的任何方法步驟可以用于幫助 配置存儲介質(zhì),以便由此形成經(jīng)配置的介質(zhì)實施方式。Mrk正如在此所描述,一些實施方式提供各種工具和技術(shù)以促進對數(shù)據(jù)進行劃分以進 行并行處理。盡管在此清楚地將特定的實施方式闡述和描述為方法、經(jīng)配置的介質(zhì)或系統(tǒng),但 應(yīng)明白,對一種類型的實施方式的討論還一般地擴展到其他實施方式類型。舉例來說,結(jié)合圖6的方法的描述還幫助描述經(jīng)配置的介質(zhì)以及像結(jié)合圖1到圖5所描述的那些系統(tǒng)的系 統(tǒng)的操作。不規(guī)定來自一種實施方式的限制必定施加于另一種。具體地,諸方法不必定限 于在討論系統(tǒng)時所呈現(xiàn)的數(shù)據(jù)結(jié)構(gòu)和排列。 貫穿全文已經(jīng)通過附圖標(biāo)記來參考諸圖。在圖或文本中,在與給定附圖標(biāo)記關(guān)聯(lián) 的措辭中的任何明顯的不一致性應(yīng)被理解成僅僅是拓寬了通過該標(biāo)記所引用的內(nèi)容的范圍。
在此所使用的術(shù)語例如“一”和“所述”包含所指示的項或步驟中的一個或多個在 內(nèi)。具體地,在權(quán)利要求中,對項的引用一般地意指存在至少一個這樣的項,且對步驟的引 用意指執(zhí)行該步驟的至少一個實例。標(biāo)題僅是出于方便;可以在其標(biāo)題指示主題的小節(jié)之外找到關(guān)于給定主題的信 息。所提交的所有權(quán)利要求是本說明書的部分。盡管已經(jīng)在圖中示出并在上面描述示例性的實施方式,但本領(lǐng)域普通技術(shù)人員應(yīng) 明白,可以在不偏離權(quán)利要求中所闡述的原理和概念的前提下做出眾多修改。盡管已經(jīng)用 對結(jié)構(gòu)特征特征和/或方法論動作來說專用的語言描述了本主題,但應(yīng)理解,在所附權(quán)利 要求中界定的本主題不必限于上面所描述的具體特征或動作。不必在每一種實施方式中呈 現(xiàn)或使用在給定的定義或示例中標(biāo)識的每一手段和方面。相反,在實現(xiàn)權(quán)利要求時,所描述 的具體特征和動作是作為供考慮的示例而公開的。在法律所允許最大范圍內(nèi),在權(quán)利要求的等效物的意義和范圍之內(nèi)的所有改變都 被包含在它們的范圍內(nèi)。
權(quán)利要求
1.一種可以由軟件開發(fā)者用來配置對并行數(shù)據(jù)的劃分的方法,所述方法包括以下步驟獲得(60 數(shù)據(jù)劃分接口(20 ,S卩,獲得(604)用于調(diào)用用來創(chuàng)建數(shù)據(jù)劃分的過程的 至少一個過程導(dǎo)引(300)的過程,以及獲得(604)用于調(diào)用用來從數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素 的過程的至少一個過程導(dǎo)引,所述數(shù)據(jù)劃分具有在所述數(shù)據(jù)劃分接口中未指定的組織結(jié)構(gòu) (128);以及將數(shù)據(jù)劃分實現(xiàn)(204)與所述數(shù)據(jù)劃分接口進行關(guān)聯(lián)(606),S卩,將實現(xiàn)數(shù)據(jù)劃分 (126)的創(chuàng)建的至少一個過程主體(400)與實現(xiàn)從數(shù)據(jù)分區(qū)(208)獲得數(shù)據(jù)元素QlO)的 至少一個過程主體進行關(guān)聯(lián)(608),所述數(shù)據(jù)劃分的組織結(jié)構(gòu)在所述數(shù)據(jù)劃分實現(xiàn)中是專 用的。
2.如權(quán)利要求1所述的方法,進一步包括下列步驟中的至少之一配置(616)軟件以調(diào)用指示數(shù)據(jù)劃分是否支持基于數(shù)據(jù)元素的次序位置訪問所述數(shù) 據(jù)元素的數(shù)據(jù)劃分實現(xiàn)指令(116);配置(618)軟件以調(diào)用指示數(shù)據(jù)劃分是否支持動態(tài)劃分的數(shù)據(jù)劃分實現(xiàn)指令(116); 配置軟件以調(diào)用(610)執(zhí)行動態(tài)劃分以促進負(fù)載平衡的數(shù)據(jù)劃分實現(xiàn)指令; 配置軟件以將至少一個劃分輔助值(308)傳送給數(shù)據(jù)劃分實現(xiàn)指令。
3.如權(quán)利要求2所述的方法,其特征在于,所述軟件被配置為將下列劃分輔助值(308) 中的至少之一傳送給所述數(shù)據(jù)劃分實現(xiàn)指令指示數(shù)據(jù)元素的處理時間與數(shù)據(jù)元素的數(shù)量 如何相關(guān)的處理時間分布值、標(biāo)識特定劃分方案的劃分方法值。
4.如權(quán)利要求1所述的方法,其特征在于,所述方法包括定義(632)用于實現(xiàn)專用的數(shù) 據(jù)劃分組織結(jié)構(gòu)的類的構(gòu)造器。
5.一種具有在異類分區(qū)中的并行數(shù)據(jù)的計算機系統(tǒng)(102),所述系統(tǒng)包括 至少一個存儲器(112),其配置有可執(zhí)行指令(116);至少一個邏輯處理器(110),其被配置為執(zhí)行用于數(shù)據(jù)劃分的指令的至少一部分; 數(shù)據(jù)劃分接口 002),其配置存儲器并被設(shè)計為調(diào)用用于創(chuàng)建數(shù)據(jù)劃分(126)的過程 和調(diào)用用于從數(shù)據(jù)分區(qū)(208)獲得數(shù)據(jù)元素O10)的過程,所述數(shù)據(jù)劃分具有在所述數(shù)據(jù) 劃分接口中未指定的組織結(jié)構(gòu)(128);第一數(shù)據(jù)劃分實現(xiàn)004),其配置所述存儲器并與所述數(shù)據(jù)劃分接口相關(guān)聯(lián),S卩,實現(xiàn) 第一數(shù)據(jù)劃分的創(chuàng)建的指令和實現(xiàn)從所述第一數(shù)據(jù)劃分的數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素的指令, 所述第一數(shù)據(jù)劃分具有在所述第一數(shù)據(jù)劃分實現(xiàn)中是專用的第一組織結(jié)構(gòu);以及第二數(shù)據(jù)劃分實現(xiàn)(204),其配置所述存儲器并與所述數(shù)據(jù)劃分接口相關(guān)聯(lián),即,實現(xiàn) 第二數(shù)據(jù)劃分的創(chuàng)建的指令和實現(xiàn)從所述第二數(shù)據(jù)劃分的數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素的指令, 所述第二數(shù)據(jù)劃分具有在所述第二數(shù)據(jù)劃分實現(xiàn)中是專用的且不同于所述第一組織結(jié)構(gòu) 的第二組織結(jié)構(gòu)。
6.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述數(shù)據(jù)劃分接口包括支持次序位置過程 導(dǎo)引(310),所述支持次序位置過程導(dǎo)引(310)用于調(diào)用指示數(shù)據(jù)劃分是否支持基于數(shù)據(jù) 分區(qū)的數(shù)據(jù)元素的次序位置訪問所述數(shù)據(jù)元素的數(shù)據(jù)劃分實現(xiàn)指令。
7.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述數(shù)據(jù)劃分接口包括支持動態(tài)劃分過程 導(dǎo)引(312),所述支持動態(tài)劃分過程導(dǎo)引(312)用于調(diào)用指示數(shù)據(jù)劃分是否支持以下各項中的至少之一的數(shù)據(jù)劃分實現(xiàn)指令將數(shù)據(jù)分區(qū)添加到先前在數(shù)據(jù)劃分中創(chuàng)建的數(shù)據(jù)分區(qū) 組、從先前在數(shù)據(jù)劃分中創(chuàng)建的數(shù)據(jù)分區(qū)組移除數(shù)據(jù)分區(qū)。
8.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述系統(tǒng)包括由接口(314)定義配置的存儲 器,所述接口(314)定義提供用于獲得當(dāng)前數(shù)據(jù)劃分的獲取當(dāng)前分區(qū)屬性。
9.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述系統(tǒng)包括由接口(316)定義配置的存儲 器,所述接口(316)定義提供用于訪問數(shù)據(jù)劃分的數(shù)據(jù)分區(qū)的個體數(shù)據(jù)分區(qū)屬性。
10.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述系統(tǒng)包括由接口(318)定義配置的存 儲器,所述接口(318)定義提供用于從數(shù)據(jù)劃分的數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素的獲取下一數(shù)據(jù) 元素屬性。
11.一種配置有計算機數(shù)據(jù)(118)和用于劃分?jǐn)?shù)據(jù)的計算機指令(116)的存儲介質(zhì) (114),所述方法包括以下步驟將數(shù)據(jù)劃分實現(xiàn)(204)與數(shù)據(jù)劃分接口(20 進行關(guān)聯(lián)(606),所述數(shù)據(jù)劃分實現(xiàn)被 設(shè)計為實現(xiàn)數(shù)據(jù)劃分(126)的創(chuàng)建和實現(xiàn)從所述數(shù)據(jù)劃分的數(shù)據(jù)分區(qū)(208)獲得數(shù)據(jù)元素 O10),所述數(shù)據(jù)劃分具有在所述數(shù)據(jù)劃分實現(xiàn)中是專用的且在所述數(shù)據(jù)劃分接口中未指 定的組織結(jié)構(gòu)(128);以及執(zhí)行(630)所述數(shù)據(jù)劃分實現(xiàn)的指令,用于創(chuàng)建數(shù)據(jù)劃分。
12.如權(quán)利要求11所述的經(jīng)配置的介質(zhì),其特征在于,所述方法包括在第一次運行應(yīng) 用程序時執(zhí)行(630)所述數(shù)據(jù)劃分實現(xiàn)的指令以從數(shù)據(jù)元素的集合創(chuàng)建第一數(shù)據(jù)劃分;以 及在第二次運行所述應(yīng)用程序時執(zhí)行(630)所述數(shù)據(jù)劃分實現(xiàn)的指令以從所述數(shù)據(jù)元素 的集合創(chuàng)建第二數(shù)據(jù)劃分,并且其中,所述數(shù)據(jù)劃分(126)不同,因為所述數(shù)據(jù)元素中的至 少之一在所述第一數(shù)據(jù)劃分中被指派到與在所述第二數(shù)據(jù)劃分中不同的數(shù)據(jù)分區(qū)。
13.如權(quán)利要求11所述的經(jīng)配置的存儲介質(zhì),其特征在于,所述執(zhí)行(630)數(shù)據(jù)劃分 實現(xiàn)的指令來創(chuàng)建數(shù)據(jù)劃分的步驟將數(shù)據(jù)元素指派到數(shù)據(jù)分區(qū),其中,被指派到給定數(shù)據(jù) 分區(qū)(126)的數(shù)據(jù)元素(210)的數(shù)量下降至預(yù)定閥值,且響應(yīng)于所述下降,所述計算機指令 (116)將至少一個其他數(shù)據(jù)元素指派到所述給定數(shù)據(jù)分區(qū)。
14.如權(quán)利要求11所述的經(jīng)配置的存儲介質(zhì),其特征在于,所述執(zhí)行(630)數(shù)據(jù)劃分實 現(xiàn)的指令來創(chuàng)建數(shù)據(jù)劃分的步驟將數(shù)據(jù)元素指派到數(shù)據(jù)分區(qū),并且其中,在數(shù)據(jù)元素已經(jīng) 被指派到至少一個其他數(shù)據(jù)分區(qū)且已經(jīng)從所述至少一個其他數(shù)據(jù)分區(qū)獲得數(shù)據(jù)元素之后, 附加數(shù)據(jù)分區(qū)(208)被創(chuàng)建并被指派數(shù)據(jù)元素。
15.如權(quán)利要求11所述的經(jīng)配置的介質(zhì),其特征在于,所述方法包括執(zhí)行(630)指令, 通過所述執(zhí)行(630)指令,允許線程(206)可以準(zhǔn)許其他線程(206)來處理先前被指派到 所述允許線程的數(shù)據(jù)元素010)。
全文摘要
數(shù)據(jù)劃分接口提供用于創(chuàng)建數(shù)據(jù)分區(qū)來并行處理數(shù)據(jù)元素以及獲得要處理的數(shù)據(jù)元素而無須指定數(shù)據(jù)劃分的組織結(jié)構(gòu)的過程導(dǎo)引。與數(shù)據(jù)劃分接口關(guān)聯(lián)的數(shù)據(jù)劃分實現(xiàn)提供用于實現(xiàn)接口過程的操作,且還可以提供用于促進負(fù)載平衡的動態(tài)劃分。
文檔編號G06F9/38GK102057353SQ200980121350
公開日2011年5月11日 申請日期2009年5月1日 優(yōu)先權(quán)日2008年6月4日
發(fā)明者H·伊爾蒂茲, I·奧斯特羅夫斯基, J·達菲, S·托布 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1