编译制导指令
编译制导指令格式:
#pragma omp 功能指令 [子句[, 子句]...]
功能指令:
parallel 用于代码块之前,创建并行域,并将代码块分配到并行域所有线程并行执行
for 用于for循环前,将循环分配到并行域线程并行执行
parallel for 用于for循环前,创建并行域并将循环分配到并行域线程并行执行
sections 用于多个代码块的并行执行,各个代码块用section指令标出
parallel sections
single 用在并行域内,仅单个线程执行
cirtical 用于临界区之前,每次只有一个线程进入临界区
flush 保证各个线程的数据一致
barrier 同步
atomic 原子操作
master 仅主线程执行
threadprivate 指定变量为线程专有
子句:
private 线程私有变量(副本)
firstprivate 同上,并用主线程同名变量初始化
lastprivate 同private,并将线程变量值复制回主线程同名变量中
reduction 指定规约运算
nowait 忽略隐含同步
num_threads 指定并行域内线程数量
schedule 任务分配调度类型
shared 线程间共享的变量
ordered 指定for并行域内代码,按串行循环次序执行
copyprivate 配合single,将指定线程的专有变量广播到其它线程的同名变量
copyin threadprivate类型变量需要用主线程同名变量初始化
default
API函数
omp_in_parallel 是否在并行域内
omp_get_thread_num 返回线程号
omp_set_num_threads 设置线程数量
omp_get_num_threads
omp_get_max_threads 返回并行域可用的最大线程数目
omp_get_max_procs 返回处理器个数
omp_get_dynamic 动态改变线程数目
omp_set_dynamic
omp_get_nested 并行嵌套
omp_set_nested
omp_init(_nest)_lock 初始化(嵌套)锁
omp_destroy(_nest)_lock
omp_set(_nest)_lock
omp_unset(_nest)_lock
omp_test(_nest)_lock 非阻塞加锁
omp_get_wtime 获取wall time时间
omp_set_wtime
环境变量
OMP_SCHEDULE 与同名函数意义相同
OMP_NUM_THREADS
OMP_DYNAMIC
OMP_NESTED