Microsoft并行模式库(PPL)与OpenMP

Emr*_*koz 5 c++ parallel-processing concurrency openmp ppl

我想比较PPL和OpenMP的性能,但无法在网上找到详细的调查.我相信没有多少人对PPL有经验.

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

如果可移植性不是问题,只关注性能,那么您对这两种方法有什么看法?

23W*_*23W 5

在 MSDN 上,对 OpenMP 和 ConcRT(PPL 的核心)的属性进行很好的比较

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

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

因此,OpenMP 的主要缺点:

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


Ale*_*lex 2

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

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

Serial : 72ms
OpenMP : 16ms
PPL    : 12ms
Run Code Online (Sandbox Code Playgroud)

  • 我不会那么快地将我的选择基于其他人所做的单个测试,该测试也只运行了几毫秒。 (4认同)