我想比较 PPL 与 OpenMP 的性能,但在网上找不到详细的调查。我相信有PPL经验的人并不多。
我正在使用 Visual Studio 2010 在 Windows 上开发我的软件,并且不想在短期内将其移植到其他地方。
如果可移植性不是问题,只关心性能,您如何看待这两种方法?
我想比较 PPL 与 OpenMP 的性能,但在网上找不到详细的调查。我相信有PPL经验的人并不多。
我正在使用 Visual Studio 2010 在 Windows 上开发我的软件,并且不想在短期内将其移植到其他地方。
如果可移植性不是问题,只关心性能,您如何看待这两种方法?
在 MSDN 上,对 OpenMP 和 ConcRT(PPL 的核心)的属性进行了很好的比较:
OpenMP 模型特别适合高性能计算,其中非常大的计算问题分布在单台计算机的处理资源上。在这种情况下,硬件环境是已知的,并且开发人员可以合理地期望在执行算法时拥有对计算资源的独占访问权。
但是,其他限制较少的计算环境可能不适合 OpenMP。例如,递归问题(如快速排序算法或搜索数据树)使用 OpenMP 更难实现。并发运行时通过提供并行模式库 (PPL) 和异步代理库来补充 OpenMP 的功能。与 OpenMP 不同的是,并发运行时提供了一个动态调度程序,该调度程序可以适应可用资源并随着工作负载的变化调整并行度。
因此,OpenMP 的主要缺点:
这可能取决于您的算法,但是这项研究表明 PPL 可能比 OpenMP 更快:
http://www.codeproject.com/Articles/373305/Visual-Cplusplus-11-Beta-Benchmark-of-Parallel-Loo
Serial : 72ms
OpenMP : 16ms
PPL : 12ms
如果您唯一关心的是性能,那么我对这两种方法的看法完全无关紧要。这是一个可以通过经验方法解决的问题,而不是通过论证。