2

我正在尝试实现并行快速排序算法,但我不太确定如何在快速排序函数中使用 pthread。这是我在粘贴箱http://pastebin.com/tG0h6cMU上的代码的链接

4

2 回答 2

1

如果 CPU 受限,每个进程的线程数应该接近 1.0。如果涉及某种类型的 I/O,那么您可以拥有更多线程 - 例如,如果make -j N每个内核运行大约 1.5 个“作业”(其中 N = 内核 * 1.5),编译 Linux 内核往往会运行得最快。但是请注意,这在很大程度上取决于线程/进程的实际行为,并且几乎可以肯定有必要为您的特定场景测量理想性能。

当然,如果线程数超过内核数太多,就会出现“线程抖动”。如果没有足够的线程,核心就不会保持忙碌,所以这也不是很好。

于 2013-02-21T10:57:37.010 回答
0

一般来说,你可以不使用pthread_mutex_lock没有线程同步的并行快速排序。根据 WP:https ://en.wikipedia.org/wiki/Quicksort#Parallelization

现在专门针对您的实施:

我无法编译代码,因为我缺少 read_in 和 gen_random 但我可以告诉你这些:

您的代码存在一些问题:

第 45 行:您正在分配一个 int r to int* r !!!

第 133 行:if(a,...)

还有一些未使用的变量(237:未排序,236:已排序,218:i)。也许你忘记了什么

于 2013-02-21T11:19:59.950 回答