VC++中的OpenMP编程:设置与简要说明(转自:Colin.Cpper)
来源:互联网 发布:手机自动打开软件 编辑:程序博客网 时间:2024/06/06 19:34
Visual C++® 2008对OpenMP的支持
VC++2008根据项目属性配置的指示进行 /openmp编译器切换,当配置了OpenMP支持后,编译器会提供_OPENMP定义,可以使用#ifdef _OPENMP来决定程序使用或者不使用OpenMP。
配置VC++2008项目:
在Project的Property页面上的C/C++ -> Language 选项卡中将OpenMP Support这项设置为Yes,然后在需要使用OpenMP函数的cpp文件中引用#include <omp.h>,这样设置就完成了。注意,Debug模式和Release模式都需要设置OpenMP Support选项。
OpenMP的环境变量
环境变量
描述
示例
OMP_SCHEDULE
控制for循环任务分配结构的调度
OMP_SCHEDULE="guided,2"
OMP_NUM_THREADS
设置默认线程的个数
OMP_SCHEDULE=4
OpenMP的库函数
函数名称
描述
int omp_get_num_threads(void)
返回当前使用的线程个数,如果在并行区域外则返回1
int omp_set_num_threads(int i)
设置要使用的线程个数,它可以覆盖OMP_NUM_THREADS
int omp_get_thread_num(void)
返回当前线程号,0代表主线程
int omp_get_num_procs(void)
返回可用的处理核(处理器)个数,对于支持超线程技术的处理器被算作两个处理核
OpenMP的调度方案
调度类型
描述
static
将所有循环迭代划分成相等大小的块
dynamic
使用一个内部队列,当某线程可用时,为其分配由块大小所制定的一定数量的循环迭代
guided
与dynamic策略类似,但是块大小开始较大,后来逐步减小。可选参数chunk指定块大小的最小值,默认为1
runtime
运行时由OMP_SCHEDULE决定使用上面三种的哪种策略
OpenMP的编译
平台和编译器
命令
windows平台 intel C++编译器
icl /Qopenmp
linux平台 intel C++编译器
icl -openmp
gcc
gcc -fopenmp
_OPENMP宏可以用来判断OpenMP是否被支持,通过它可以写出任何C语言编译器(即使不支持OpenMP)都可以编译的代码。代码如下所示:
#ifdef _OPENMP
#include <omp.h>
#else
#define omp_get_thread_num() 0
#endif
- VC++中的OpenMP编程:设置与简要说明(转自:Colin.Cpper)
- OpenMP: OpenMP多核编程配置与测试
- OpenMP: OpenMP多核编程配置与测试
- 【转】wdk minifilter 自带示例的简要说明
- VMProtect 与 ASProtect 在VC中的SDK编程 (转)
- VMProtect 与 ASProtect 在VC中的SDK编程 (转)
- OpenMP与MPI联合编程
- Vc 中回调函数简要说明
- MXML与ActionScript简要说明
- Mapnik简要与技术说明
- VC环境设置说明
- VC中的消息机制(一)(转自pcvc论坛)
- VC中的消息机制(二)(转自pcvc论坛)
- VC中的消息机制(三)(转自pcvc论坛)
- OpenMP: OpenMP编程指南
- OpenMP: OpenMP编程指南
- openMP编程过程中的一些注意事项
- 转自Stackoverflow:Parallelization: pthreads or OpenMP?
- java File的基本操作实例
- memcached for perl
- Xmanager xstart里设置 双屏显示
- 将两个数组组合成有序数组
- 为什么房价不降,物价上涨,工资不涨
- VC++中的OpenMP编程:设置与简要说明(转自:Colin.Cpper)
- 更改Outlook的OST文件存放目录
- JNI 内存泄漏
- 2136 Vertical Histogram 自己做的爽
- C语言判断文件夹或者文件是否存在的方法
- Eclipse Classical Version ADT 安装依赖
- JAVA与COBOL相互调用
- 关于Symbian,运行QT程序,读取和导入SQLITE数据库中中文,音标乱码的解决方案
- How do you remove the duplicate characters in a given string without using any additional buffer.