Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;并行std::浮点值排序_C++_Multithreading_Sorting_C++14_C++17 - Fatal编程技术网

C++ c++;并行std::浮点值排序

C++ c++;并行std::浮点值排序,c++,multithreading,sorting,c++14,c++17,C++,Multithreading,Sorting,C++14,C++17,我有一个大文件,包含>百万个浮点值。现在,我可以使用std::sort将文件读入vector来轻松地对它们进行排序,例如- std::vector<float> v; std::sort(v.begin(), v.end()); std::vector v; 排序(v.begin(),v.end()); 但是,是否有任何版本的std::sort或类似算法可以利用我的系统上的多个可用内核?由于这是唯一需要花费大量时间设置的任务,因此我希望通过拥有>1个核心cpu来提高性能 我可以在

我有一个大文件,包含>百万个浮点值。现在,我可以使用
std::sort
将文件读入
vector
来轻松地对它们进行排序,例如-

std::vector<float> v;
std::sort(v.begin(), v.end());
std::vector v;
排序(v.begin(),v.end());
但是,是否有任何版本的
std::sort
或类似算法可以利用我的系统上的多个可用内核?由于这是唯一需要花费大量时间设置的任务,因此我希望通过拥有>1个核心cpu来提高性能


我可以在x64 linux服务器上使用任何最新版本的编译器,也可以使用
-std=c++1z
编译二进制文件。

你很幸运。并行技术规范的C++扩展增加了许多标准算法的并行化版本,包括:代码> STD::排序< /代码>。它们在C++17中提供。GCC对此有支持,您可以查看他们的页面。看起来他们正在利用OpenMP进行多线程

GCC先决条件编译器标志

任何并行功能的使用都需要额外的编译器和运行时支持,特别是对OpenMP的支持。添加这种支持并不困难:只需使用编译器标志-fopenmp编译应用程序。这将链接到libgomp,GNU卸载和多处理运行库,它的存在是必需的

此外,支持原子操作的硬件和能够生成原子操作的编译器是必需的:GCC默认不支持某些常见硬件架构上的原子操作。激活原子操作可能需要在某些目标(如sparc和x86)上显示编译器标志,例如-march=i686、-march=native或-mcpu=v9。有关更多信息,请参阅GCC手册



我知道你说你在使用Linux,但我也希望包括它,它似乎是MSV,也支持并行技术规范。

看看:也许你可以提到需要
-fopenmp
,看起来你也需要
-D_GLIBCXX_PARALLEL
?我觉得这个答案有点误导。在GCC中,您已经连接了并行模式,在C++扩展技术并行技术规范之前已经使用了很多年。这是一个编译器特定的扩展,并且不同的算法是可用的(即使很多与C++扩展规范是相同的)。如果我错了,但据我所知,GCC还不支持C++扩展技术规范。因此,请您提供链接并相应地修改您的答案吗?