Microsoft并行模式库(PPL)与OpenMP

时间:2012-03-14 10:27:27

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

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

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

所以,OpenMP的主要缺点是:

  • 静态调度模型。
  • 不包含取消机制(非常大的缺点,在许多并发算法取消中是必需的)。
  • 不包含并发代理方法。
  • 在paralel代码中出现例外情况。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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