博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenMP编程指南 - 周伟明的多核、测试专栏 - 博客频道 - CSDN.NET
阅读量:6906 次
发布时间:2019-06-27

本文共 1393 字,大约阅读时间需要 4 分钟。

28708人阅读
(10)

 

OpenMP编程指南

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

1CPU核数扩展性问题

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

2)方便性问题

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

3)可移植性问题

目前各个主流操作系统的线程API互不兼容,缺乏事实上的统一规范,要满足可移植性得自己写一些代码,将各种不同操作系统的api封装成一套统一的接口。OpenMP是标准规范,所有支持它的编译器都是执行同一套标准,不存在可移植性问题。

综上所述,在多核编程中,使用OpenMP就很有必要,下面列出以前发表在我的CSDN博客中的OpenMP文章,供大家参考。

1

介绍OpenMP程序在并行计算时的效率,在双核CPU上效率增加了整整一倍。

2

1fork/join并行执行模式的概念 2OpenMP指令和库函数介绍 3parallel 指令的用法 4for指令的使用方法 5 sectionssection指令的用法。

3

本文主要介绍了OpenMP中的privatefirstprivatelastprivatethreadprivatereductioncopyincopyprivate等数据处理子句的用法。

4

本文主要介绍了OpenMP中任务调度子句schedule的使用方法。

5

主要比较了原子操作,Windows CriticalSection OpenMP库带的锁在单任务运行情况下和多任务运行情况下的性能情况,在多核CPU上,多任务的锁竞争花费的时间是单任务时的锁运行花费时间的18倍。锁竞争带来的效率下降完全出乎意料之外,由此也可见多核编程和单核多线程编程是有很大区别的。

6

讲述了如何动态设置线程数量以适应硬件和软件的扩展性,如何将嵌套循环并行化的技巧。

 

上面列出的这些OpenMP知识,属于初步的入门知识,如果需要进一步深入掌握OpenMP或者了解其实现原理,则需要看更多的参考文献。下面列出我写的《多核计算与程序设计》一书的第3OpenMP程序设计中的参考文献,供需要深入掌握的人参考。其中的文献2讲解了OpenMP的实现原理。

转载地址:http://elrdl.baihongyu.com/

你可能感兴趣的文章
开机启动项
查看>>
公布AppStore被拒绝的经历
查看>>
mysql主从复制replication的一些相关命令
查看>>
chrome控制台支持多行js模式
查看>>
SQL Server 删除所有表
查看>>
Delphi获取其它进程窗口句柄的3种方法
查看>>
mysql索引之四:复合索引之最左前缀原理,索引选择性,索引优化策略之前缀索引...
查看>>
js+css实现模态层效果
查看>>
24点游戏&&速算24点(dfs)
查看>>
链接(extern、static关键词\头文件\静态库\共享库)
查看>>
Android 自定义PopupWindow动画效果
查看>>
转自:如何自学Android(强烈推荐)
查看>>
python2.0_s12_day9之day8遗留知识(queue队列&生产者消费者模型)
查看>>
sql server 2012 删除服务器名称
查看>>
ortp库入门
查看>>
iOS - UIImageView
查看>>
java23种设计模式
查看>>
App你真的需要么
查看>>
【结巴分词资料汇编】结巴中文分词基本操作(3)
查看>>
构建镜像 - 每天5分钟玩转容器技术(12)
查看>>