OPENMP学习笔记(5)——运行时库函数

OPENMP学习笔记(5)——运行时库函数

库函数 目标
OMP_SET_NUM_THREADS 设置在下一个并行区域中使用的线程数
OMP_GET_NUM_THREADS 返回当前处于执行调用的并行区域中的线程数
OMP_GET_MAX_THREADS 返回调用OMP_GET_NUM_THREADS函数可以返回的最大值
OMP_GET_THREAD_NUM 返回组内线程的线程号(译注:不要和线程总数搞混)
OMP_GET_THREAD_LIMIT 返回可用于程序的最大OpenMP线程数
OMP_GET_NUM_PROCS 返回程序可用的处理器数
OMP_IN_PARALLEL 用于确定正在执行的代码是否是并行的
OMP_SET_DYNAMIC 启动或者禁用可执行并行区域的线程数(由运行时系统)的动态调整
OMP_GET_DYNAMIC 用于确定是否启动了动态线程调整
OMP_SET_NESTED 用于启用或者禁用嵌套并行
OMP_GET_NESTED 用于确定嵌套并行是否被弃用
OMP_SET_SCHEDULE 当“运行时”被用作OpenMP指令中的调度类型时,设置循环调度策略
OMP_GET_SCHEDULE 当“运行时”被用作OpenMP指令中的调度类型时,返回循环调度策略
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 如果在最终任务区域中执行该例程,则返回true;否则返回false
OMP_INIT_LOCK 初始化与锁变量相关联的锁
OMP_DESTROY_LOCK 解除给定的锁变量与所有锁的关联
OMP_SET_LOCK 获取锁的所有权
OMP_UNSET_LOCK 释放锁
OMP_TEST_LOCK 尝试设置锁,但是如果锁不可用,则不会阻止
OMP_INIT_NEST_LOCK 初始化与锁定变量关联的嵌套锁
OMP_DESTROY_NEST_LOCK 将给定的嵌套锁变量与所有锁解除关联
OMP_SET_NEST_LOCK 获取嵌套锁的所有权
OMP_UNSET_NEST_LOCK 释放嵌套锁
OMP_TEST_NEST_LOCK 尝试设置嵌套锁,但如果锁不可用,则不会阻止
OMP_GET_WTIME 提供便携式挂钟计时程序
OMP_GET_WTICK 返回连续时钟之间的秒数(双精度浮点值)

具体:

OMP_SET_NUM_THREADS

目标:
设置将在下一个并行区域中使用的线程数,其值必须是一个正整数。

格式:

#include <omp.h>
void omp_set_num_threads(int num_threads)

注意事项:

动态线程机制将会修改此例程的效果:
启用:指定动态线程机制可以用于并行区域的最大线程数;
禁用:指定在下次调用此例程之前正确使用的线程数。
该例程只能从代码的串行部分调用。
此调用优先于OMP_NUM_THREADS环境变量。

OMP_GET_NUM_THREADS

目标:
返回当前组在执行并行区域时所调用的线程数。

格式:

#include <omp.h>
int omp_get_num_threads(void)

注意事项及限制条件:

如果这个调用是从程序的串行部分或者被序列化的嵌套并行区域进行的,它将返回1。
默认的线程数是依赖于具体实现的。

OMP_GET_MAX_THREADS

目标:

返回调用OMP_GET_NUM_THREADS函数可以返回的最大值。

#include <omp.h>
int omp_get_max_threads(void)

注意事项及限制条件:

通常反映由OMP_NUM_THREADS环境变量或者OMP_SET_NUM_THREADS()库函数例程设置的线程数。
可以从串行和并行的代码区域调用。

OMP_GET_THREAD_NUM

目标:

返回队列中的线程的线程号。改数字将在0和OMP_GET_NUM_THREADS-1之间。组内的主线程的线程号是0。
格式:

#include <omp.h>
int omp_get_thread_num(void)

