OpenMP
2015-06-29 15:18
288 查看
1 简介
www.openmp.orgGNU的gomp项目;
Include <omp.h>;编译参数-fopenmp打开openmp,如果使用-lgomp则编译成单线程版本;
条件编译 #ifdef _OPENMP
声明并行区,由编译器和运行时库确定线程的创建、终止、调度和数量,并行区结束后线程挂起等待进入下一并行区;
Intel编译器的OMP开关,关上时将编译成非并行代码,-Qopenmp
2 将for并行化
#pragma omp parallel for1, 比较操作不能为!=和==;
2, 步长必须为循环不变量;
3, 单入口单出口,不能有break和goto
循环多线程化需要避免“迭代相关”,要求循环执行的次序可以被任意打乱和组织,而不必安装常规的循环变量依次变化的方式执行;
循环并行化的一种方式是:把循环均分成n段,每段由一个线程并行执行;
消除迭代相关的一种方法:手动对循环分段,再使用section指令,每段一个section:
#pragma omp section
3 Private子句
将被多线程共享,而逻辑上独立的变量使用private;private变量会在每个线程中保存一个副本,并使用默认值初始化;int x;
#pragma omp parallel for private(x)
for(…){
x = …
}
上面也可以通过将x声明到循环体内解决
4 Schedule子句控制调度
schedule(kind[,chunksize])l static调度策略,循环被近乎均分的方式分配给各线程,一般不指定块大小;
l dynamic,使用内部任务队列,线程执行完被分配的块后再从队列中取新的任务执行;
l guided,与dynamic类似,但先取较大块后逐渐减小,以减少访问内部队列的次数;
l runtime,运行时通过环境变量确定具体调度策略,如:
export OMP_SCHEDULE=dynamic,16
5 reduction子句
sum = 0#pragma omp parallel for reduction(+:sum)
for(…)
sum = sum + fun(k);
这样编译器生成每个线程的sum副本,并按一定规则附相应初始值,循环完成时再将它们合并到原始的sum变量;类似“+”的操作还可以有-/*/&/等;
6 Barrier栅障——线程同步
For循环与section结构中隐含使用了栅障,nowait子句去除它#pragma omp for nowait
#pragma omp barrier 显示使用栅障
7 并行区中的串行区
只由一个线程执行一次#pragma omp master 只由主线程执行
#pragma omp single 只由一个线程执行一次
8 临界区与原子操作
#pragma omp critical#pragma omp critical(name) 命名临界区,这样该临界区就可以在多处被引用了
#pragma omp atomic 只能是简单操作
9 函数
需要#include <omp.h>,不建议使用;omp_set_num_threads(n)
omp_get_thread_num() 线程编号
omp_get_num_procs() CPU数量
10 If子句
#pragma omp parallel for if(n>100) n>100时才执行并行化11 环境变量
OMP_SCHEDULEOMP_NUM_THREADS 默认线程数
相关文章推荐
- Linux中nmon的安装与使用
- 1-nginx 为何能写log文件
- ‘mvn’ is not recognized as an internal or external command, operable program or batch file.
- ubuntu 12.04 hadoop 单机模式平台搭建
- 使用python通过SSH登陆linux并操作
- Linux发行版:CentOS、Ubuntu、RedHat、Android、Tizen、MeeGo
- 浅析中小创企业建设网站应该怎样选择空间
- Mvc.Ext.Net项目架构(二)
- openstack学习
- linux下lua开发环境安装
- eclipse中tomcat能正常启动,但是浏览器访问不了tomcat首页 问题解决
- Nginx配置网站适配PC和手机
- uva10934 Dropping water balloons
- arm linux 启动大致顺序
- Sqoop-1.4.4工具import和export使用详解
- Linux Nginx安装与配置(2)
- hadoop 的所有的参数观看网址
- 通过OpenSSL解码X509证书文件
- Java 时间架构图
- nginx进行负载计划以及所需参数说明