【发布时间】:2013-10-17 15:10:08
【问题描述】:
正如标题所示,我需要创建一个比快速排序更快的算法。有问题的快速排序经过优化并用于幼稚的并行系统,因此单个线程完全完成每个快速排序,但多个线程同时进行快速排序。我需要制作一个比这个过程更快的算法。通过让额外的线程执行枢轴每一侧的排序来并行每个快速排序是否会更快,或者这个过程是否会产生过多的开销并最终导致速度变慢?对算法有什么建议吗?
【问题讨论】:
-
一旦有了初始分区,将子部分的排序拆分到不同的线程是很自然的事情,如果内核可用,应该可以加快速度。
-
使用额外的线程对每个子部分进行排序肯定会加速单个快速排序,但我的问题是关于系统中连续快速排序的加速。
-
例如,如果一个有 4 个 1.0 GHZ 处理器,那么系统的吞吐量是 4.0 GHZ。如果您进行简单并行化,那么每个快速排序将在 1.0 GHZ 处理器完成它所需的时间内完成,但同时完成 4 个。如果您并行每个快速排序,那么每个快速排序将花费 4.0 GHZ 处理器完成它所需的时间,但是一次只会执行其中的一个。
-
我认为这取决于您可用的处理器数量。如果您一次执行 N 个快速排序,并且您只有 N 个处理器和 1 个线程处理每个快速排序,那么使每个单独的快速排序多线程只会因为不必要的开销而减慢您的代码。另一方面,如果您确实有额外的处理器可用,那么处理器将补偿额外的开销,您可能会看到速度有所提高。
-
我的系统中快速排序的数量远远大于处理器的数量,因此计算的减速时间可以忽略不计。
标签: c multithreading performance algorithm sorting