C++ cpp中std::vector的并行排序

C++ cpp中std::vector的并行排序,c++,multithreading,sorting,tbb,C++,Multithreading,Sorting,Tbb,概述 我正在编写一个代码,用于在多线程中排序std::vector。 所以我使用了mergeSort的概念,我把向量分成块,对块进行排序,然后合并。 所有排序和合并都是在基向量上完成的。在此过程中没有完成任何任务 我并行排序,一旦排序完成,我并行合并向量。 与std::sort相比,它是单线程的,只要我的向量大小大于10000,那么它在运行时就有了很大的改进 现在,当我在大小大于10000的同一个向量上运行tbb::parallel_sort时,我能够实现相同的运行时。 但当我运行\uu gnu

概述

我正在编写一个代码,用于在多线程中排序
std::vector
。 所以我使用了mergeSort的概念,我把向量分成块,对块进行排序,然后合并。 所有排序和合并都是在基向量上完成的。在此过程中没有完成任何任务

我并行排序,一旦排序完成,我并行合并向量。 与
std::sort
相比,它是单线程的,只要我的向量大小大于10000,那么它在运行时就有了很大的改进

现在,当我在大小大于10000的同一个向量上运行
tbb::parallel_sort
时,我能够实现相同的运行时。 但当我运行
\uu gnu\u parallel::sort
时,速度快了2倍

问题


与以前的方法相比,
\u gnu\u parallel::sort
做了哪些额外的工作?

排序性能在很大程度上取决于数据和QUI。一般来说,没有一种通用的排序算法可以提供最佳性能,这对于顺序和多线程算法及其实现都适用。我通常使用libstdc++的GNU并行模式(
\uuu GNU\u parallel
)中的并行(多路)合并排序获得最佳结果,平衡快速排序只稍微慢一点(优点是到位,缺点是不稳定)。在我的测量中,来自TBB(平行放置的QS)的实现总是比较慢,它可能没有那么微调。是的@DanielLangr。我做了多次实验,结果显示,gnu并行程序得到了最好的结果。另外,我不认为这个问题是“可以回答的”。您所能做的最好的事情就是研究实现的算法及其实现,并对它们进行比较。libstdc++和TBB的源代码都是公开的。请注意,并行分区和并行多路合并非常复杂(并行QS和MS的递归部分都是比较容易的部分)。排序性能在很大程度上取决于数据和QUI。一般来说,没有一种通用的排序算法可以提供最佳性能,这对于顺序和多线程算法及其实现都适用。我通常使用libstdc++的GNU并行模式(
\uuu GNU\u parallel
)中的并行(多路)合并排序获得最佳结果,平衡快速排序只稍微慢一点(优点是到位,缺点是不稳定)。在我的测量中,来自TBB(平行放置的QS)的实现总是比较慢,它可能没有那么微调。是的@DanielLangr。我做了多次实验,结果显示,gnu并行程序得到了最好的结果。另外,我不认为这个问题是“可以回答的”。您所能做的最好的事情就是研究实现的算法及其实现,并对它们进行比较。libstdc++和TBB的源代码都是公开的。请注意,并行分区和并行多路合并非常复杂(并行QS和MS的递归部分都是比较容易的部分)。