一種并行排序的方法及裝置制造方法
【專利摘要】本發明公開了一種并行排序的方法及裝置,包括:將待排序的數組分為n個第一子數組,使得各個第一子數組的長度均衡,其中,n為線程的總個數;對獲得的第一子數組進行排序;根據排序后的各個第一子數組獲取n-1個中心點數據,根據獲得的n-1個中心點數據將各個線程對應的排序后的第一子數組中的數據按照一定的大小順序分為n部分,將獲得的各個第一子數組的各部分轉換為各個線程對應的第二子數組并排序;獲取各個線程對應的第二子數組的長度,確定各個線程對應的第二子數組在目標數組中的起始索引,將排序后的各個線程所對應的第二子數組存放在目標數組中。本發明的技術方案提升了數據排序效率,滿足了計算的實時性及對計算資源高利用率的要求。
【專利說明】一種并行排序的方法及裝置
【技術領域】
[0001] 本發明涉及高性能計算領域,尤指一種并行排序的方法及裝置。
【背景技術】
[0002] 排序方法廣泛的應用于科學計算、互聯網、數字信號處理等領域中,尤其廣泛應用 于互聯網的搜索引擎領域,對于數據的排序有著大量的應用。隨著云計算、大數據等新型技 術的發展,數據量越來越大,傳統的并行排序方法局限于其串行處理能力,難以勝任對大數 據處理的速度及性能的需求。同時串行的排序方法僅能應用在單處理器上,隨著目前多核 多處理器架構的快速發展,就越來越需要一種更高效的并行處理方法,以滿足計算的實時 性及計算資源高利用率的要求。傳統的并行快速排序算法是將串行算法直接并行化,由于 隨機的將待排序的數組分配給幾個線程或是全部線程,使得每個線程處理的數據的個數不 同,當某一個線程處理的數據是其他線程的很多倍時,就會使得處理數據少的線程所花費 的時間很短,而處理數據多的線程所花費的時間就會很長,這樣就導致了各個線程處理數 據的時間嚴重的不一致的問題,導致了各個線程之間計算任務很不均衡,從而影響了排序 的效率。
【發明內容】
[0003] 為了解決上述技術問題,本發明提供了一種并行排序的方法及裝置,能夠提升數 據排序的效率,同時能夠滿足計算的實時性及對計算資源高利用率的要求。
[0004] 為了達到上述發明目的,本發明公開了一種并行排序的方法,包括:預先設置每個 線程的標識;方法還包括:
[0005] 將待排序的數組分為η個第一子數組,使得各個第一子數組的長度均衡,每個第 一子數組對應于一個線程的標識,其中,η為線程的總個數;
[0006] 根據線程的標識,每個線程獲取與標識對應的第一子數組,并對獲得的第一子數 組進行排序;
[0007] 根據排序后的各個第一子數組獲取η-1個中心點數據,根據獲得的η-1個中心點 數據將各個線程對應的排序后的第一子數組中的數據按照一定的大小順序分為η部分,將 獲得的各個第一子數組的各部分轉換為各個線程對應的第二子數組,對各個線程對應的第 二子數組進行排序;
[0008] 獲取各個線程對應的第二子數組的長度,確定各個線程對應的第二子數組在目標 數組中的起始索引,將排序后的各個線程所對應的第二子數組存放在目標數組中。
[0009] 進一步地,將待排序的數組分為η個第一子數組,包括:
[0010] 根據待排序的數組的長度以及線程的總個數,得到為各個線程分配的第一子數 組;具體包括:
[0011] 將待排序的數組的長度除以線程的總個數得到各個線程對應的第一子數組的長 度;
[0012] 根據所述各個線程對應的第一子數組的長度以及待排序數組的索引,得到為各個 線程分配的第一子數組。
[0013] 進一步地,采用快速排序方法對所述獲得的第一子數組進行排序。
[0014] 進一步地,獲取n-1個中心點數據包括:
[0015] 從各個線程對應的排序后的第一子數組中選取η個樣本數據,將獲得的n*n個樣 本數據發送給一個線程進行排序,得到一個長度為n*n的第三子數組;
[0016] 按照以下索引從第三子數組中獲取n-1個中心點數據:
[0017]
【權利要求】
1. 一種并行排序的方法,其特征在于,預先設置每個線程的標識;方法還包括: 將待排序的數組分為η個第一子數組,使得各個第一子數組的長度均衡,每個第一子 數組對應于一個線程的標識,其中,η為線程的總個數; 根據線程的標識,每個線程獲取與標識對應的第一子數組,并對獲得的第一子數組進 行排序; 根據排序后的各個第一子數組獲取η-1個中心點數據,根據獲得的η-1個中心點數據 將各個線程對應的排序后的第一子數組中的數據按照一定的大小順序分為η部分,將獲得 的各個第一子數組的各部分轉換為各個線程對應的第二子數組,對各個線程對應的第二子 數組進行排序; 獲取各個線程對應的第二子數組的長度,確定各個線程對應的第二子數組在目標數組 中的起始索引,將排序后的各個線程所對應的第二子數組存放在目標數組中。
2. 根據權利要求1所述的方法,其特征在于,所述將待排序的數組分為η個第一子數 組,包括: 根據待排序的數組的長度以及線程的總個數,得到為各個線程分配的第一子數組;具 體包括: 將待排序的數組的長度除以線程的總個數得到各個線程對應的第一子數組的長度; 根據所述各個線程對應的第一子數組的長度以及待排序數組的索引,得到為各個線程 分配的第一子數組。
3. 根據權利要求1所述的方法,其特征在于,采用快速排序方法對所述獲得的第一子 數組進行排序。
4. 根據權利要求1所述的方法,其特征在于,所述獲取η-1個中心點數據包括: 從各個線程對應的排序后的第一子數組中選取η個樣本數據,將獲得的η*η個樣本數 據發送給一個線程進行排序,得到一個長度為η*η的第三子數組; 按照以下索引從第三子數組中獲取η-1個中心點數據:
5. 根據權利要求1所述的方法,其特征在于,所述將獲得的各個第一子數組的各部分 轉換為各個線程對應的第二子數組,包括: 將第i個線程對應的第一子數組的第i部分保存在第i個線程對應的第二子數組 中,將第j部分保存在第j個線程對應的第二子數組中;其中,i和j不相等,1 < i < n, 1 < j < η。
6. 根據權利要求4所述的方法,其特征在于,所述從各個線程對應的排序后的第一子 數組中選取η個樣本數據,包括:按照以下索引從各個線程對應的排序后的第一子數組中 獲取η個樣本數據: 〇,
,其中,Ρ為待排序的數組的長度。
7. 根據權利要求1所述的方法,其特征在于,所述確定各個線程對應的第二子數組在 目標數組中的起始索引,包括: 根據獲得的各個線程對應的第二子數組的長度,按照以下方式確定各個線程對應的第 二子數組在目標數組中的起始索引: 第一個線程對應的第二子數組在目標數組中的起始索引為0 ; 第i個線程對應的第二子數組在目標數組中的起始索引為前i個數組的長度,其中, 1 < i < n〇
8. 根據權利要求6所述的方法,其特征在于,所述將排序后的各個線程所對應的第二 子數組存放在目標數組中,包括: 按照第i個線程對應的第二子數組在目標數組中的起始索引,將排序后的第i個線程 所對應的第二子數組存放在目標數組中。
9. 根據權利要求6所述的方法,其特征在于,所述按照一定的大小順序包括:由小到大 的順序或有由大到小的順序。
10. -種并行排序的裝置,其特征在于,包括配置模塊,用于預先設置每個線程的標識, 還包括:均衡分配模塊、第一排序模塊、數據交換模塊和聚合模塊;其中, 均衡分配模塊,用于將待排序的數組分為η個第一子數組,使得各個第一子數組的長 度均衡,每個第一子數組對應于一個線程的標識,其中,η為線程的總個數; 第一排序模塊,用于根據線程的標識,獲取與各個線程的標識對應的第一子數組,并對 獲得的第一子數組進行排序; 數據交換模塊,用于根據排序后的各個第一子數組獲取η-I個中心點數據,根據獲得 的η-I個中心數據將各個線程對應的排序后的第一子數組中的數據按照一定的大小順序 分為η部分,將獲得的各個第一子數組的各部分轉換為各個線程對應的第二子數組,對各 個線程對應的第二子數組進行排序; 聚合模塊,用于獲取各個線程對應的第二子數組的長度,確定各個線程對應的第二子 數組在目標數組中的起始索引,將排序后的各個線程所對應的第二子數組存放在目標數組 中。
11. 根據權利要求10所述的裝置,其特征在于,所述均衡分配模塊具體用于:根據待排 序的數組的長度以及線程的總個數,得到為各個線程分配的第一子數組;具體包括: 將待排序的數組的長度除以線程的總個數得到各個線程對應的第一子數組的長度; 根據所述各個線程對應的第一子數組的長度以及待排序數組的索引,得到為各個線程 分配的第一子數組。
12. 根據權利要求10所述的裝置,其特征在于,所述第一排序模塊采用快速排序方法 對所述獲得的第一子數組進行排序。
13. 根據權利要求10所述的裝置,其特征在于,所述數據交換模塊具體用于: 從各個線程對應的排序后的第一子數組中選取η個樣本數據,將獲得的η*η個樣本數 據發送給一個線程進行排序,得到一個長度為η*η的第三子數組; 按照以下索引從第三子數組中獲取η-I個中心點數據:
14. 根據權利要求10所述的裝置,其特征在于,所述數據交換模塊具體用于: 將第i個線程對應的第一子數組的第i部分保存在第i個線程對應的第二子數組 中,將第j部分保存在第j個線程對應的第二子數組中;其中,i和j不相等,1 < i < n, 1 < j < η。
15. 根據權利要求13所述的裝置,其特征在于,所述數據交換模塊,具體用于:按照以 下索引從各個線程對應的排序后的第一子數組中獲取η個樣本數據: 〇:
其中,ρ為待排序的數組的長度。
16. 根據權利要求10所述的裝置,其特征在于,所述聚合模塊具體用于: 根據獲得的各個線程對應的第二子數組的長度,按照以下方式確定各個線程對應的第 二子數組在目標數組中的起始索引: 第一個線程對應的第二子數組在目標數組中的起始索引為0 ; 第i個線程對應的第二子數組在目標數組中的起始索引為前i個數組的長度,其中, 1 ^ i ^ η ; 按照第i個線程對應的第二子數組在目標數組中的起始索引,將排序后的第i個線程 所對應的第二子數組存放在目標數組中。
【文檔編號】G06F17/30GK104123386SQ201410384115
【公開日】2014年10月29日 申請日期:2014年8月6日 優先權日:2014年8月6日
【發明者】吳韶華, 張廣勇, 沈鉑, 盧曉偉, 王亞娟, 吳慶, 張清 申請人:浪潮(北京)電子信息產業有限公司