OpenMP学习 第三章 什么是OpenMP

第三章 什么是OpenMP


OpenMP是一个用于编写并行程序的应用编程接口.虽然它一开始专注于SMP计算机的多线程程序,但是经过多年的发展,它已经可以应对NUMA系统和GPU等外设.

构成OepnMP的核心编译指令,运行时库函数和字句:

OpenMP编译指令,函数或子句 概念
#pragma omp parallel 并行区域,线程组,结构化块和跨线程交错执行
int omp_get_thread_num()
int omp_get_num_threads()
void omp_set_num_threads()
SPMD模式:创建并行区域,使用线程数和线程ID分割工作
double omp_get_wtime() 代码的定时块,加速比和阿姆达尔定律
export OMP_NUM_THREADS=N 内部控制变量和用环境变量设置默认线程数
#pragma omp barrier
#pragma omp critical
交错执行,竞争条件和同步所隐含的操作
#pragma omp for
#pragma omp parallel for
共享工作,并行循环和循环携带依赖
reduction(op:list) 跨组内线程的值归约
schedule(static[.chunk])
schedule(dynamic)[.chunk]
循环调度,循环开销和负载平衡
private(list)
firstprivate(list)
shared(list)
OpenMP数据环境:默认规则和修改默认行为的子句
default(none) 每个变量的存储属性的强制显式定义
nowait 禁用共享工作构造的隐含栅栏,栅栏的高成本以及刷新内存
#pragma omp single 由单线程完成的工作
#pragma omp task
#pragma omp taskwait
任务,任务完成和用于任务的数据环境

OpenMP的主要组件:

  • 硬件层: 处理器,共享内存
  • 系统层: OpenMP运行时系统,支持共享内存和线程处理的OS
  • 程序层: 指令,编译器,OpenMP库,环境变量
  • 用户层: 应用,终端客户
posted @ 2024-01-14 11:38  Mesonoxian  阅读(24)  评论(0编辑  收藏  举报