您的位置:首页 > 运维架构

OpenMP Tutorial学习笔记(12)OpenMP运行库函数(Run-Time Library Routines)

2011-11-16 14:43 295 查看
OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#RunTimeLibrary

(1)Summary:

OpenMP标准定义了一系列的API用于实现以下功能:

1. 查询线程/处理器数量,设置要使用的线程数。

2. 用于实现锁的函数(信号量)

3. 可移植的计时函数

4. 执行环境的设置(如是否动态线程,是否嵌套并行等)

包含的头文件是:omp.h

说明:有些内容是依赖于编译器的实现,比如动态线程等。

(2)omp_set_num_threads

#include <omp.h>
void omp_set_num_threads(int num_threads)
设置下一个并行区域使用的线程数。

说明:此函数只能在串行代码部分调用。另外,具体并行区域的线程数由多个因素决定,参考parallel指令的说明。

(3)omp_get_num_threads

#include <omp.h>
int omp_get_num_threads(void)
获取当前并行区域内同一个team内的线程数量。

说明:如果在串行代码中调用此函数,返回值为1.

(4)omp_get_max_threads

#include <omp.h>
int omp_get_max_threads(void)
获取利用omp_get_num_threads()能得到的最大的线程数量。

说明:可以在串行或并行区域调用,通常这个最大数量由omp_set_num_threads()或OMP_NUM_THREADS环境变量决定。

(5)omp_get_thread_num

#include <omp.h>
int omp_get_thread_num(void)
获取线程的在team内的ID,返回值在0到omp_get_num_threads()-1之间。主线程(master thread)的ID为0.

说明:OpenMP中的线程ID是从0开始计数的,类似于一个数组,主线程是0.

(6)omp_get_thread_limit

#include <omp.h>
int omp_get_thread_limit (void)
获取一个程序的最大可用线程数量。OpenMP3.0 新增的函数。参考OMP_THREAD_LIMIT环境变量。

(7)omp_get_num_procs

#include <omp.h>
int omp_get_num_procs(void)
获取程序可用的最大处理器数目。

(8)omp_in_parallel

#include <omp.h>
int omp_in_parallel(void)
判断代码段是否处于并行区域中。如果是,返回非0值,否则,返回0.

(9)omp_set_dynamic

设置允许动态线程。

(10)omp_get_dynamic

获取是否允许动态线程。

(11)omp_set_nested

设置允许嵌套并行。

(12)omp_get_nested

获取是否允许嵌套并行。

(13)

OMP_SET_SCHEDULE

OMP_SET_SCHEDULE

OMP_GET_SCHEDULE

OMP_SET_MAX_ACTIVE_LEVELS

OMP_GET_MAX_ACTIVE_LEVELS

OMP_GET_LEVEL

OMP_GET_ANCESTOR_THREAD_NUM

OMP_GET_TEAM_SIZE

OMP_GET_ACTIVE_LEVEL

OMP_IN_FINAL

OMP_INIT_NEST_LOCK

OMP_DESTROY_NEST_LOCK

OMP_SET_NEST_LOCK

OMP_UNSET_NEST_LOCK

OMP_TEST_NEST_LOCK

OpenMP3.0 新增的一些函数,参考OpenMP3.0 Spec文档。

(14)omp_init_lock

#include <omp.h>
void omp_init_lock(omp_lock_t *lock)
void omp_init_nest_lock(omp_nest_lock_t *lock)
初始化一个和锁变量相关的锁。

说明:初始状态是未锁定的状态。(unlocked)

(15)omp_destroy_lock

#include <omp.h>
void omp_destroy_lock(omp_lock_t *lock)
void omp_destroy_nest__lock(omp_nest_lock_t *lock)
销毁锁。

说明:对于未init的锁,不要使用销毁。

(16)omp_set_lock

#include <omp.h>
void omp_set_lock(omp_lock_t *lock)
void omp_set_nest__lock(omp_nest_lock_t *lock)
强制其它执行线程等待直到锁可用。

(17)omp_unset_lock

#include <omp.h>
void omp_unset_lock(omp_lock_t *lock)
void omp_unset_nest__lock(omp_nest_lock_t *lock)
释放锁。

(18)omp_test_lock

#include <omp.h>
int omp_test_lock(omp_lock_t *lock)
int omp_test_nest__lock(omp_nest_lock_t *lock)
测试锁的状态。

(19)omp_get_wtime

#include <omp.h>
double omp_get_wtime(void)
获取wall clock time,返回一个double的数,表示从过去的某一时刻经历的时间,一般用于成对出现,进行时间比较。

此函数得到的时间是相对于线程的,也就是每一个线程都有自己的时间。需要OpenMP2.0以上支持。

(20)omp_get_wtick

#include <omp.h>
double omp_get_wtick(void)
得到clock ticks的秒数。OpenMP2.0以上支持。

以上就是一些基本的OpenMP提供的库函数,对于OpenMP,其核心在于指导性注释(即编译器指令)的使用。这些库函数和接下来的环境变量都是用于进行一些辅助的功能设置等。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: