使用c中的p线程编写并行快速排序

时间:2013-02-21 10:32:24

标签: c parallel-processing pthreads

我正在尝试实现并行快速排序算法,但我不太确定如何在快速排序功能中使用pthreads。 这是我在粘贴框http://pastebin.com/tG0h6cMU

上的代码链接

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

一般情况下,您可以不使用pthread_mutex_lock,这是一个没有线程同步的并行快速排序。根据WP:https://en.wikipedia.org/wiki/Quicksort#Parallelization

现在专门针对您的实施:

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

您的代码存在一些问题:

第45行:您要将int r分配给int* r !!!

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

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