注意事项及限制条件:

如果从嵌套的并行区域或者串行区域调用,则此函数将返回0。

OMP_GET_THREAD_LIMIT

目标:

返回可用于程序的最大OpenMP线程数。
格式:

#include <omp.h>
int omp_get_thread_limit (void)

注意事项:

可同时参考OMP_THREAD_LIMIT环境变量。

OMP_GET_NUM_PROCS

目标:

返回程序可用的处理器个数。
格式:

#include <omp.h>
int omp_get_num_procs(void)

OMP_IN_PARALLEL

目标:

可以调用以确定正在执行的代码段是否是并行的。
格式:

#include <omp.h>
int omp_in_parallel(void)

注意事项及限制条件:

对于C/C++,如果并行,它将返回非零整数,否则将返回0。

OMP_SET_DYNAMIC

目标:

启用或者禁用可执行并行区域的线程数(由运行时系统)的动态调整。
格式:

#include <omp.h>
void omp_set_dynamic(int dynamic_threads)

注意事项及限制条件:

对C/C++,如果dynamic_threads计算为非零值,则启用机制,否则禁用。
OMP_SET_DYNAMIC子例程优先于OMP_DYNAMIC环境变量。
默认设置取决于具体实现。
必须从程序的串行部分开始调用。

OMP_GET_DYNAMIC

目标:

用于确定是否启用了动态线程调整。
格式:

#include <omp.h>
int omp_get_dynamic(void)

注意事项及限制条件:

对于C/C++,如果启用了动态线程调整,则返回非零值,否则返回0。

OMP_SET_NESTED

目标:

用于启用或者禁用嵌套并行。
格式:

#include <omp.h>
void omp_set_nested(int nested)

注意事项及限制条件:

对于C/C++,如果嵌套求值为非0,嵌套并行将启用,否则禁用。
默认值为禁用嵌套并行。
此调用优先于OMP_NESTED环境变量。

OMP_GET_NESTED

目标:

用于确定嵌套并行是否启用。
格式:

#include <omp.h>
int omp_get_nested (void)

注意事项及限制条件:

对于C/C++,如果启用嵌套并行性,则返回非零值,否则返回0。

OMP_SET_SCHEDULE

目标:

此例程设置用于循环指令运行时的时间调度策略。
格式:

#include <omp.h>
void omp_set_schedule(omp_sched_t kind, int modifier)

OMP_GET_SCHEDULE

目标:

此例程返回在循环指令指定运行时调度时应用的调度策略。
格式:

#include <omp.h>
void omp_get_schedule(omp_sched_t * kind, int * modifier )

OMP_SET_MAX_ACTIVE_LEVELS

目标:

此例程限制嵌套活动并行区域的数量。
格式:

#include <omp.h>
void omp_set_max_active_levels (int max_levels) 

注意事项及限制条件:

如果所请求的并行级别的数量超过实现所支持的并行级数,则该值将被设置为实现所支持的并行级别数。
该程序仅在从程序的顺序部分调用时才具有效果。当在显式并行区域内调用时,此例程的作用就是具体实现相关的。

OMP_GET_MAX_ACTIVE_LEVELS

目标:

此例程返回嵌套活动并行区域的最大数量。
格式:

#include <omp.h>
int omp_get_max_active_levels(void) 

OMP_GET_LEVEL

目标:

此例程返回包含该调用任务的嵌套并行区域的数量。
格式:

#include <omp.h>
int omp_get_level(void) 

注意事项及限制条件:

omp_get_level例程返回包含调用任务的嵌套并行区域(无论是活动的还是非活动的)中除去隐式并行区域的数量。该例程总是返回非负整数。如果从程序的串行部分调用,则返回0。

OMP_GET_ANCESTOR_THREAD_NUM

目标:

给定当前线程的嵌套级别,该例程返回祖先或者当前线程的线程号。
格式:

