2017-04-01 83 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