2017-04-01 45 views
2

我有一個大的文件包括>百萬浮點值。我可以將它們用std::sort通過讀取文件到vector現在,很容易進行排序例如: -C++並行的std ::排序浮動值

std::vector<float> v; 
std::sort(v.begin(), v.end()); 

但有或需要我的系統上利用多內核提供的std::sort任何版本類似的算法?由於這是需要花費很多時間設置的唯一任務,我正在尋找具有> 1核心cpu的性能改進。

我可以使用編譯器的任何最新版本X64的Linux服務器上,可以與-std=c++1z編譯二進制了。

+1

看看:http://stackoverflow.com/questions/28520720/c-parallel-sort –

回答

2

你很幸運。用於並行技術規範的C++擴展添加的許多標準算法,包括std::sort並行版本。它們以C++ 17提供。海灣合作委員會支持這一點,你可以看到他們的網頁關於它here。看起來好像他們正在使用OpenMP進行多線程。

GCC前提條件編譯器標誌

任何使用的並行功能需要額外的編譯器和運行時支持,在用於特定的OpenMP支持。添加此支持並不困難:只需使用編譯器標誌-fopenmp編譯應用程序即可。這將鏈接到libgomp,GNU卸載和多處理運行時庫,它的存在是強制性的。支持原子操作和能夠產生原子操作的一個編譯器

此外,硬件是強制性的:GCC默認爲對一些常見的硬件體系結構的原子操作的支持。激活原子操作可能需要在某些目標(如SPARC和x86)明確編譯器標誌,如-march = i686的,-march =本地或-mcpu = V9。有關更多信息,請參閱GCC手冊。


我知道你說你正在使用Linux,但我也希望包括它出現MSVS,starting with version 2013 RTM,也有對並行技術規範的支持。

+0

也許你可能會提到需要'-fopenmp',它看起來像你需要'-D_GLIBCXX_PARALLEL'呢? –

+1

我覺得這個答案有點誤導。在C++擴展並行技術規範之前,您鏈接的並行模式已經可以在GCC中使用多年。這是一個編譯器特定的擴展,並提供了不同的算法(儘管C++擴展規範有很多共同之處)。告訴我,如果我錯了,但據我所知,GCC還不支持C++擴展並行技術規範。 – Pyves

+0

@Pyves現在是實驗支持。 – NathanOliver