【问题标题】:writing a parallel quick sort using p threads in c在 c 中使用 p 线程编写并行快速排序
【发布时间】:2013-02-21 10:32:23
【问题描述】:

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

【问题讨论】:

  • 没有相关性:您可以在单核 CPU 上运行数百个线程。如果某些线程在某些时候被阻塞(可能等待 I/O),这可能会提高速度。
  • 您实际上并没有问过如何对快速排序进行多线程处理,最好先尝试实现它。
  • @Mats petersson 我已经实现了它。它在粘贴 bin 文件夹中。它只是不起作用。

标签: c parallel-processing pthreads


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    一般来说,你可以不用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)。也许你忘记了什么

    【讨论】:

    • 对不起,未排序的、已排序的变量未使用,因为我将其作为函数参数传入。if (a,) 是错字。我想使用互斥锁来确保每个线程都有访问权限到没有覆盖值的关键部分。
    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2021-03-04
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多