技术讨论:Intel ® Cilk™ Plus与OpenMP

本文探讨了Intel Cilk Plus与OpenMP在数据并行和任务并行方面的差异。Cilk Plus通过简单的代码修改实现数据并行,其工作密取策略有效减少了负载不均衡。在任务并行上,Cilk Plus的cilk_spawn和cilk_sync关键字提供了灵活性。相比之下,OpenMP的数据并行更易上手,任务并行语法稍显复杂。Cilk Plus支持C/C++,而OpenMP主要为C。主流编译器支持OpenMP,Cilk Plus主要由Intel编译器支持。
摘要由CSDN通过智能技术生成
 在论坛中已经有一些Intel® Cilk™ Plus(以下简称Cilk Plus)的介绍,讨论OpenMP的帖子也不少,请参考“ 技术文章索引”。我想现在有必要比较一下Cilk Plus和OpenMP,以便我们在多线程编程时作出最恰当的选择。

 

一般我们把并行方式划分为两种:数据并行和任务并行。我们来看一下Cilk Plus和OpenMP在这两种并行方式下有什么不同的特点。

 

首先,在数据并行方面,使用OpenMP的相当容易上手,而且并行的效率也颇高,这也是OpenMP在HPC领域得到广泛应用的原因。OpenMP提供三种工作量的划分与调度:静态方式、动态方式和Guided方式。我们开发人员可以根据循环迭代的工作量分布情况选择最合适的调度方式。如果工作量的分布比较固定而且均匀(每个迭代花费的时间基本相同),我们可以选择静态方式。如果工作量分布是不确定的,或者工作量非常不均衡,就需要选择另外两种调度方式了。否则,将导致多线程负载不均衡。相对来说,静态方式的开销非常小。另外两种方式在底层实现中需要维护一个队列,并提供入队、出队和派发的功能,以便将总的工作量分块并入队,然后派发给空闲线程。因此,这两种方式的开销要大于静态方式的开销。

 

 

Cilk Plus在数据并行时对程序源代码的改动非常小&

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值