zoukankan      html  css  js  c++  java
  • OpenMP的环境变量及库函数

    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

    Visual C++® 2008OpenMP的支持

           VC++2008根据项目属性配置的指示进行 /openmp编译器切换,当配置了OpenMP支持后,编译器会提供_OPENMP定义,可以使用#ifdef _OPENMP来决定程序使用或者不使用OpenMP。

    配置VC++2008项目,在project的property页面上的C/C++ -> Language 选项卡中将OpenMP Support这项设置为Yes,在需要使用OpenMP函数的cpp文件中引用#include <omp.h>,这样设置就完成了。

  • 相关阅读:
    第3章 Spring AOP
    第2章 Spring中的Bean
    第1章 Spring的应用
    Codeforces Round #558 (Div. 2)-Cat Party (Hard Edition)-(前缀和 + 模拟)
    Codeforces Round #552 (Div. 3)-1154E-Two Teams-(模拟+双指针)
    Codeforces Round #552 (Div. 3)-D-Walking Robot-(贪心)
    Codeforces Round #552 (Div. 3)-C-Gourmet Cat
    Codeforces Round #555 (Div. 3)
    2019年湘潭大学程序设计竞赛(重现赛)
    Buy Fruits-(构造)
  • 原文地址:https://www.cnblogs.com/me115/p/1956021.html
Copyright © 2011-2022 走看看