所有Divide and Conquer算法都能利用并行性吗?

时间:2013-11-08 04:47:39

标签: algorithm parallel-processing divide-and-conquer

我正在使用算法类,似乎可以使用并行处理来实现分而治之的算法。总是这样吗?

1 个答案:

答案 0 :(得分:1)

是的,但不一定有效。

在任务级并行中,划分和征服算法最适合(更容易理解)。这些任务是递归的,递归任务可以解释为任务树层次结构。可以将任务树层次结构视为使用不同参数的函数的多个调用。某些函数调用将等待其他执行(即其子代),如果是异步执行或直接在同步执行中可用,则在并行术语中可以使用* wait * o或 join 阻止调用将自动等待结果)。所有这些操作实际上都可以在每个并行框架中使用。

但是,根据参数数据大小,并行任务之间的通信成本很高。如果将问题分成较小的部分(通过网络进行多台计算机执行或多核计算进程之间)比执行部分需要更多时间,那么您将无法获得性能提升。事实上你会失去表现。

使用允许任务层次结构的框架(如C / C ++中的OpenMP任务或Python中的SCOOP(更多可用),将串行分而治之算法转换为并行对应物更容易。