2015-04-21 35 views
0

根據某些用戶定義的函數,我需要在64GB RAM高性能計算(HPC)計算機上一次又一次地對32 GB大小的用戶定義數據類型的大型向量進行排序。我使用std :: sort爲相同。然而,事實證明std :: sort需要大量的時間> 1小時。是否有一些其他函數可以使用哪種排序比std :: sort更快。在內存中對大型向量進行排序的有效方法

我用我的系統上執行以下gcc版本: GCC(Ubuntu的/ Linaro的4.6.4-6ubuntu2)4.6.4

+1

您是否使用您的分析器來計算出所花費的時間?它可以是例如運算符<',複製,移動和/或交換丟失或效率低下,你最好排序指向對象的指針向量,或者內存緩存故障是罪魁禍首 - 但如果你沒有做任何實際的調查......我們能告訴你什麼?你也可以尋找一個線程/並行排序,或者自己編碼(圖書館的建議不在這裏)。顯示你的對象的代碼將幫助我們給出有意義的建議。 –

+0

@TonyD你可以推薦一些免費的開源的分析器爲linux –

+1

你可以嘗試gprof @theteekstuff.com/2012/08/gprof-tutorial/ –

回答

1

您可能需要使用std的一些混合::排序()(其使用快速排序算法),並在這裏合併並應用多線程。

例如,在CPU中有一定數量的內核時,可能會重新分割數據,同時按核心上的std :: sort對每個部分進行排序,然後合併它們,就像mergesort合併排序數組一樣。

Regards

+0

'std :: sort()'不需要使用任何特定的排序算法。但是,在海灣合作委員會的情況下,它使用introsort。 – chbaker0

+0

@ chbaker0好,introsort是某種quicksort,不是嗎?無論如何,這不是要點 –

+0

@AndrewLavq你知道,如果一些已經存在的圖書館,這對我來說 –

相關問題