【发布时间】:2012-03-12 00:56:33
【问题描述】:
我编写了快速排序算法的就地实现,它的表现非常出色(1024 个元素为 0.8 毫秒)。我想如果我在多个线程上实现它可以让它执行得更快,所以我尝试使用 boost::thread 并且列表排序完美,但它比我的顺序版本(1539.3ms)长了 1500 倍。我尝试将线程数限制为各种数字,但似乎没有什么能像原始版本一样快。为什么会出现这种情况?有人成功实现了并行就地快速排序吗?
【问题讨论】:
-
您多久创建一次线程?您正在使用多少个线程?我的赌注:创建线程和同步它们的成本大于回报。
-
我有一个最大线程数,例如 4 个,如果正在运行的线程数少于 4 个,我会在每次拆分数组时打开一个新线程。
-
这是一个获得有用数据点的练习:采用多线程代码,但将线程数限制设置为 1。
-
一个需要考虑的问题:当两个不同的线程修改位置相似的内存时,一些计算机架构真的不喜欢它。
-
最后一条评论——试图优化一个占用程序运行时间 0.8 毫秒的例程是浪费精力(除了智力练习)。尝试优化一个执行一百万次的例程会很有用,但是您有一个明显的并行性来源:将您的线程设置为在完全不同的数组上工作。
标签: c++ multithreading boost quicksort