【发布时间】:2013-11-20 00:48:21
【问题描述】:
我正在学习算法课程,似乎可以利用并行处理来实现分治算法。总是这样吗?
【问题讨论】:
-
任何算法都可以使用并行处理来实现。您真正想问的问题是它们是否应该。 IE:这样做是否有任何好处。
标签: algorithm parallel-processing divide-and-conquer
我正在学习算法课程,似乎可以利用并行处理来实现分治算法。总是这样吗?
【问题讨论】:
标签: algorithm parallel-processing divide-and-conquer
可以,但不一定有效。
分而治之的算法最适合(更容易理解)任务级并行性。这些任务是递归的,递归任务可以解释为任务树层次结构。任务树层次结构可以被视为使用不同参数的函数的多次调用。一些函数调用将等待其他执行(即它的子项),如果异步执行或直接在同步执行中可用(blocking 调用将自动等待结果)。所有这些操作实际上在每个并行框架中都可用。
但并行任务之间的通信可能代价高昂,具体取决于参数数据大小。如果将您的问题分成更小的部分(通过网络执行多台计算机或在多核计算的进程之间)比执行这些部分花费更多的时间,那么您将不会获得性能提升。您实际上会失去性能。
使用允许任务层次结构的框架(例如 C/C++ 中的 OpenMP 任务或 Python 中的 SCOOP(更多可用)),将串行分治算法转换为其并行算法更容易。
【讨论】: