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

Svenson 2014-09-18 11:45:03
小弟做科学计算的,刚开始使用并行技术,想移植以前的代码。

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

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

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

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

希望有大神分析一下。
...全文
1503 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级能量泡泡 2014-09-19
  • 打赏
  • 举报
回复
引用 6 楼 Svenson 的回复:
[quote=引用 3 楼 daiweifeng 的回复:] 细粒度并行肯定是Qpar快一点。 不过如果你的显卡够强悍,或者支持下一代HSA中的共享内存,那么AMP可以在超高负荷时性能很好。
MSDN上也爱用细粒度,什么意思我还不明白呢。能否指点一下[/quote] 并行粒度是指并行计算中每个线程处理的任务的复杂性,如果是普通for循环里面的代数计算,一般都是细粒度的,如果是任务切分+边界交换的MPI一般是粗粒度。
ri_aje 2014-09-19
  • 打赏
  • 举报
回复
引用 8 楼 Svenson 的回复:
[quote=引用 7 楼 ri_aje 的回复:] ppl 是 task parallelism,AMP 和 OpenMP 都是 data parallelism,Qpar 不熟。 那个更合适,看算法性质。
一般科学计算就是求解大规模线性方程组。这么看来,肯定是data parallelism了哦?[/quote] 科学计算一般是数据并行的。 AMP 是基于 GPU (共享内存或独立内存) 计算的,OpenMP 是 CPU 多线程的。 从修改程序的角度看,把单线程 c++ 程序修改成 OpenMP 比较容易,基于 GPU 的编程还是有很多不同的。 从计算能力来看,一般现在的显卡比 CPU 能力大,AMP 有这方面的优势,对于独立内存的 GPU,还需要考虑传输数据带来的效率损耗,到底哪个更好,只能具体问题具体分析了。
Svenson 2014-09-18
  • 打赏
  • 举报
回复
引用 3 楼 daiweifeng 的回复:
细粒度并行肯定是Qpar快一点。 不过如果你的显卡够强悍,或者支持下一代HSA中的共享内存,那么AMP可以在超高负荷时性能很好。
MSDN上也爱用细粒度,什么意思我还不明白呢。能否指点一下
Svenson 2014-09-18
  • 打赏
  • 举报
回复
引用 4 楼 FancyMouse 的回复:
“自己用矩阵乘法比较了一下,发现在我的个人电脑(MacBook Pro)上,Qpar居然是效率最高的,因为他可以控制线程数量。” 这句话吐槽点无数。 你既然不想写/改代码,那gpu什么的就别去想了,硬搬过去的代码的性能还不如同价位多弄个cpu。
槽点有那么多吗 我确实不想用AMP,简单的一个for,要添加很多行代码才能实现。。。 感谢!
FancyMouse 2014-09-18
  • 打赏
  • 举报
回复
“自己用矩阵乘法比较了一下,发现在我的个人电脑(MacBook Pro)上,Qpar居然是效率最高的,因为他可以控制线程数量。” 这句话吐槽点无数。 你既然不想写/改代码,那gpu什么的就别去想了,硬搬过去的代码的性能还不如同价位多弄个cpu。
超级能量泡泡 2014-09-18
  • 打赏
  • 举报
回复
细粒度并行肯定是Qpar快一点。 不过如果你的显卡够强悍,或者支持下一代HSA中的共享内存,那么AMP可以在超高负荷时性能很好。
Svenson 2014-09-18
  • 打赏
  • 举报
回复
引用 1 楼 healer_kx 的回复:
你不问哪个最合适?
就是不知道哪个最合适
healer_kx 2014-09-18
  • 打赏
  • 举报
回复
你不问哪个最合适?
赵4老师 2014-09-18
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
Svenson 2014-09-18
  • 打赏
  • 举报
回复
引用 7 楼 ri_aje 的回复:
ppl 是 task parallelism,AMP 和 OpenMP 都是 data parallelism,Qpar 不熟。 那个更合适,看算法性质。
一般科学计算就是求解大规模线性方程组。这么看来,肯定是data parallelism了哦?
ri_aje 2014-09-18
  • 打赏
  • 举报
回复
ppl 是 task parallelism,AMP 和 OpenMP 都是 data parallelism,Qpar 不熟。 那个更合适,看算法性质。

65,201

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