【问题标题】:Microsoft Parallel Patterns Library (PPL) vs. OpenMPMicrosoft 并行模式库 (PPL) 与 OpenMP
【发布时间】:2012-03-14 10:27:27
【问题描述】:

我想比较 PPL 和 OpenMP 的性能,但在网上找不到详细调查。我相信有PPL经验的人并不多。

我正在使用 Visual Studio 2010 在 Windows 上开发我的软件,并且不想在短期内将其移植到其他地方。

如果可移植性不是问题,只关心性能,你怎么看这两种方法?

【问题讨论】:

  • 这取决于你做什么。这里没有真正的问题。我认为有人对错误的人投了反对票。
  • 为什么有人想把自己锁在微软的东西里,短期的还是长期的?

标签: c++ concurrency parallel-processing openmp ppl


【解决方案1】:

在 MSDN 上有一个 great comparison 属性 OpenMP 和 ConcRT(PPL 的核心):

OpenMP 模型特别适合高性能计算,其中非常大的计算问题分布在单台计算机的处理资源上。在这种情况下,硬件环境是已知的,开发者可以合理地期望在算法执行时拥有对计算资源的独占访问权。

但是,其他限制较少的计算环境可能不适合 OpenMP。例如,递归问题(如快速排序算法或搜索数据树)使用 OpenMP 更难实现。并发运行时通过提供并行模式库 (PPL) 和异步代理库来补充 OpenMP 的功能。与 OpenMP 不同的是,Concurrency Runtime 提供了一个动态调度程序,可以适应可用资源并随着工作负载的变化调整并行度。

所以,OpenMP 的主要缺点:

  • 静态调度模型。
  • 不包含取消机制(非常大的缺点,在许多并发算法中需要取消)。
  • 不包含并发代理方法。
  • 并行代码中的异常问题。

【讨论】:

  • 小补充:PPL parallel_for 算法对于 CPU 内核之间的动态任务调度有一些开销。因此,对于小计算周期来说,这不是一个好的解决方案。但是,有一个很好的 Microsoft PPL 扩展:PPLExtras。此扩展包含用于 parallel_for 的固定版本(静态调度算法),特别适用于小周期 - 最佳性能。
【解决方案2】:

这可能取决于您的算法,但是这项研究表明 PPL 可能比 OpenMP 更快:

http://www.codeproject.com/Articles/373305/Visual-Cplusplus-11-Beta-Benchmark-of-Parallel-Loo

Serial : 72ms
OpenMP : 16ms
PPL    : 12ms

【讨论】:

  • 我不会这么快就将我的选择基于其他人完成的单个测试,该测试也只运行了几毫秒。
【解决方案3】:

如果您唯一关心的是性能,那么我对这两种方法的想法是完全无关的。这是一个可以通过经验方法解决的问题,而不是通过论证。

【讨论】:

  • 如果他的时间紧迫,易用性也可能是一个因素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
相关资源
最近更新 更多