OpenMP-CODE

编译制导函数

for

加大并行力度,尽量并行外层循环
在外层循环上用parallel,内层用for,并同时注意同步

#prapma omp parallel
{
	#pragma omp for
   for(){
           // 循环体内不能使用break语句
   }
}

#pragma omp parallel for

for 后可以用 nowait 取消结束的隐式同步

simd
#pragma omp parallel for simd reduction(+:ret)
for(int i=0; i<num; i++){
	ret += a[i]*a[i];
}
task

解决递归问题
eg.并行化处理Fibonacci数
taskwait 用于 task 构造之后,用于等待前面一个or多个task执行完成

#pragma omp task

#pragma omp taskwait

#pragma omp taskyield
sections / section

划分段,每段由一个线程执行
section后可以用 nowait 取消结束的隐式同步

#pragam omp parallel sections
{
	#pragma omp section
	{
	}
	#pragma omp section
	{
	}
}
single
#pragam omp single
{
}
barrier
#pragma omp barrier
critical

临界区

#pragma omp critical
{
}
atomic

原子操作
只作用到在 ±*/ &^| >> <<

#pragme omp atomic

常用子句

collapse

一般用于同时线程化两层循环(外层easy)

#pragam omp parallel for callapse(2)
	for( )
		for( )
reduction

归约

#pragma omp parallel for reduction(+:PI)
schedule

指定采用的负载均衡策略及每次分发数据大小

#pragma omp parallel for schedule(dynamic, 2)
if

确定是否并行

普通函数

总线程数
int omp_get_num_threads(void);
设置线程数
void omp_set_threads(int num);
上限线程
int omp_get_max_threads(void);
线程索引
int omp_get_thread_num(void);
是否并行
 int omp_in_parallel();

锁函数

OpenMP(四)线程同步之互斥锁函数

环境变量

export OMP_PROC_BIND = true

OpenMP环境变量

OpenMP学习笔记整理(一)——环境变量+嵌套并行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值