#include <omp.h>
int omp_get_ancestor_thread_num(int level) 

注意事项和限制条件:

如果所请求的嵌套级别超出范围0和由omp_get_level子程序返回的当前线程的嵌套级别,则该例程反悔-1。

OMP_GET_TEAM_SIZE

目标:

给定当前线程的给定嵌套级别,此例程返回祖先或者当前线程所属组的大小。
格式:

#include <omp.h>
int omp_get_team_size(int level); 

注意事项和限制条件:

如果所请求的嵌套级别在0和由omp_get_level例程返回的当前线程的嵌套级别之外,则该例程返回-1。非活动并行区域被认为像单线程执行的活动并行区域一样。

OMP_GET_ACTIVE_LEVEL

目标:

omp_get_active_level例程返回包含该调用任务的活动嵌套并行区域的数量。
格式:

#include <omp.h>
int omp_get_active_level(void);

注意事项和限制条件:

该例程总是返回一个非负整数。如果从程序的串行部分调用,则返回0。

OMP_IN_FINAL

目标:

如果程序在最终任务区域中执行,则此例程反悔true;否则返回false。
格式:

#include <omp.h>
int omp_in_final(void) 

OMP_INIT_LOCK
OMP_INIT_NEST_LOCK

目标:

该子例程初始化与锁变量相关联的锁。
格式:

#include <omp.h>
void omp_init_lock(omp_lock_t *lock)
void omp_init_nest_lock(omp_nest_lock_t *lock)

注意事项及限制条件:

初始状态是解锁状态。

OMP_DESTROY_LOCK
OMP_DESTROY_NEST_LOCK

目标:

该子程序将给定的锁变量与所有锁解除关联。
格式:

#include <omp.h>
void omp_destroy_lock(omp_lock_t *lock)
void omp_destroy_nest_lock(omp_nest_lock_t *lock)

注意事项及限制条件:

使用未初始化的锁变量调用此例程是非法的。

OMP_SET_LOCK
OMP_SET_NEST_LOCK

目标:

该子程序强制执行线程等待,直到指定的锁可用。一个线程在可用时被授予锁的使用权。
格式:

#include <omp.h>
void omp_set_lock(omp_lock_t *lock)
void omp_set_nest__lock(omp_nest_lock_t *lock)

注意事项和限制条件:

使用未初始化的锁变量调用此例程是非法的。

OMP_UNSET_LOCK
OMP_UNSET_NEST_LOCK

目标:

该子程序从执行子程序中释放锁。
格式:

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

注意事项和限制条件:

使用未初始化的锁变量调用此例程是非法的。

OMP_TEST_LOCK
OMP_TEST_NEST_LOCK

目标:

此子程序尝试设置锁,但如果锁定不成功,则不会阻塞。
格式:

#include <omp.h>
int omp_test_lock(omp_lock_t *lock)
int omp_test_nest__lock(omp_nest_lock_t *lock)

注意事项和限制条件:

对于C/C++,如果锁设置成功,则返回非零值,否则返回0。
使用未初始化的锁变量调用此例程是非法的。

OMP_GET_WTIME

目标:

提供可移植的挂钟计时程序。
返回一个从过去某个时间点经过的秒数的双精度浮点值。通常以“pair”的形式使用,在第二次调用的值中减去第一次调用的值,就可以获得代码块的经过时间。
设计为“每个线程”一次。因此在一个组内的所有线程中可能不是全局一致的——取决于线程与其他线程相比的行为。
格式:

#include <omp.h>
double omp_get_wtime(void) 

OMP_GET_WTICK

目标:

提供可移植的挂钟计时程序。
返回一个表示连续时钟秒数的双精度浮点值。
格式:

#include <omp.h>
double omp_get_wtick(void) 
发布了32 篇原创文章 · 获赞 13 · 访问量 8318

猜你喜欢

转载自blog.csdn.net/qq_23858785/article/details/97105972