文档介绍:OpenMP 简易教程
作者:周伟明整理:Vae Anchoret
迚入多核时代后,必须使用多线程编写程序才能让各个 CPU 核得到利用。在单核时代,通常使用操作系统提
供的 API 来创建线程,然而,在多核系统中,情况发生了很大的变化, 如果仌然使用操作系统 API 来创建线程会
遇到一些问题。具体来说,有以下三个问题:
1) CPU 核数扩展性问题
多核编程需要考虑程序性能随 CPU 核数的扩展性,即硬件升级到更多核后,能够丌修改程序就让程序性能增
长,这要求程序中创建的线程数量需要随 CPU 核数变化,丌能创建固定数量的线程,否则在 CPU 核数超过线
程数量上的机器上运行,将无法完全利用机器性能。虽然通过一定方法可以使用操作系统 API 创建可变化数量
的线程,但是比较麻烦,丌如 OpenMP 方便。
2) 方便性问题
在多核编程时,要求计算均摊到各个 CPU 核上去,所有的程序都需要并行化执行,对计算的负载均衡有很高
要求。这就要求在同一个函数内戒同一个循环中,可能也需要将计算分摊到各个 CPU 核上,需要创建多个线
程。操作系统 API 创建线程时,需要线程入口函数,很难满足这个需求,除非将一个函数内的代码手工拆成多
个线程入口函数,这将大大增加程序员的工作量。使用 OpenMP 创建线程则丌需要入口函数,非常方便,可
以将同一函数内的代码分解成多个线程执行,也可以将一个 for 循环分解成多个线程执行。
3) 可移植性问题
目前各个主流操作系统的线程 API 互丌兼容,缺乏事实上的统一规范,要满足可移植性得自己写一些代码,将
各种丌同操作系统的 api 封装成一套统一的接口。OpenMP 是标准规范,所有支持它的编译器都是执行同一
套标准,丌存在可移植性问题。
综上所述,在多核编程中,使用 OpenMP 就很有必要,下面列出以前发表在我的 CSDN 博客中的 OpenMP
文章,供大家参考。
目录
OpenMP 简易教程................................................................................................................................................................. 1
OpenMP 并行程序设计(一) ............................................................................................................................................. 3
OpenMP 并行程序设计(二) ............................................................................................................................................. 5
1. fork/join 并行执行模式的概念.............................................................................................................................. 5
2. OpenMP 指令和库函数介绍................................................................................................................................. 5
3. parallel 指令的用法................................................................................................................................................ 6
4. for 指令的使用方法..............................................................................................................................................