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
说明:此函数只能在串行代码部分调用。另外,具体并行区域的线程数由多个因素决定,参考parallel指令的说明。
(3)omp_get_num_threads
说明:如果在串行代码中调用此函数,返回值为1.
(4)omp_get_max_threads
说明:可以在串行或并行区域调用,通常这个最大数量由omp_set_num_threads()或OMP_NUM_THREADS环境变量决定。
(5)omp_get_thread_num
说明:OpenMP中的线程ID是从0开始计数的,类似于一个数组,主线程是0.
(6)omp_get_thread_limit
(7)omp_get_num_procs
(8)omp_in_parallel
(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
说明:初始状态是未锁定的状态。(unlocked)
(15)omp_destroy_lock
说明:对于未init的锁,不要使用销毁。
(16)omp_set_lock
(17)omp_unset_lock
(18)omp_test_lock
(19)omp_get_wtime
此函数得到的时间是相对于线程的,也就是每一个线程都有自己的时间。需要OpenMP2.0以上支持。
(20)omp_get_wtick
以上就是一些基本的OpenMP提供的库函数,对于OpenMP,其核心在于指导性注释(即编译器指令)的使用。这些库函数和接下来的环境变量都是用于进行一些辅助的功能设置等。
(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,其核心在于指导性注释(即编译器指令)的使用。这些库函数和接下来的环境变量都是用于进行一些辅助的功能设置等。
相关文章推荐
- 通过Run-Time Library中的time和localtime函数获取系统时间
- 第三篇 使用自己的函数替换C run-time启动函数
- (筆記) 如何讓C++ Builder 2009產生不需要任何run time library的執行檔? (C/C++) (C++ Builder)
- 链接时如何选择C Run-Time(CRT) library
- How to link with the correct C Run-Time (CRT) library
- 链接时如何选择C Run-Time(CRT) library
- 链接时如何选择C Run-Time(CRT) library
- 链接时如何选择C Run-Time(CRT) library
- c run timelibrary
- How to link with the correct C Run-Time (CRT) library
- CRT (C run-time library)
- Run Time Library & win32 API
- Advanced Run Time Type Identification in C++ Part II(Property Library An Implementation of RTTI in C++)
- 解决CRT(即C Run-Time)中函数的安全警告
- When the C Run-Time (CRT) library and Microsoft Foundation Class (MFC) libraries are linked in the w
- How to call Visual Basic .NET run-time library members from Visual C#
- The C++ Standard Library: RTTI(Run-Time Type Identification,运行时类型识别)
- cocos2d-x C++ 利用C++11新特性+runAction RepeatForever Sequence DelayTime做一个持续循环函数 每秒更新 5次后停止
- JMeter 中_time 函数的使用(时间戳、当前时间)
- Run-time function call tree with gcc