技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 程序开发 > c/c++ > 正文

讨论:C++并行技术,哪个最快?Qpar, PPL, AMP, OpenMP

来源: 技术CTO 阅读:

小弟做科学计算的,刚开始使用并行技术,想移植以前的代码。

Visual C++ (Visual Studio 2012)提供了4种并行技术:

Qpar:自动并行化,加速代码执行的编译器优化。个人感觉最无脑的并行技术,对代码更改最小
PPL:并发运行时(cocurrency runtime),数据并行或任务并行的类。功能很全面,相对比较简单
AMP:允许使用现代图形处理器进行通用编程的类,就是GPU并行技术。MS最新的并行技术,代码更改最大
OpenMP:OpenMP API的Microsoft实现。经典的外部并行技术库,很多科学计算都用这个,跨语言和平台

小弟看了MSDN文档,这么多方式,直接蒙了。到底哪个是最高效的呢?从MSDN原文来看,他强调,效率取决于硬件和环境,这不难理解。但是,小弟现在面临大量代码移植(之前用的是标准C++,核心算法用的是C,没有并行),到底选哪一个好呢?

自己用矩阵乘法比较了一下,发现在我的个人电脑(MacBook Pro)上,Qpar居然是效率最高的,因为他可以控制线程数量。

希望有大神分析一下。

你不问哪个最合适?
引用 1 楼 healer_kx 的回复:
你不问哪个最合适?


就是不知道哪个最合适
细粒度并行肯定是Qpar快一点。

不过如果你的显卡够强悍,或者支持下一代HSA中的共享内存,那么AMP可以在超高负荷时性能很好。
“自己用矩阵乘法比较了一下,发现在我的个人电脑(MacBook Pro)上,Qpar居然是效率最高的,因为他可以控制线程数量。”
这句话吐槽点无数。

你既然不想写/改代码,那gpu什么的就别去想了,硬搬过去的代码的性能还不如同价位多弄个cpu。
引用 4 楼 FancyMouse 的回复:
“自己用矩阵乘法比较了一下,发现在我的个人电脑(MacBook Pro)上,Qpar居然是效率最高的,因为他可以控制线程数量。”
这句话吐槽点无数。

你既然不想写/改代码,那gpu什么的就别去想了,硬搬过去的代码的性能还不如同价位多弄个cpu。


槽点有那么多吗
我确实不想用AMP,简单的一个for,要添加很多行代码才能实现。。。
感谢!
引用 3 楼 daiweifeng 的回复:
细粒度并行肯定是Qpar快一点。

不过如果你的显卡够强悍,或者支持下一代HSA中的共享内存,那么AMP可以在超高负荷时性能很好。


MSDN上也爱用细粒度,什么意思我还不明白呢。能否指点一下
ppl 是 task parallelism,AMP 和 OpenMP 都是 data parallelism,Qpar 不熟。
那个更合适,看算法性质。
引用 7 楼 ri_aje 的回复:
ppl 是 task parallelism,AMP 和 OpenMP 都是 data parallelism,Qpar 不熟。
那个更合适,看算法性质。


一般科学计算就是求解大规模线性方程组。这么看来,肯定是data parallelism了哦?
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^