針對多核架構下的並行排序

2021-06-23 00:43:20 字數 789 閱讀 2311

在多核環境中,排序時如果仍然使用單核時代的序列排序演算法的話,那麼只能有乙個cpu核在執行,其他cpu核將得不到利用。因此多核環境中的排序一般需要用到並行排序演算法。

並行排序演算法和序列排序演算法相比,會增加一些額外的開銷,如計算開銷或空間開銷。那麼在並行排序演算法中,有那些需求呢?下面給出一些並行排序方面的需求供參考。

需求1:演算法能隨cpu核數擴充套件,即cpu核數公升級後不需要修改演算法就可以取得加速比效能的線性增加。

需求2:演算法能有乙個較好的能耗效率,演算法並不是越快越好,而是需要在速度和cpu能耗方面取得均衡,有時候為了追求效率,但是卻讓cpu能耗提高了許多。最好的做法是加速比能夠達到一定目標的情況下盡量降低cpu能耗。也就是說不需要片面去追求將程式並行化。有些時候程式序列執行比並行執行慢不了多少,但是cpu能耗卻降低了不少。

需求3:需要控制線程的粒度,否則執行緒粒度太細,頻繁建立執行緒會導致大量的額外開銷,從而使得效率大大降低。

需求4:在設計並行排序演算法時,還要考慮記憶體管理的開銷,由於並行演算法使用了多個執行緒,如果記憶體分配和釋放操作頻繁的話,那麼花費在這方面的開銷將是非常可觀的,因為常規的記憶體分配和釋放需要進行加鎖解鎖操作。

當然有一些方法來縮減記憶體管理方面的開銷

1、採用分布式記憶體管理

2、如果需要進行多塊記憶體的分配,那麼可以先分配一塊大的記憶體,然後再將分配的大的記憶體劃分成對應的多個小塊。

並行排序演算法有許多種,不同的應用場景中需要使用不同的排序演算法。一般來說,主要是針對不同的資料量,需要使用不同的算,如數量量很少的情況下,插入排序就足夠了,資料量特別大的情況下,需要使用基數排序,一般情況下可以使用快速排序和歸併排序。

幾種多核並行程式設計方法的比較

隨著多核時代的到來與流行,傳統的單執行緒序列程式的程式設計模式必將改變,取而代之的將是並行程式設計。目前已經有五種主要並行程式設計模型,下面將對此五種模型進行概括性的分析與比較 mpi mpi message passing inte ce 訊息傳遞介面是mpi論壇發布的乙個庫,而不是一門實現語言,...

多核課程設計 氣泡排序的序列和並行版本比較

程式 序列氣泡排序 include include using namespace std const int num 10000 排序10000個數 void bubblesort int array,int size 輸出排序後的陣列 for int i 0 i size i intmain i...

MySQL 針對null的排序

預設情況下,mysql將null算作最小值。如果想要手動指定null的順序,就是使用ifnull函式,ifnull expr1,expr2 如果 expr1 不是 null,ifnull 返回 expr1,否則它返回 expr2。ifnull 返回乙個數字或字串值,取決於它被使用的上下文環境。ifn...