认识OpenMP优点

  进入多核时代后,必须使用多线程编写程序才能让各个 CPU 核得到利用。在单核时代,通常使用操作系统提供的 API 来创建线程,然而,在多核系统中,情况发生了很大的变化, 如果仍然使用操作系统 API 来创建线程会遇到一些问题。具体来说,有以下三个问题:

1 CPU 核数扩展性问题

  多核编程需要考虑程序性能随 CPU 核数的扩展性,即硬件升级到更多核后,能够丌修改程序就让程序性能增长,这要求程序中创建的线程数量需要随 CPU 核数变化,不能创建固定数量的线程,否则在 CPU 核数超过线程数量上的机器上运行,将无法完全利用机器性能。虽然通过一定方法可以使用操作系统 API 创建可变化数量的线程,但是比较麻烦,不如 OpenMP 方便。

2 方便性问题

  在多核编程时,要求计算均摊到各个 CPU 核上去,所有的程序都需要并行化执行,对计算的负载均衡有很高要求。这就要求在同一个函数内或者同一个循环中,可能也需要将计算分摊到各个 CPU 核上,需要创建多个线程。操作系统 API 创建线程时,需要线程入口函数,很难满足这个需求,除非将一个函数内的代码手工拆成多个线程入口函数,这将大大增加程序员的工作量。使用 OpenMP 创建线程则不需要入口函数,非常方便,可以将同一函数内的代码分解成多个线程执行,也可以将一个 for 循环分解成多个线程执行。

3 可移植性问题

  目前各个主流操作系统的线程 API 互不兼容,缺乏事实上的统一规范,要满足可移植性得自己写一些代码,将各种不同操作系统的 api 封装成一套统一的接口。 OpenMP 是标准规范,所有支持它的编译器都是执行同一套标准,不存在可移植性问题。
  综上所述,使用OpenMP进行多核编程很方便。
  
====================================题外话===============================
  无论是OpenMP,还是TBB,CUDA以及OpenCL或者Directcompute都只是并行程序设计的可选方案,在实际中我们应该根据自己的需求选择最合适的。但是总体上来说,OpenMP应该是最简单的了

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值