本發(fā)明涉及一種排序方法和一種包括多個(gè)互聯(lián)處理節(jié)點(diǎn)并用于對(duì)在所述處理節(jié)點(diǎn)上分布的輸入數(shù)據(jù)進(jìn)行排序的處理系統(tǒng)。本發(fā)明還涉及以非對(duì)稱內(nèi)存為特征的計(jì)算機(jī)硬件以及一種用于此種非對(duì)稱內(nèi)存的并行排序方法。
背景技術(shù):
::現(xiàn)代計(jì)算機(jī)硬件100的特點(diǎn)是每個(gè)執(zhí)行單元具有非對(duì)稱內(nèi)存,其中執(zhí)行單元包括處理器101、103和內(nèi)核109、119等,在現(xiàn)代計(jì)算機(jī)硬件上所有內(nèi)存位置被劃分為本地107(相對(duì)于節(jié)點(diǎn)0101)和遠(yuǎn)程117內(nèi)存,如圖1所示。訪問(wèn)108本地內(nèi)存107比訪問(wèn)遠(yuǎn)程內(nèi)存117要快,這是因?yàn)槲锢碓L問(wèn)路徑102的長(zhǎng)度不同,如圖1所示。非對(duì)稱內(nèi)存所產(chǎn)生的問(wèn)題是,在對(duì)于內(nèi)存非對(duì)稱性不可知的計(jì)算方法中,執(zhí)行成本高于優(yōu)化本地和遠(yuǎn)程內(nèi)存使用所產(chǎn)生的執(zhí)行成本。排序被認(rèn)為是許多計(jì)算領(lǐng)域中使用的基本操作之一。例如,很明顯需要在非對(duì)稱內(nèi)存中進(jìn)行排序,同時(shí)需要在數(shù)據(jù)庫(kù)系統(tǒng)中對(duì)并行查詢方法所產(chǎn)生的查詢結(jié)果進(jìn)行排序。SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語(yǔ)言)子句“ORDERBY”和“GROUPBY”需要這種排序。一些連接方法,像排序合并連接,也需要排序。有許多算法利用系統(tǒng)的多個(gè)內(nèi)核使排序并行并提高性能。但是這些算法都沒(méi)有考慮內(nèi)存架構(gòu)的非對(duì)稱性。近來(lái),在排序算法中,隨機(jī)對(duì)數(shù)據(jù)進(jìn)行分區(qū),并且允許不同線程對(duì)該數(shù)據(jù)進(jìn)行隨機(jī)操作。這導(dǎo)致過(guò)多地使用遠(yuǎn)程訪問(wèn)和接口互聯(lián),因此會(huì)嚴(yán)重限制系統(tǒng)吞吐量。現(xiàn)代處理器200采用如圖2所示的多個(gè)內(nèi)核201、202、203、204、主存器205和若干級(jí)別的內(nèi)存緩存206、207、208。目前的排序算法,例如,如US8332595B2、US6427148B1、US5852826A和US7536432B2所描述,并沒(méi)有解決數(shù)據(jù)局部性和緩存意識(shí)問(wèn)題。這導(dǎo)致頻繁的緩存未命中和執(zhí)行效率低。處理器設(shè)有SIMD(single-instruction,multiple-data,單指令流多數(shù)據(jù)流)硬件,該SIMD硬件允許執(zhí)行所謂的矢量化處理,即,在大量緊密相鄰的數(shù)據(jù)上執(zhí)行相同操作。目前的排序方法未針對(duì)SIMD進(jìn)行優(yōu)化。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的是提供一種改進(jìn)的排序技術(shù)。該目的由獨(dú)立權(quán)利要求的特征來(lái)實(shí)現(xiàn)。其它實(shí)施方式從從屬權(quán)利要求、描述內(nèi)容和附圖中顯而易見(jiàn)。如下文所描述的本發(fā)明基于以下發(fā)現(xiàn):可通過(guò)利用非對(duì)稱內(nèi)存訪問(wèn)延遲的差異提供一種改進(jìn)的排序技術(shù),以便顯著降低內(nèi)存訪問(wèn)高度密集的排序算法中的內(nèi)存訪問(wèn)成本。為了詳細(xì)地描述本發(fā)明,將使用以下術(shù)語(yǔ)、縮略語(yǔ)和表示:DBMS:數(shù)據(jù)庫(kù)管理系統(tǒng)。SQL:結(jié)構(gòu)化查詢語(yǔ)言。CPU:中央處理器。SIMD:?jiǎn)沃噶盍鞫鄶?shù)據(jù)流。NUMA:非一致性內(nèi)存訪問(wèn)。數(shù)據(jù)庫(kù)管理系統(tǒng)(databasemanagementSystem,DBMS)是經(jīng)特殊設(shè)計(jì)的應(yīng)用,這些應(yīng)用與用戶、其它應(yīng)用和數(shù)據(jù)庫(kù)本身交互以獲取和分析數(shù)據(jù)。通用數(shù)據(jù)庫(kù)管理系統(tǒng)(databasemanagementsystem,DBMS)是一種設(shè)計(jì)為支持?jǐn)?shù)據(jù)庫(kù)定義、創(chuàng)建、查詢、更新和管理的軟件系統(tǒng)。不同的DBMS可通過(guò)使用諸如SQL和ODBC或JDBC等標(biāo)準(zhǔn)互操作以允許單個(gè)應(yīng)用與一個(gè)以上數(shù)據(jù)庫(kù)一起操作。SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語(yǔ)言)是一種專用編程語(yǔ)言,設(shè)計(jì)用于管理保存在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(relationaldatabasemanagementsystem,RDBMS)中的數(shù)據(jù)。最初以關(guān)系代數(shù)和元組關(guān)系演算為基礎(chǔ),SQL由數(shù)據(jù)定義語(yǔ)言和數(shù)據(jù)操作語(yǔ)言組成。SQL的范圍包括數(shù)據(jù)插入、查詢、更新和刪除、模型創(chuàng)建和修改以及數(shù)據(jù)訪問(wèn)控制。單指令流多數(shù)據(jù)流(singleinstruction,multipledata,SIMD)是計(jì)算機(jī)架構(gòu)分類中的一類并行計(jì)算機(jī)。SIMD描述具有多個(gè)處理元件的計(jì)算機(jī),這些處理元件同時(shí)對(duì)多個(gè)數(shù)據(jù)點(diǎn)執(zhí)行相同操作。因此,這些機(jī)器利用數(shù)據(jù)級(jí)并行操作,這些機(jī)器包括陣列處理器或GPU等。根據(jù)第一方面,本發(fā)明涉及一種用于對(duì)分布在多個(gè)互聯(lián)處理節(jié)點(diǎn)的本地內(nèi)存分區(qū)上的輸入數(shù)據(jù)進(jìn)行排序的排序方法,所述排序方法包括:通過(guò)將第一進(jìn)程部署在處理節(jié)點(diǎn)上,在本地按每所述處理節(jié)點(diǎn)對(duì)所述分布式輸入數(shù)據(jù)進(jìn)行排序,以在所述處理節(jié)點(diǎn)的所述本地內(nèi)存分區(qū)上產(chǎn)生多個(gè)已排序列表;在所述處理節(jié)點(diǎn)的所述本地內(nèi)存分區(qū)上創(chuàng)建值域塊序列,其中每個(gè)值域塊用于存儲(chǔ)在其值域內(nèi)的數(shù)據(jù)值;通過(guò)將第二進(jìn)程部署在所述處理節(jié)點(diǎn)上,將所述多個(gè)已排序列表復(fù)制到所述值域塊序列,其中每個(gè)值域塊接收所述已排序列表的元素,所述元素的值在其值域內(nèi);通過(guò)使用所述第二進(jìn)程,在本地按每個(gè)處理節(jié)點(diǎn)對(duì)所述值域塊的元素進(jìn)行排序,以在所述值域塊上產(chǎn)生已排序元素;以及相對(duì)于值域塊的值域從所述值域塊序列中按順序讀取所述已排序元素,以獲得所述已排序輸入數(shù)據(jù)。由于在很大程度上使用本地?cái)?shù)據(jù)訪問(wèn)而避免了遠(yuǎn)程訪問(wèn)損失,所以這種排序算法的效率得以提高。在處理節(jié)點(diǎn)的本地內(nèi)存分區(qū)上創(chuàng)建值域塊序列允許使用順序訪問(wèn)數(shù)據(jù)而不是隨機(jī)訪問(wèn),這提高了訪問(wèn)局部性和緩存效率。尤其是在遠(yuǎn)程訪問(wèn)的情況下,使用順序訪問(wèn)利用抵消遠(yuǎn)程訪問(wèn)損失的預(yù)提取。在計(jì)算中使用鄰近數(shù)據(jù)項(xiàng)的矢量允許使用SIMD。根據(jù)所述第一方面,在所述排序方法的第一可能實(shí)施形式中,所述多個(gè)互聯(lián)處理節(jié)點(diǎn)的所述本地內(nèi)存分區(qū)被結(jié)構(gòu)化為非對(duì)稱內(nèi)存。對(duì)數(shù)據(jù)進(jìn)行順序訪問(wèn)而不是隨機(jī)訪問(wèn)提高了非對(duì)稱內(nèi)存上的訪問(wèn)局部性和緩存效率。根據(jù)如上所述第一方面或根據(jù)所述第一方面的所述第一實(shí)施形式,在所述排序方法的第二可能實(shí)施形式中,第一進(jìn)程的數(shù)目等于本地內(nèi)存分區(qū)的數(shù)目。當(dāng)?shù)谝贿M(jìn)程的數(shù)目等于本地內(nèi)存分區(qū)的數(shù)目時(shí),可通過(guò)相應(yīng)第一進(jìn)程并行處理每個(gè)本地內(nèi)存分區(qū),從而提高處理速度。根據(jù)如上所述第一方面或根據(jù)所述第一方面的任一前述實(shí)施形式,在所述排序方法的第三可能實(shí)施形式中,所述第一進(jìn)程產(chǎn)生不相交的已排序列表。當(dāng)所述第一進(jìn)程產(chǎn)生不相交的已排序列表時(shí),一個(gè)列表中的本地排序可以在沒(méi)有訪問(wèn)其它列表的情況下執(zhí)行。這提高了處理效率。根據(jù)如上所述第一方面或根據(jù)所述第一方面的任一前述實(shí)施形式,在所述排序方法的第四可能實(shí)施形式中,所述在本地按每個(gè)處理節(jié)點(diǎn)對(duì)所述分布式輸入數(shù)據(jù)進(jìn)行排序是基于串行排序流程和并行排序流程之一。在排序步驟中使用僅本地內(nèi)存訪問(wèn)減少了接口間通信開(kāi)銷,因此降低了計(jì)算復(fù)雜性并提高了所述排序方法的性能。根據(jù)如上所述第一方面或根據(jù)所述第一方面的任一前述實(shí)施形式,在所述排序方法的第五可能實(shí)施形式中,第二進(jìn)程的數(shù)目等于值域塊的數(shù)目。當(dāng)?shù)诙M(jìn)程的數(shù)目等于值域塊的數(shù)目時(shí),可通過(guò)相應(yīng)的第二進(jìn)程并行處理每個(gè)值域區(qū)塊,從而提高處理速度。根據(jù)如上所述第一方面或根據(jù)所述第一方面的任一前述實(shí)施形式,在所述排序方法的第六可能實(shí)施形式中,每個(gè)值域塊具有不同的值域。當(dāng)每個(gè)值域區(qū)具有不用的值域時(shí),每個(gè)內(nèi)存分區(qū)可對(duì)不同的數(shù)據(jù)進(jìn)行操作,從而允許并行處理,這提高了處理速度。根據(jù)如上所述第一方面或根據(jù)所述第一方面的前述任一實(shí)施形式,在所述排序方法的第七可能實(shí)施形式中,每個(gè)值域塊接收多個(gè)已排序列表,具體而言,已排序列表的數(shù)目對(duì)應(yīng)于所述第一進(jìn)程的數(shù)目。因此,來(lái)自不同處理節(jié)點(diǎn)的相似值域中的數(shù)據(jù)可以在一個(gè)處理節(jié)點(diǎn)上集中,這提高了所述方法的計(jì)算效率。根據(jù)如上所述第一方面或根據(jù)所述第一方面的任一前述實(shí)施形式,在所述排序方法的第八可能實(shí)施形式中,在一個(gè)處理節(jié)點(diǎn)上運(yùn)行的所述第二進(jìn)程中的一個(gè)第二進(jìn)程在將所述多個(gè)已排序列表復(fù)制到所述值域塊序列時(shí)從所述一個(gè)處理節(jié)點(diǎn)的所述本地內(nèi)存以及從其它處理節(jié)點(diǎn)的所述本地內(nèi)存中按順序讀取。在復(fù)制步驟中使用順序遠(yuǎn)程內(nèi)存訪問(wèn)減少了遠(yuǎn)程訪問(wèn)損失。根據(jù)所述第一方面的所述第八實(shí)施形式,在所述排序方法的第九可能實(shí)施形式中,在所述第一個(gè)處理節(jié)點(diǎn)上運(yùn)行的所述第二進(jìn)程在將所述多個(gè)已排序列表復(fù)制到所述值域塊序列時(shí)僅寫(xiě)入所述一個(gè)處理節(jié)點(diǎn)的所述本地內(nèi)存。這樣,所述第二進(jìn)程在寫(xiě)入內(nèi)存時(shí)不需要等待接口間連接響應(yīng)。根據(jù)如上所述第一方面或根據(jù)所述第一方面的任一前述實(shí)施形式,在所述排序方法的第十可能實(shí)施形式中,所述從所述值域塊序列中按順序讀取所述已排序元素利用硬件預(yù)提取執(zhí)行。利用硬件預(yù)提取提高了處理速度。根據(jù)如上所述第一方面或根據(jù)所述第一方面的任一前述實(shí)施形式,在所述排序方法的第十一可能實(shí)施形式中,所述第二進(jìn)程使用矢量化處理,具體而言是在單指令流多數(shù)據(jù)流硬件塊上運(yùn)行的矢量化處理,用于將所述已排序列表的值與所述值域塊的值域進(jìn)行比較以及用于將所述多個(gè)已排序列表復(fù)制到所述值域塊序列中。在排序步驟中使用矢量化處理,諸如SIMD,提高了排序性能。使用矢量化處理,諸如SIMD,同時(shí)復(fù)制允許利用全內(nèi)存帶寬。根據(jù)如上所述第一方面或根據(jù)所述第一方面的任一前述實(shí)施形式,在所述排序方法的第十二可能實(shí)施形式中,所述多個(gè)處理節(jié)點(diǎn)通過(guò)接口間連接進(jìn)行互聯(lián);一個(gè)處理節(jié)點(diǎn)的本地內(nèi)存是另一處理節(jié)點(diǎn)的遠(yuǎn)程內(nèi)存。所述方法使用通過(guò)接口間連接進(jìn)行互聯(lián)的非對(duì)稱內(nèi)存在標(biāo)準(zhǔn)硬件架構(gòu)上實(shí)施。所述方法可應(yīng)用于多個(gè)內(nèi)核和許多內(nèi)核處理器平臺(tái)上。根據(jù)第二方面,本發(fā)明涉及一種處理系統(tǒng),包括:多個(gè)互聯(lián)處理節(jié)點(diǎn),每個(gè)互聯(lián)處理節(jié)點(diǎn)包括本地內(nèi)存和處理單元,其中輸入數(shù)據(jù)分布在所述處理節(jié)點(diǎn)的所述本地內(nèi)存上,所述處理單元用于:在本地按每處理節(jié)點(diǎn)對(duì)所述分布式輸入數(shù)據(jù)進(jìn)行排序,以在所述處理節(jié)點(diǎn)的所述本地內(nèi)存上產(chǎn)生多個(gè)已排序列表;在所述處理節(jié)點(diǎn)的所述本地內(nèi)存上創(chuàng)建值域塊序列,其中每個(gè)值域塊用于存儲(chǔ)在其值域內(nèi)的數(shù)據(jù)值;將所述多個(gè)已排序列表復(fù)制到所述值域塊序列,其中每個(gè)值域塊接收所述已排序列表的元素,所述元素的值在其值域內(nèi);在本地按每處理節(jié)點(diǎn)對(duì)所述值域塊的所述元素進(jìn)行排序,以在所述值域塊上產(chǎn)生已排序元素;以及相對(duì)于所述已排序元素的值域從所述值域塊序列中按順序讀取所述已排序元素,以獲得所述已排序輸入數(shù)據(jù)。這種對(duì)分布式輸入數(shù)據(jù)進(jìn)行排序的新處理系統(tǒng)能夠?qū)Υ罅侩S機(jī)分布的值進(jìn)行排序,從而最大化硬件資源利用效率。根據(jù)第三方面,本發(fā)明涉及一種包括可讀存儲(chǔ)介質(zhì)的計(jì)算機(jī)程序產(chǎn)品,所述可讀存儲(chǔ)介質(zhì)將程序代碼存儲(chǔ)在其上以供計(jì)算機(jī)使用,所述程序代碼對(duì)分布在多個(gè)互聯(lián)處理節(jié)點(diǎn)的本地內(nèi)存分區(qū)上的輸入數(shù)據(jù)進(jìn)行排序,所述程序代碼包括執(zhí)行以下操作的指令:通過(guò)使用在所述處理節(jié)點(diǎn)上運(yùn)行的第一進(jìn)程在本地按每處理節(jié)點(diǎn)對(duì)所述分布式輸入數(shù)據(jù)進(jìn)行排序,以在所述處理節(jié)點(diǎn)的所述本地內(nèi)存分區(qū)上產(chǎn)生多個(gè)已排序列表;在所述處理節(jié)點(diǎn)的所述本地存儲(chǔ)器分區(qū)上創(chuàng)建值域塊序列,其中每個(gè)值域塊用于存儲(chǔ)在其值域內(nèi)的數(shù)據(jù)值;通過(guò)使用第二進(jìn)程將所述多個(gè)已排序列表復(fù)制到所述值域區(qū)序列,其中每個(gè)值域塊接收所述已排序列表中的元素,其值在其值域內(nèi);通過(guò)使用所述第二進(jìn)程在本地按每處理節(jié)點(diǎn)對(duì)所值域塊的所述元素進(jìn)行排序,以在所述值域塊上產(chǎn)生已排序元素;以及相對(duì)于值域塊的值域從所述值域塊序列中按順序讀取所述已排序元素,以獲得所述已排序輸入數(shù)據(jù)。所述計(jì)算機(jī)程序可靈活設(shè)計(jì),使得很容易實(shí)現(xiàn)需求更新。計(jì)算機(jī)程序產(chǎn)品可在多個(gè)內(nèi)核和許多內(nèi)核處理系統(tǒng)上運(yùn)行。因此,本發(fā)明的各方面提供了如下文進(jìn)一步描述的一種改進(jìn)的排序技術(shù)。附圖說(shuō)明本發(fā)明的具體實(shí)施方式將結(jié)合以下附圖進(jìn)行描述,其中:圖1為一現(xiàn)代機(jī)器硬件100的示意圖。圖2為一現(xiàn)代處理器200的示意圖。圖3所示為根據(jù)一實(shí)施形式的圖示一種示例性排序方法300的示意圖。圖4所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性分區(qū)動(dòng)作301的示意圖。圖5所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性本地分區(qū)排序動(dòng)作302的示意圖。圖6所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的提取和排序動(dòng)作303內(nèi)的示例性線程部署動(dòng)作303a的示意圖。圖7所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性提取和排序動(dòng)作303的示意圖。圖8所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性本地值域排序動(dòng)作304的示意圖。圖9所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性合并動(dòng)作305的示意圖。圖10所示為圖示通過(guò)在分區(qū)數(shù)據(jù)上使用并行查詢處理對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)中的查詢結(jié)果進(jìn)行排序的示例性方法1000的示意圖。圖11所示為根據(jù)一實(shí)施形式的圖示一種示例性排序方法1100的示意圖。具體實(shí)施方式以下結(jié)合附圖進(jìn)行詳細(xì)描述,所述附圖是描述的一部分,并通過(guò)圖解說(shuō)明的方式示出可以實(shí)施本發(fā)明的具體方面。可以理解的是,在不脫離本發(fā)明范圍的情況下,可以利用其它方面,并可以做出結(jié)構(gòu)上或邏輯上的改變。因此,以下詳細(xì)的描述并不當(dāng)作限定,本發(fā)明的范圍由所附權(quán)利要求書(shū)界定。本文中所描述的設(shè)備和方法可基于排序分布式輸入數(shù)據(jù)、本地內(nèi)存分區(qū)和互聯(lián)處理節(jié)點(diǎn)。據(jù)了解,結(jié)合描述的方法進(jìn)行的評(píng)論同樣對(duì)于用于執(zhí)行方法的對(duì)應(yīng)設(shè)備和系統(tǒng)成立,反之亦然。例如,如果描述了特定方法步驟,對(duì)應(yīng)的設(shè)備可包括執(zhí)行所描述的方法步驟的單元,即使該單元沒(méi)有在圖中詳細(xì)描述或圖示。此外,應(yīng)理解,本文中描述的各種示例性方面的特征可相互組合,除非另有特殊說(shuō)明。本文中描述的方法和設(shè)備可在硬件架構(gòu)中實(shí)現(xiàn),硬件架構(gòu)包括非對(duì)稱內(nèi)存和數(shù)據(jù)庫(kù)管理系統(tǒng),尤其是使用SQL的DBMS。所描述的設(shè)備和系統(tǒng)可以包括集成電路和/或無(wú)源器件且可以根據(jù)各種技術(shù)制造。例如,電路可設(shè)計(jì)為邏輯集成電路、模擬集成電路、混合信號(hào)集成電路、光電路、存儲(chǔ)器電路和/或集成無(wú)源器件。圖3所示為根據(jù)一實(shí)施形式的圖示一種示例性排序方法300的示意圖,該方法用于對(duì)輸入數(shù)據(jù)進(jìn)行排序,輸入數(shù)據(jù)分布在上文結(jié)合圖1和圖2描述的硬件系統(tǒng)100、200等的多個(gè)互聯(lián)處理節(jié)點(diǎn)101、103中的本地內(nèi)存分區(qū)107、117上。排序方法300可包括對(duì)分布在非對(duì)稱內(nèi)存上的輸入數(shù)據(jù)進(jìn)行分區(qū)301,以獲得多個(gè)內(nèi)存分區(qū)。排序方法300可包括通過(guò)使用任何已知的本地排序方法等在本地對(duì)內(nèi)存分區(qū)進(jìn)行排序302??蔀槊總€(gè)內(nèi)存分區(qū)執(zhí)行排序動(dòng)作302。排序方法300可包括將本地排序302的結(jié)果提取和復(fù)制303到值域,值域即用于存儲(chǔ)在特定值域的數(shù)據(jù)的內(nèi)存區(qū)??蔀槊總€(gè)內(nèi)存分區(qū)執(zhí)行提取和復(fù)制動(dòng)作303。排序方法300可包括通過(guò)使用任何已知的本地排序方法等在本地對(duì)每個(gè)值域進(jìn)行排序304??蔀槊總€(gè)值域執(zhí)行排序動(dòng)作304。排序方法300可包括合并305已排序的值域。下文結(jié)合圖4至圖9進(jìn)一步描述了不同的排序步驟或動(dòng)作。本發(fā)明中描述的方法300可在五個(gè)步驟內(nèi)對(duì)大量隨機(jī)分布的值進(jìn)行排序,因此能夠最大化硬件資源利用效率。本方法300利用非對(duì)稱內(nèi)存訪問(wèn)延遲的差異,從而顯著降低像排序等內(nèi)存訪問(wèn)高度密集算法中的內(nèi)存訪問(wèn)成本。圖4所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性分區(qū)動(dòng)作301的示意圖。在非對(duì)稱內(nèi)存400上對(duì)輸入數(shù)據(jù)進(jìn)行分區(qū)。輸入數(shù)據(jù)分布在非對(duì)稱內(nèi)存400的存儲(chǔ)體401、402、403、404上。該分區(qū)步驟301可以是可選的,因?yàn)槎鄶?shù)并行數(shù)據(jù)處理方法,像并行查詢處理方法,會(huì)產(chǎn)生分區(qū)數(shù)據(jù)。圖5所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性本地分區(qū)排序動(dòng)作302的示意圖。部署線程以在本地對(duì)數(shù)據(jù)進(jìn)行排序。在本地將第一存儲(chǔ)體401上的數(shù)據(jù)“1、5、3、2、6、4、7”排序在第一存儲(chǔ)體401上,得到排序后數(shù)據(jù)“1、2、3、4、5、6、7”。在本地將第二存儲(chǔ)體402上的數(shù)據(jù)“5、3、2、4、7、6、1”排序在第二存儲(chǔ)體402上,得到排序后數(shù)據(jù)“1、2、3、4、5、6、7”。在本地將第三存儲(chǔ)體403上的數(shù)據(jù)“1、2、3、4、5、6、7”排序在第三存儲(chǔ)體403上,得到排序后數(shù)據(jù)“1、2、3、4、5、6、7”。在本地將第四存儲(chǔ)體404上的數(shù)據(jù)“7、6、5、4、3、2、1”排序在第四存儲(chǔ)體404上,得到排序后數(shù)據(jù)“1、2、3、4、5、6、7”。線程的數(shù)目可能等于分區(qū)的數(shù)目(圖5示出了四個(gè)分區(qū)401、402、403、404,但其它數(shù)目也是有可能的)。所有線程可產(chǎn)生如下文所描述的可合并的不相交的已排序列表,以獲得最終的排序輸出。任何排序方法都可用于排序動(dòng)作302,串行或并行。本地訪問(wèn)被充分利用。圖6所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的提取和排序動(dòng)作303內(nèi)的示例性線程部署動(dòng)作303a的示意圖?;跀?shù)據(jù)樣本,可創(chuàng)建值域集600,該值域集可用來(lái)在不同線程之間分布排序數(shù)據(jù)。值域可以是包含給定取值范圍中值的輸入數(shù)據(jù)的子集,例如,給定取值范圍在圖6的示例為從1到7。值域可計(jì)算為(約)相同大小。這可利用通過(guò)在排序階段執(zhí)行的采樣獲得的值分布直方圖來(lái)實(shí)現(xiàn)。值域可基于所有分區(qū)401、402、403、404中的數(shù)據(jù)來(lái)計(jì)算。在圖6中,創(chuàng)建四個(gè)值域,第一值域包括數(shù)據(jù)值1和2,第二值域包括數(shù)據(jù)值3和4,第三值域包括數(shù)據(jù)值5和6,第四值域包括數(shù)據(jù)值7。根據(jù)圖6,線程的數(shù)目為4,但任意其它數(shù)目也是可能的,線程的數(shù)目可與值域的數(shù)目相同。第一線程“線程1”關(guān)聯(lián)到第一值域,第二線程“線程2”關(guān)聯(lián)到第二值域,第三線程“線程3”關(guān)聯(lián)到第三值域,第四線程“線程4”關(guān)聯(lián)到第四值域?;谥涤虻臄?shù)目,可在不同的存儲(chǔ)體中創(chuàng)建存儲(chǔ)器的相同數(shù)目的值域塊。每個(gè)存儲(chǔ)體中的值域區(qū)塊的數(shù)目可相同,以便利用所有可用內(nèi)核。圖7所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性提取和排序動(dòng)作303的示意圖。可部署線程以基于值將數(shù)據(jù)從已排序列表401、402、403、404復(fù)制到新創(chuàng)建的值域塊703、704、713、714。因此,每個(gè)值域塊703、704、713、714將具有給定取值范圍內(nèi)的多個(gè)已排序列表。在圖7的示例中,存儲(chǔ)體0(701)中的第一值域塊703包括數(shù)據(jù)值1和2;存儲(chǔ)體0(701)中的第二值域塊704包括數(shù)據(jù)值3和4;存儲(chǔ)體1(702)中的第三值域塊713包括數(shù)據(jù)值4和5;存儲(chǔ)體1(702)中的第四值域塊714包括數(shù)據(jù)值7。線程僅可寫(xiě)入本地內(nèi)存且可從本地和遠(yuǎn)程內(nèi)存中按順序讀取。在執(zhí)行值比較時(shí),線程可使用鄰近的串行數(shù)據(jù)??衫肧IMD的優(yōu)點(diǎn)。圖8所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性本地值域排序動(dòng)作304的示意圖。如上文結(jié)合圖6和圖7所述,可使用相同線程(每值域區(qū)塊一個(gè)線程)來(lái)執(zhí)行復(fù)制數(shù)據(jù)的原地排序。可在節(jié)點(diǎn)0(701)上實(shí)施的存儲(chǔ)體0中的第一值域塊703可通過(guò)使用線程0等將數(shù)據(jù)從“12121212”排序?yàn)椤?1112222”??稍诠?jié)點(diǎn)0(701)上實(shí)施的存儲(chǔ)體0中的第二值域塊704可通過(guò)使用線程1等將數(shù)據(jù)從“34343434”排序?yàn)椤?3334444”??稍诠?jié)點(diǎn)1(702上)實(shí)施的存儲(chǔ)體1中的第三值域塊713可通過(guò)使用線程3等將數(shù)據(jù)從“56565656”排序?yàn)椤?5556666”??稍诠?jié)點(diǎn)1(702)上實(shí)施的存儲(chǔ)體1中的第四值域塊714可通過(guò)使用線程3等將數(shù)據(jù)從“7777”排序?yàn)椤?777”。因此,每個(gè)塊703、704、713、714具有特定值域中的排序數(shù)據(jù)??衫萌魏我阎判蚍椒?,例如串行或并行排序方法,執(zhí)行本地排序??沙浞掷脭?shù)據(jù)訪問(wèn)的局部性。數(shù)據(jù)組織可能有助于利用SIMD進(jìn)行比較和復(fù)制。圖9所示為根據(jù)一實(shí)施形式的圖示圖3所描繪的排序方法300的示例性合并動(dòng)作305的示意圖。為了獲得排序結(jié)果,可在值域塊703、704、713、714的序列上執(zhí)行迭代,并讀取數(shù)據(jù)??蓮谋镜?01和遠(yuǎn)程702位置按順序讀取數(shù)據(jù),從而通過(guò)利用硬件預(yù)提取降低接口到接口通信的影響。圖10所示為圖示通過(guò)在分區(qū)數(shù)據(jù)上使用并行查詢處理對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)中的查詢結(jié)果進(jìn)行排序的示例性方法1000的示意圖。圖10描述一種對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)中的排序查詢結(jié)果進(jìn)行排序的特定方法,涉及分區(qū)數(shù)據(jù)上的并行查詢處理。通過(guò)形式為“SELECTA,…FROMtableWHERE…ORDERBYA”的SQL語(yǔ)句表達(dá)一個(gè)示例查詢。方法1000可應(yīng)用于ORDERBY子句的執(zhí)行。查詢處理器可并行產(chǎn)生工作線程、產(chǎn)生寫(xiě)入每個(gè)線程的本地內(nèi)存(分區(qū))的未排序結(jié)果。這由圖10的步驟1圖示。在步驟2中,每個(gè)未排序分區(qū)可由專用線程在本地進(jìn)行排序。在步驟3中,可重新對(duì)數(shù)據(jù)進(jìn)行分區(qū),從而(a)計(jì)算數(shù)據(jù)取值范圍以包含近似相等的數(shù)據(jù)量,(b)將數(shù)據(jù)取值范圍分區(qū)分配給對(duì)于工作線程是本地的內(nèi)存,以及(c)每個(gè)工作線程按順序掃描步驟2中產(chǎn)生的排序分區(qū)并提取相關(guān)數(shù)據(jù),使用匹配值域的數(shù)據(jù)填充值域分區(qū)。在步驟4中,可在本地對(duì)每個(gè)值域進(jìn)行排序,從而產(chǎn)生一部分正確排序的結(jié)果集(結(jié)果分區(qū))。在步驟5中,可通過(guò)將結(jié)果分區(qū)以合適的順序連接并按該順序讀取結(jié)果分區(qū)來(lái)合并結(jié)果集部分。在一個(gè)示例中,方法1000可應(yīng)用于執(zhí)行:在執(zhí)行具有JOIN子句或表示為隱式連接的SQL查詢的過(guò)程中在數(shù)據(jù)庫(kù)管理系統(tǒng)中進(jìn)行排序。在這種情況下,上述步驟2至4可應(yīng)用于在合并連接方法的環(huán)境中對(duì)輸入表格進(jìn)行排序。在另一個(gè)示例中,方法1000可應(yīng)用于執(zhí)行:在執(zhí)行具有GROUPBY子句的SQL查詢的過(guò)程中在數(shù)據(jù)庫(kù)管理系統(tǒng)中進(jìn)行排序。在這種情況下,上述步驟2至4可應(yīng)用于對(duì)聚合的計(jì)算結(jié)果(組)進(jìn)行排序。圖11所示為根據(jù)一實(shí)施形式的圖示對(duì)分布在多個(gè)互聯(lián)處理節(jié)點(diǎn)的本地內(nèi)存分區(qū)上的輸入數(shù)據(jù)進(jìn)行排序的示例性排序方法1100的示意圖。方法1100可包括:通過(guò)將第一進(jìn)程部署在處理節(jié)點(diǎn)上,在本地按每處理節(jié)點(diǎn)對(duì)分布式輸入數(shù)據(jù)進(jìn)行排序1101,以在處理節(jié)點(diǎn)的本地內(nèi)存分區(qū)上產(chǎn)生多個(gè)已排序列表。方法1100可包括在處理節(jié)點(diǎn)的本地內(nèi)存分區(qū)上創(chuàng)建1102值域塊序列,其中每個(gè)值域塊用于存儲(chǔ)在其值域內(nèi)的數(shù)據(jù)值。方法1100可包括:通過(guò)將第二進(jìn)程部署在處理節(jié)點(diǎn)上,將多個(gè)已排序列表復(fù)制1103到值域塊序列,其中每個(gè)值域塊接收已排序列表的元素,所述元素的值在其值域內(nèi)。方法1100可包括:通過(guò)使用第二進(jìn)程,在本地按每處理節(jié)點(diǎn)對(duì)值域塊的元素進(jìn)行排序1104,以在值域塊上產(chǎn)生已排序元素。方法1100可包括相對(duì)于值域塊的值域從值域塊序列中按順序讀取1105已排序元素以獲得已排序輸入數(shù)據(jù)。排序1101可對(duì)應(yīng)于如上文結(jié)合圖3所描述的在本地對(duì)內(nèi)存分區(qū)進(jìn)行排序302。創(chuàng)建1102和復(fù)制1103可對(duì)應(yīng)于如上文結(jié)合圖3所描述的提取和復(fù)制動(dòng)作303。排序1104可對(duì)應(yīng)于如上文結(jié)合圖3所描述的在本地對(duì)每個(gè)值域進(jìn)行排序304。讀取1105可對(duì)應(yīng)于如上文結(jié)合圖3所描述的合并305排序值域。在一個(gè)示例中,多個(gè)互聯(lián)處理節(jié)點(diǎn)的本地內(nèi)存分區(qū)可結(jié)構(gòu)化為非對(duì)稱內(nèi)存。在一個(gè)示例中,第一進(jìn)程的數(shù)目可等于本地內(nèi)存分區(qū)的數(shù)目。在一個(gè)示例中,第一進(jìn)程可產(chǎn)生不相交的已排序列表。在一個(gè)示例中,在本地按每處理節(jié)點(diǎn)對(duì)分布式輸入數(shù)據(jù)進(jìn)行排序可基于串行排序流程和并行排序流程之一。在一個(gè)示例中,第二進(jìn)程的數(shù)目可等于值域塊的數(shù)目。在一個(gè)示例中,每個(gè)值域塊可具有不同的值域。在一個(gè)示例中,每個(gè)值域塊可接收多個(gè)已排序列表,具體是,已排序列表的數(shù)目對(duì)應(yīng)于第一進(jìn)程的數(shù)目。在一個(gè)示例中,在第一處理節(jié)點(diǎn)上運(yùn)行的第二進(jìn)程中的一個(gè)第二進(jìn)程在將多個(gè)已排序列表復(fù)制到值域塊序列時(shí)可從該一個(gè)處理節(jié)點(diǎn)的本地內(nèi)存和從其它處理節(jié)點(diǎn)的本地內(nèi)存中按順序讀取。在一個(gè)示例中,在該一個(gè)處理節(jié)點(diǎn)上運(yùn)行的第二進(jìn)程在將多個(gè)已排序列表復(fù)制到值域塊序列時(shí)僅寫(xiě)入該一個(gè)處理節(jié)點(diǎn)的本地內(nèi)存。在一個(gè)示例中,可通過(guò)利用硬件預(yù)提取執(zhí)行從值域塊序列中按順序讀取已排序元素。在一個(gè)示例中,第二進(jìn)程可使用矢量化處理,具體是在單指令流多數(shù)據(jù)流硬件塊上運(yùn)行的矢量化處理,用于將已排序列表的值與值域塊的值域進(jìn)行比較以及用于將多個(gè)已排序列表復(fù)制到值域塊序列。在一個(gè)示例中,多個(gè)處理節(jié)點(diǎn)可通過(guò)接口間連接互聯(lián),一個(gè)處理節(jié)點(diǎn)的本地內(nèi)存可以是另一處理節(jié)點(diǎn)的遠(yuǎn)程內(nèi)存。本發(fā)明包括一種利用系統(tǒng)中不同存儲(chǔ)體的訪問(wèn)時(shí)間差的方法。這可通過(guò)最低限度使用接口到接口通信鏈路來(lái)實(shí)現(xiàn)。直到如今,還沒(méi)有部署一種對(duì)隨機(jī)安排的數(shù)據(jù)進(jìn)行排序的方法,這種方法可最小化通過(guò)不同接口的隨機(jī)數(shù)據(jù)訪問(wèn)。通過(guò)使用測(cè)量工具,數(shù)據(jù)流通過(guò)接口,并可為排序操作確定訪問(wèn)模式。本文中所描述的方法、系統(tǒng)和設(shè)備可以作為數(shù)字信號(hào)處理器(DigitalSignalProcessor,DSP)、微控制器或任何其它邊處理器中的軟件或作為專用集成電路(applicationspecificintegratedcircuit,ASIC)內(nèi)的硬件電路來(lái)實(shí)現(xiàn)。本發(fā)明可以實(shí)施于數(shù)字電子電路或計(jì)算機(jī)硬件、固件、軟件或其組合中,例如,實(shí)施于常規(guī)移動(dòng)設(shè)備的可用硬件或?qū)S糜谔幚肀疚乃枋龅姆椒ǖ男掠布小1景l(fā)明還支持一種包括可執(zhí)行代碼或計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)程序產(chǎn)品,當(dāng)執(zhí)行這些指令時(shí),使得至少一個(gè)計(jì)算機(jī)執(zhí)行本文中所描述的執(zhí)行和計(jì)算步驟,具體是上文結(jié)合圖3至圖9所描述的方法300和上文結(jié)合圖10和圖11所描述的方法1000、1100。這種計(jì)算機(jī)程序產(chǎn)品可包括在其上存儲(chǔ)有程序代碼的可讀存儲(chǔ)介質(zhì),程序代碼供計(jì)算機(jī)使用。該程序代碼可用于對(duì)分布在多個(gè)互聯(lián)處理節(jié)點(diǎn)的本地內(nèi)存分區(qū)上的輸入數(shù)據(jù)進(jìn)行排序。該程序代碼可包括執(zhí)行以下操作的指令:通過(guò)使用在處理節(jié)點(diǎn)上運(yùn)行的第一進(jìn)程在本地按每處理節(jié)點(diǎn)對(duì)分布式輸入數(shù)據(jù)進(jìn)行排序,以在處理節(jié)點(diǎn)的本地內(nèi)存分區(qū)上產(chǎn)生多個(gè)已排序列表;在處理節(jié)點(diǎn)的本地存儲(chǔ)器分區(qū)上創(chuàng)建值域塊序列,其中每個(gè)值域塊用于存儲(chǔ)在其值域內(nèi)的數(shù)據(jù)值;通過(guò)使用第二進(jìn)程將多個(gè)已排序列表復(fù)制到值域區(qū)序列,其中每個(gè)值域塊接收已排序列表中的元素,所述元素的值在其范圍內(nèi);通過(guò)使用第二進(jìn)程在本地按每處理節(jié)點(diǎn)對(duì)值域塊的元素進(jìn)行排序,以在值域塊上產(chǎn)生已排序元素;以及相對(duì)于值域塊的值域從值域塊序列中按順序讀取已排序元素,以獲得已排的輸入數(shù)據(jù)。盡管本發(fā)明的特定特征或方面可能已經(jīng)僅結(jié)合幾種實(shí)現(xiàn)方式中的一種進(jìn)行公開(kāi),但此類特征或方面可以和其他實(shí)現(xiàn)方式中的一個(gè)或多個(gè)特征或方面相結(jié)合,只要對(duì)于任何給定或特定的應(yīng)用是有需要或有利。而且,在一定程度上,術(shù)語(yǔ)“包括”、“有”、“具有”或這些詞的其他變形在詳細(xì)的說(shuō)明書(shū)或權(quán)利要求書(shū)中使用,這類術(shù)語(yǔ)和所述術(shù)語(yǔ)“包含”是類似的,都是表示包括的含義。同樣,術(shù)語(yǔ)“示例性地”,“例如”僅表示為示例,而不是最好或最佳的。盡管本文中已經(jīng)圖示和描述了具體方面,但是本領(lǐng)域普通技術(shù)人員將會(huì)理解各種替代和/或等效實(shí)施形式可以代替所示出和描述的具體方面,而不脫離本發(fā)明的范圍。該申請(qǐng)旨在覆蓋本文論述的具體實(shí)施方式的任何修改或變更。盡管以下權(quán)利要求書(shū)中的各元素是借助對(duì)應(yīng)的標(biāo)簽按照特定順序列舉的,除非對(duì)權(quán)利要求的闡述另有暗示用于實(shí)現(xiàn)部分或所有這些元素的特定順序,否則這些元素并不一定限于以所述特定順序來(lái)實(shí)現(xiàn)。通過(guò)以上啟示,對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō),許多替代產(chǎn)品、修改及變體是顯而易見(jiàn)的。當(dāng)然,所屬領(lǐng)域的技術(shù)人員容易意識(shí)到除本文所述的應(yīng)用之外,還存在本發(fā)明的眾多其它應(yīng)用。雖然已參考一個(gè)或多個(gè)特定實(shí)施例描述了本發(fā)明,但所屬領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到在不偏離本發(fā)明的范圍的前提下,仍可對(duì)本發(fā)明做出許多改變。因此,應(yīng)理解,只要是在所附權(quán)利要求書(shū)及其等效文句的范圍內(nèi),可以用不同于本文具體描述的方式來(lái)實(shí)踐本發(fā)明。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3