專利名稱:用于多處理器核執(zhí)行的編組機制的制作方法
用于多處理器核執(zhí)行的編組機制
背景技術(shù):
具有在多個處理器上執(zhí)行的并發(fā)線程的計算機應(yīng)用展現(xiàn)出增加性能的巨大前景,但是也向開發(fā)者提出巨大挑戰(zhàn)。隨著處理器制造商在提供處理器時鐘頻率的顯著提高方面遇到障礙,原始順序處理能力的增長已經(jīng)平淡化。處理器繼續(xù)演進,但是針對改善處理器能力的當(dāng)前焦點是在單個晶片上提供多個處理器核以增加處理器吞吐量。隨著處理器核數(shù)目增加,以前受益于增加的時鐘速度的順序應(yīng)用獲得顯著更少的縮放比例。為了利用多核系統(tǒng),編寫了并發(fā)(或并行)應(yīng)用以包括分布在核上的并發(fā)線程。然而,并行化應(yīng)用是充滿挑戰(zhàn)的,因為許多常用工具、技術(shù)、編程語言、框架、以及甚至開發(fā)者本身都是適應(yīng)于創(chuàng)建順序的程序的。編組(grouping)操作代表了并行改善可以進行但是大多未被充分利用的一個應(yīng)用領(lǐng)域。編組操作接收元素序列并且將這些元素放置到預(yù)定的組中,其中該序列中的每個 元素都在被編組時受到檢查。有時,該序列可以包含幾百萬個或更多元素。將元素順序地編組為預(yù)定的組的性能效果是用于執(zhí)行編組操作的時間與該序列的元素的數(shù)目相關(guān)。概述提供本概述以便以簡化的形式介紹將在以下的詳細描述中進一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標識出所要求保護的主題的特定特征或必要特征,也不旨在用于限定所要求保護的主題的范圍。本公開針對一種用于在多核處理器上執(zhí)行的并發(fā)編組操作。向編組操作提供元素的序列或組。在一個階段,諸如處理器中的邏輯核或物理核之類的每個工作者都接收要被編組的元素序列的分區(qū)。將每個分區(qū)的元素布置成到包括一個或多個鍵的數(shù)據(jù)結(jié)構(gòu)中,每個鍵都對應(yīng)于與該鍵相關(guān)聯(lián)的所接收元素中的一個或多個的值列表。在另一階段,合并由每個工作者創(chuàng)建的數(shù)據(jù)結(jié)構(gòu),使得整個元素序列的鍵和相應(yīng)元素存在于一個數(shù)據(jù)結(jié)構(gòu)中。附圖
簡述包括附圖來提供了對各實施例的進一步理解,且這些附圖被合并在本發(fā)明書內(nèi)并構(gòu)成其一部分。附圖示出各實施例,并且與說明書一起用于解釋本發(fā)明的原理。其他實施例和各實施例的許多預(yù)期優(yōu)點將隨著參考下面的詳細描述進行更好的理解而得到認識。附圖的元素不一定相對于彼此而縮放。相同的附圖標記指代對應(yīng)的類似部分。圖I是示出示例計算設(shè)備的框圖。圖2是示出圖I的計算設(shè)備的多核處理系統(tǒng)的示例的示意圖。圖3是一框圖,其示出了用于諸如圖2的示例之類的多核處理系統(tǒng)的編組操作的示例性方法。圖4是示出實現(xiàn)來自圖3的方法的鍵表的示例性數(shù)據(jù)結(jié)構(gòu)的示意圖。圖5是示出了組合圖4的兩個鍵表的示例的示意圖。圖6是一框圖,其示出了用于在諸如圖2的示例之類的多核處理系統(tǒng)中遞歸地組合圖4的鍵表的不例的不意圖。詳細描述
在以下具體實施例中,對附圖進行了參考,附圖構(gòu)成了實施例的一部分且在其中作為示例示出了可在其中實踐本發(fā)明的各特定實施例。可以理解,可以使用其它實施例并且可以做出結(jié)構(gòu)上或邏輯上的改變而不背離本發(fā)明的范圍。因此,以下詳細描述并不旨在限制,并且本發(fā)明的范圍由所附權(quán)利要求來限定。應(yīng)理解,此處描述的各示例性實施例的特征可相互組合,除非另外具體注明。圖I示出了可用作操作環(huán)境并且包括諸如計算設(shè)備100之類的計算設(shè)備的示例性計算機系統(tǒng)。在一基本配置中,計算設(shè)備100通常包括具有至少兩個處理單元(即,處理器102)的處理器體系結(jié)構(gòu)以及存儲器104。取決于計算設(shè)備的確切配置和類型,存儲器104可以是易失性的(如隨機存取存儲器(RAM))、非易失性的(諸如只讀存儲器(ROM)、閃存等)或兩者的某種組合。該基本配置在圖I中由虛線106來例示。該計算設(shè)備可采取若干形式中的一種或多種。這些形式包括個人計算機、服務(wù)器、手持式設(shè)備、消費電子產(chǎn)品(諸如視頻游戲控制臺)或其他設(shè)備。計算設(shè)備100還可具有附加特征或功能。例如,計算設(shè)備100還可包括附加存儲(可移動和/或不可移動),包括但不限于磁盤或光盤或固態(tài)存儲器,或者閃速存儲設(shè)備,諸·如可移動存儲108和不可移動存儲110。計算機存儲介質(zhì)包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)等的任何合適的方法或技術(shù)實現(xiàn)的易失性和非易失·性、可移動和不可移動介質(zhì)。存儲器104、可移動存儲108和不可移動存儲110都是計算機存儲介質(zhì)的示例。計算機存儲介質(zhì)包括,但不限于,RAM、R0M、EEPR0M、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲、磁帶盒、磁帶、磁盤存儲或其它磁性存儲設(shè)備、通用串行總線(USB)閃存驅(qū)動器、閃存卡、或能用于存儲所需信息且可以由計算設(shè)備100訪問的任何其它介質(zhì)。任何這樣的計算機存儲介質(zhì)都可以是計算設(shè)備100的一部分。計算設(shè)備100包括允許計算設(shè)備100與其它計算機/應(yīng)用115進行通信的一個或多個通信連接114。計算設(shè)備100還可包括諸如鍵盤、定點設(shè)備(例如,鼠標)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等的輸入設(shè)備112。計算設(shè)備100還可包括諸如顯示器、揚聲器、打印機等的輸出設(shè)備111。計算設(shè)備100可被配置成運行操作系統(tǒng)軟件程序以及一個或多個軟件應(yīng)用,這些構(gòu)成系統(tǒng)平臺。在一個示例中,計算設(shè)備100包括被稱為托管的或運行時環(huán)境的軟件組件。托管環(huán)境可被包括為操作系統(tǒng)的一部分或者可在稍后被包括為軟件下載。托管環(huán)境通常包括針對常見編程問題的預(yù)先編碼的解決方案以幫助軟件開發(fā)者創(chuàng)建諸如應(yīng)用等在托管環(huán)境中運行的軟件程序。被配置成在計算設(shè)備100上執(zhí)行的計算機應(yīng)用包括至少一個進程(或任務(wù)),所述至少一個進程(或任務(wù))是執(zhí)行程序。每個進程提供用于執(zhí)行該程序的資源。一個或多個線程在該進程的上下文中運行。線程是操作系統(tǒng)在處理器102中向其分配時間的基本單元。線程是為執(zhí)行而調(diào)度的進程內(nèi)的實體。進程的各線程可共享其虛擬地址空間和系統(tǒng)資源。每個線程可包括異常處理程序、調(diào)度優(yōu)先級、線程位置存儲、線程標識符、以及直到該線程被調(diào)度的線程上下文(或線程狀態(tài))。在并行應(yīng)用中,可在處理器102上并發(fā)地執(zhí)行各線程。圖2是可在計算設(shè)備100中被實現(xiàn)為用于并發(fā)執(zhí)行各線程的處理器102的示例多核處理器200。這一示例包括在單個晶片202上實現(xiàn)的多核。該示例性多核處理器200包括四個物理處理器核204、206、208、210、或簡稱四個物理核,其中這些物理核中的每個都可用于處理至少一個應(yīng)用線程,而至少一個其他物理核并發(fā)地處理另一線程。如圖所示,物理核204、206、208、210與晶片202上的存儲器控制器212和高速緩存214相鄰。這些核中的每個都與高速緩存分層結(jié)構(gòu)相關(guān)聯(lián)。在一個示例中,處理器102的架構(gòu)包括物理核204、206,208,210中的高速緩存(比如LI和L2高速緩存)以及高速緩存214中的L3高速緩存、由存儲器控制器212來服務(wù)的存儲器104等等。該示例中的高速緩存LI、L2和L3可以表示晶片上存儲器,因為這些高速緩存位于晶片202上,而存儲器分層結(jié)構(gòu)可以進一步擴展到晶片外存儲器,比如存儲器104。在示例性晶片202中,隊列216部署在晶片上的存儲器控制器212與高速緩存214之間。晶片202可包括其他特征218或諸如存儲器接口、雜項輸入/輸出塊、專有互連、擴展卡接口之類的特征的組合。每個物理核都能夠有效地和并發(fā)地執(zhí)行并發(fā)進程的多個線程。這些物理核常常被稱為“同時多線程”核或常常簡稱為“SMT”核,并且每個物理核上的并發(fā)執(zhí)行的線程共享包括在該單個物理核內(nèi)的硬件資源。在多核處理系統(tǒng)200的示例中,每個物理核都能夠進行多線程化。能夠進行多線程化的每個物理核都可以向操作系統(tǒng)呈現(xiàn)如其支持的并發(fā)執(zhí)行線程一樣多的邏輯核。在示例性的多核處理系統(tǒng)200中,每個物理核204、206、208、210都能夠并發(fā)執(zhí)行兩個線程,并由此向操作系統(tǒng)提供八個并發(fā)邏輯核。 在一些示例中,單個處理器(未示出)或多核處理器102可以根據(jù)性能考慮因素作為多處理器架構(gòu)的一部分被包括在內(nèi)。非一致存儲器訪問(NUMA)和對稱多處理(SMP)系統(tǒng)提供了可用多處理器架構(gòu)的兩個共同示例。多處理器架構(gòu)內(nèi)的每個處理器或邏輯核都能夠執(zhí)行線程。多處理器架構(gòu)可以進一步與分布式系統(tǒng)中的其他多處理器架構(gòu)相組合。邏輯核、物理核、處理器和多處理器系統(tǒng)的許多可用或以后開發(fā)的組合可以被用來實現(xiàn)編組機制,但是該編組機制不限于任何特定的處理器系統(tǒng)或架構(gòu)。能夠并發(fā)地執(zhí)行并發(fā)編組機制的線程或組件的每個單元都在此統(tǒng)稱為“核”或“工作者(worker )”。圖3示出了用于編組操作300的示例性方法。向編組操作300提供元素的序列或組,比如值序列。在一個階段,在302,諸如處理器200中的邏輯核或物理核之類的每個工作者都接收要被編組的元素序列的分區(qū)。在304,將每個分區(qū)的元素布置成到包括一個或多個鍵(key)的數(shù)據(jù)結(jié)構(gòu)中,每個鍵都對應(yīng)于與該鍵相關(guān)聯(lián)的所接收元素中的一個或多個的值列表。在另一階段,在306,合并由每個工作者創(chuàng)建的數(shù)據(jù)結(jié)構(gòu),使得整個元素序列的鍵和相應(yīng)元素存在于一個數(shù)據(jù)結(jié)構(gòu)中。供用于編組操作300的多個核處理器或多核處理器包括一定數(shù)目的核(比如在處理系統(tǒng)200中為八個,每個核都執(zhí)行線程)或工作者。有時(比如當(dāng)多核處理器200正在處理其他應(yīng)用時、當(dāng)多核處理器200包括空閑核時、二者的組合或其他情況),僅僅處理器核的子集可用于處理編組操作。操作系統(tǒng)可以提供關(guān)于編組操作的可用核的數(shù)據(jù)。編組操作300還可以被實現(xiàn)為存儲在存儲器中的軟件產(chǎn)品、或者被實現(xiàn)為包括計算設(shè)備100的處理器102和存儲器104的系統(tǒng)。元素序列還可以被廣范圍地定義,但是下面的示例是為了圖解說明而包括在內(nèi)的。輸入序列要么用編組操作本身、用在先數(shù)據(jù)并行操作、要么用其他方式被分割成多個分區(qū)。給每個分區(qū)都分配相應(yīng)的核以處理編組操作中的分區(qū)。在一個示例中,分區(qū)的數(shù)目對應(yīng)于用于處理編組操作的可用核的數(shù)目。在一個示例中,該序列可以具有預(yù)定的長度,并且在分區(qū)以前向編組操作提供該長度。在這種情況下,編組操作可以將序列分成邏輯分區(qū),比如具有大致相同元素數(shù)量的分區(qū)、對每個的處理都為相同時間長度的分區(qū)、或者其他邏輯分區(qū)。在未向編組操作提供預(yù)定的元素長度的情況下,編組操作可以應(yīng)用要么已知、要么待發(fā)現(xiàn)的算法以用于在給定數(shù)目的工作者中對元素進行分區(qū)。序列中的元素可以為任何類型,并且在所述示例中使用了一定數(shù)據(jù)類型的元素。例如,元素序列可以包括整數(shù)、浮點數(shù)、字母數(shù)字串等等。附加于接收元素序列,編組操作還接收鍵選擇器函數(shù)作為輸入,以提供關(guān)于如何對元素序列進行編組的參數(shù)。編組操作參照元素序列中的元素來對鍵選擇器函數(shù)求值,并且獲得與每個元素相關(guān)聯(lián)的鍵。因此,鍵選擇器函數(shù)可以表 示為f (element) =key在一個示例中,鍵選擇器函數(shù)可以是整數(shù)序列中的每個元素的最低有效位。在另一示例中,鍵選擇器函數(shù)是字母數(shù)字串中的第一個字符。具有相同或共同的鍵的所有元素都被一起編組到數(shù)據(jù)結(jié)構(gòu)中。在使用C# (C-sharp)的一個示例中,該數(shù)據(jù)結(jié)構(gòu)可以表示為Dictionary<TKey, LinkedList<TValue>>當(dāng)然,可以替代于鏈表使用其他數(shù)據(jù)結(jié)構(gòu)。每個工作者都檢查相應(yīng)分區(qū)中的每個元素以確定合適的鍵,查找該數(shù)據(jù)結(jié)構(gòu)中的合適鏈表,并且將該元素插入到該鏈表中。每個數(shù)據(jù)結(jié)構(gòu)在存儲器分層結(jié)構(gòu)中的位置可以由其大小來規(guī)定。在一些示例中,數(shù)據(jù)結(jié)構(gòu)可以被創(chuàng)建在晶片上存儲器中以獲得增加的效率。在另一示例中,可以給每個元素預(yù)分配所接收的分區(qū)中的鍵。圖4示出了數(shù)據(jù)結(jié)構(gòu)400的示例,該數(shù)據(jù)結(jié)構(gòu)包括具有一組鍵404、406的鍵表402,其中每個鍵都分別具有相關(guān)聯(lián)的鏈表408、410。鍵表402是通過評估分配給第一工作者的經(jīng)分區(qū)的序列的元素而產(chǎn)生的示例性結(jié)果。每個鏈表408、410都包括來自具有該鍵的經(jīng)分區(qū)的序列的元素,比如元素412、414。示例性鍵表402中的鍵是從包括arrow、anvil、axe、dust和door的序列中的字母數(shù)字串的第一個字符中確定的。根據(jù)鍵選擇器函數(shù),鍵404是“A”,并且鍵406是“D”。在該示例中,用在編組操作中的每個工作者都基于相同的鍵選擇器函數(shù)來創(chuàng)建鍵表,該鍵表然后被應(yīng)用于分配給該工作者的序列分區(qū)中的每個元素。因此,在使用八個邏輯核來處理編組操作的情況下,該序列可以被分成八個分區(qū),給每個分區(qū)都分配相應(yīng)的邏輯核以用于編組,并且每個相應(yīng)的邏輯核都將基于鍵選擇器函數(shù)和所分配分區(qū)中的元素來構(gòu)造鍵表。圖5示出了兩個鍵表、即由第一工作者創(chuàng)建的鍵表402和由第二工作者創(chuàng)建的鍵表502的示例。鍵表502還包括一組鍵504、506,其中每個鍵分別具有相關(guān)聯(lián)的鏈表508、510。每個鏈表508、510都包括諸如元素512和514之類的來自分配給第二工作者的經(jīng)分區(qū)的序列的元素,這些元素都具有相同的鍵。示例性鍵表502中的鍵也是從包括bow、brass、bucket、day、dish和doctor的序列中的字母數(shù)字串的第一個字符中確定的。根據(jù)鍵選擇器函數(shù),鍵504是“B”,并且鍵506是“D”。在該示例中,分配給第一工作者的分區(qū)中元素的數(shù)目不同于分配給第二工作者的元素的數(shù)目。在各個鍵表已經(jīng)被構(gòu)造以后,合并由所述工作者創(chuàng)建的多個鍵表。在一個示例中,來自第二鍵表的數(shù)據(jù)被插入到第一鍵表中。如果某個鍵僅存在于第二表中,則該鍵和值列表對、即該鍵和相關(guān)聯(lián)的鏈表對,被插入到第一表中。在新鍵表被創(chuàng)建的示例中,該鍵和值列表對在該鍵僅存在于一個表中的情況下被插入到該新鍵表中。如果相同的鍵存在于一個以上的鍵表中,則將兩個鏈表串接并且與經(jīng)合并的表中的合適鍵相關(guān)聯(lián)。例如,來自鍵表502的數(shù)據(jù)被插入到鍵表402中,從而創(chuàng)建圖5中的經(jīng)合并的鍵表522。鍵404和相關(guān)聯(lián)的鏈表408作為鍵522和相應(yīng)值列表526被包括在經(jīng)合并的鍵表522中。鍵504和相關(guān)聯(lián)的鏈表508作為鍵528和相應(yīng)值列表530被插入到經(jīng)合并的鍵表522中。鍵406和506存在于表402和502 二者中,并且作為鍵532被放置到經(jīng)合并的表中。與鍵406和506相關(guān)聯(lián)的鏈表410、510被串接以形成經(jīng)合并的表522中的值列表534。在其他示例中,兩個以上的鍵表可以合并到一起。在不同鍵的數(shù)目與整個序列中元素的數(shù)目相比相對小的情況下,可以將鍵表順序地組合。換言之,兩個工作者的鍵表被合并成較大的鍵表,第三工作者的鍵表與該較大的鍵表合并以形成更大的鍵表,并且以此類推直到由每個工作者從其相應(yīng)分區(qū)中創(chuàng)建的鍵表被合并成適于從編組操作中輸出的單個鍵表。附加地,鍵表組可被遞歸地合并以形成適于輸出的單個鍵表。例如,小鍵表組可被 并發(fā)地合并以形成附加的鍵表,并且附加的鍵表可被遞歸地合并以便又形成附加鍵表,并且以此類推直到剩下單個鍵表。圖6示出了利用五個工作者602、604、606、608、610的遞歸編組操作600。每個工作者都接收要被編組的元素的序列611的分區(qū),并且與其他工作組并行地分別創(chuàng)建相應(yīng)的鍵表612、614、616、618、620。鍵表的小組或子組被并發(fā)地合并在一起以創(chuàng)建組合的鍵表。在一些架構(gòu)中,在小組是由工作者彼此之間的“距離”來選擇的情況下可以獲得優(yōu)點。(距離是常常由跳(hop)、帶寬、等待時間等等來度量的度量。)在一些多核處理器或處理系統(tǒng)中,核快速地獲得對它們所接近的存儲器的訪問,而更遠離的存儲器被更慢地訪問。鍵表612和614被合并以形成第一級621中的組合鍵表622。與合并形成組合鍵表622并發(fā)地,鍵表616和618被合并以形成仍在第一級621中的組合鍵表624。未準備好作為包括序列的每個元素的完整鍵表輸出的鍵表被描述為部分鍵表。在所使用的示例性算法中,部分鍵表對被遞歸地合并到一起。多個部分鍵表對被并發(fā)地合并。然而,在該特定示例中,來自工作者610的部分鍵表620未與另一表合并,因為存在奇數(shù)個工作者。部分鍵表的小組被遞歸地合并到一起,直到它們形成完整的鍵表。在該遞歸合并期間,部分鍵表的多個小組在多核處理器中被并發(fā)地合并到一起。在第一遞歸級631,剩下從第一級轉(zhuǎn)入的三個部分鍵表、即鍵表622、624和620。鍵表622和624被合并到一起以形成鍵表632。再次,在該等級下存在奇數(shù)個鍵表,并且部分鍵表620轉(zhuǎn)入下一遞歸級、即第二遞歸級641。在第二遞歸級641,剩下兩個部分鍵表、即鍵表632、鍵表620,這些鍵表然后被合并到一起以形成鍵表642。鍵表642是完整的鍵表,因為它包含了序列611中的所有元素,并且因此適于從編組操作600中輸出。對其他編組操作的編組操作使用遞歸合并的優(yōu)點是,該合并可以相對于合并等級的數(shù)目而言以恒定的時間完成,而不是以取決于序列中的元素數(shù)量的時間完成。在部分鍵表對在給定工作者數(shù)目W的每個等級下被合并到一起的情況下,下面的表達式用于確定用于生成完整鍵表的等級的數(shù)目、比如2N_kW〈2N、或者可替代地N=ceil (log2 (W))
其中N是用于生成完整鍵表的等級的數(shù)目。圖6的示例示出了使用三個合并等級(第一級621、第一遞歸級631和第二遞歸級641)的五個工作者。如果使用八個工作者創(chuàng)建八個鍵表,則在并發(fā)地合并鍵表對以后剩下四個部分鍵表。在第一遞歸級中,在并發(fā)地合并了部分鍵表對以后剩下兩個部分鍵表。在第二遞歸級中,在合并了最終的兩個部分鍵表以后剩下完整的鍵表。因此,在工作者的數(shù)目為5至8之間(包括8)的情況下,使用3級合并來創(chuàng)建最終的鍵表。并發(fā)地用于基于更小的分區(qū)來創(chuàng)建鍵表的工作者越多,則創(chuàng)建每個鍵表的時間在總體上被降低。但是,用于創(chuàng)建完整鍵表的合并等級的數(shù)目僅僅成對數(shù)地增長。相應(yīng)地,所公開的編組操作可以與現(xiàn)有技術(shù)的編組操作相比顯著改善性能。
盡管此處說明并描述了具體實施例,但本領(lǐng)域技術(shù)人員可以理解,可用各種替換和/或等價實現(xiàn)來替換所示出并描述的具體實施例而不背離本發(fā)明的范圍。本申請旨在覆蓋此處討論的具體實施例的任何改編或變型。因此,本發(fā)明旨在僅由權(quán)利要求書及其等效方案來限制。
權(quán)利要求
1.ー種用于對元素序列進行編組的方法,包括 接收元素序列的多個分區(qū),其中多核處理器的可用核的每個都接收所述多個分區(qū)的單獨的分區(qū)以用于處理; 并發(fā)地將每個単獨的分區(qū)編組成元素的至少ー個值列表的鍵表,其中每個值列表中的元素都包括共同的鍵;以及 將所述鍵表中的每個合并到一起以形成最終的鍵表,使得所有鍵以及它們的相應(yīng)值列表都被包括在所述最終的鍵表中。
2.如權(quán)利要求I所述的方法,其特征在于,元素的所述單獨分區(qū)的每個元素都具有相關(guān)聯(lián)的鍵,并且具有相同鍵的元素被包括在元素的所述值列表中。
3.如權(quán)利要求2所述的方法,其特征在干,每個鍵表都包括多個鍵,每個鍵都具有擁有該鍵的元素的相應(yīng)值列表。
4.如權(quán)利要求2所述的方法,其特征在于,所述鍵是用鍵選擇器函數(shù)來生成的,所述鍵選擇器函數(shù)對所述単獨分區(qū)的每個元素進行操作。
5.如權(quán)利要求I所述的方法,其特征在于,所述合并包括生成新的鍵表。
6.如權(quán)利要求I所述的方法,其特征在于,所述合并包括擴充現(xiàn)有鍵表。
7.如權(quán)利要求I所述的方法,其特征在于,所述合并包括 將鍵和相應(yīng)值列表在所述鍵僅存在于僅僅一個鍵表中的情況下添加到鍵表中;以及 串接存在于ー個以上鍵表中的共同的鍵的值列表。
8.如權(quán)利要求7所述的方法,其特征在于,所述合并包括重復(fù)地將部分鍵表合并到ー起以形成完整的鍵表。
9.如權(quán)利要求8所述的方法,其特征在于,所述部分鍵表被順序地合并到一起以形成所述完整的鍵表。
10.如權(quán)利要求8所述的方法,其特征在于,所述部分鍵表被遞歸地合并到一起以形成所述完整的鍵表。
11.如權(quán)利要求I所述的方法,其特征在于,所述鍵表是在可操作地耦合到所述多核處理器的存儲器中形成的數(shù)據(jù)結(jié)構(gòu)。
12.如權(quán)利要求11所述的方法,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)包括鏈表。
13.如權(quán)利要求12所述的方法,其特征在于,將所述鍵表中的每個合并到一起包括將鍵和值列表提供到存儲器中的新的數(shù)據(jù)結(jié)構(gòu)中或者將鍵和值列表添加到所述存儲器中的現(xiàn)有數(shù)據(jù)結(jié)構(gòu)中。
14.如權(quán)利要求I所述的方法,其特征在于,在將每個単獨的分區(qū)編組到鍵表中以前確定所述元素序列的多個分區(qū)的數(shù)量。
15.如權(quán)利要求14所述的方法,其特征在于,多個分區(qū)中的各個分區(qū)都包括相等數(shù)量的元素。
全文摘要
提供了一種用于在多核處理器上執(zhí)行的并發(fā)編組操作。向編組操作提供元素的序列或組。在一個階段,每個工作者都接收要被編組的元素序列的分區(qū)。將每個分區(qū)的元素布置成到包括一個或多個鍵的數(shù)據(jù)結(jié)構(gòu)中,每個鍵都對應(yīng)于與該鍵相關(guān)聯(lián)的所接收的元素中的一個或多個的值列表。在另一階段,合并由每個工作者創(chuàng)建的數(shù)據(jù)結(jié)構(gòu),使得整個元素序列的鍵和相應(yīng)元素存在于一個數(shù)據(jù)結(jié)構(gòu)中。遞歸合并可以以恒定時間完成,該時間與序列的長度不成比列。
文檔編號G06F9/46GK102667758SQ201080053045
公開日2012年9月12日 申請日期2010年10月29日 優(yōu)先權(quán)日2009年11月24日
發(fā)明者I·奧斯特羅夫斯基 申請人:微軟公司