运行时函数接口实例
通常,这些接口被包含在Fortran头文件omp_lib.h中。下面是omp_lib.h的一个实例,来自于Intel Fortran90编译器所带的头文件(经过修改)。
MODULE IFLOMP
!
!提供用于线程管理的OpenMP运行函数接口
!
! Intel compilers have a default INTEGER kind of 4, for 4 byte
INTEGERs
INTEGER,PARAMETER :: omp_lock_kind = 4
INTEGER,PARAMETER :: omp_nest_lock_kind = 4
! _OPENMP gets macro-substituted by preprocessor
INTEGER,PARAMETER :: openmp_version = 199910
INTERFACE
!设置线程数目(不能在Parallel内部调用)
SUBROUTINE OMP_SET_NUM_THREADS(NP)
INTEGER NP
END SUBROUTINE
!返回当前线程组所执行的Parallel块的工作线程数
INTEGER FUNCTION OMP_GET_NUM_THREADS()
END FUNCTION
! 得到可以允许创建的最大线程数,上面的这组调用允许程序员对
! 线程数目进行运行时控制
INTEGER FUNCTION OMP_GET_MAX_THREADS()
END FUNCTION
! 返回当前线程的线程号,主线程号为0,取值范围为[0,nthread-1]
INTEGER FUNCTION OMP_GET_THREAD_NUM()
END FUNCTION
! 返回当前Parallel块可用的处理器数目
INTEGER FUNCTION OMP_GET_NUM_PROCS()
END FUNCTION
! 判断当前线程是否正在执行Parallel任务(是返回.TRUE.)
LOGICAL FUNCTION OMP_IN_PARALLEL()
END FUNCTION
! 设置动态线程数目调整开关,如果FLAG = .TRUE.,允许运行时库
! 对Parallel块产生的工作线程数目进行动态调整,否则禁止
SUBROUTINE OMP_SET_DYNAMIC(FLAG)
LOGICAL FLAG
END SUBROUTINE
! 得到动态线程数目调整开关的当前设置
LOGICAL FUNCTION OMP_GET_DYNAMIC()
END FUNCTION
! 嵌套并行开关设置。.TRUE.时允许嵌套并行,否则以串行模式执行嵌套并行块
SUBROUTINE OMP_SET_NESTED(FLAG)
LOGICAL FLAG
END SUBROUTINE
! 初始化简单锁
SUBROUTINE OMP_INIT_LOCK(LOCK)
POINTER(LOCK,IL)
INTEGER IL
END SUBROUTINE
! 初始化嵌套锁
SUBROUTINE OMP_INIT_NEST_LOCK(NLOCK)
POINTER(NLOCK,NIL)
INTEGER NIL
END SUBROUTINE
! 删除简单锁
SUBROUTINE OMP_DESTROY_LOCK(LOCK)
POINTER(LOCK,IL)
INTEGER IL
END SUBROUTINE
! 删除嵌套锁
SUBROUTINE OMP_DESTROY_NEST_LOCK(NLOCK)
POINTER(NLOCK,NIL)
INTEGER NIL
END SUBROUTINE
! 简单锁加锁(需要经过初始化),阻塞等待加锁完成
SUBROUTINE OMP_SET_LOCK(LOCK)
POINTER(LOCK,IL)
INTEGER IL
END SUBROUTINE
! 嵌套锁加锁(需要经过初始化),锁计数器加1
SUBROUTINE OMP_SET_NEST_LOCK(NLOCK)
POINTER (NLOCK, NIL)
INTEGER NIL
END SUBROUTINE
! 简单锁解锁
SUBROUTINE OMP_UNSET_LOCK(LOCK)
POINTER(LOCK,IL)
INTEGER IL
END SUBROUTINE
! 嵌套锁解锁(锁计数器减1)
SUBROUTINE OMP_UNSET_NEST_LOCK(NLOCK)
POINTER(NLOCK,NIL)
INTEGER NIL
END SUBROUTINE
! 非阻塞加锁
LOGICAL FUNCTION OMP_TEST_LOCK(LOCK)
POINTER (LOCK,IL)
INTEGER IL
END FUNCTION
! 非阻塞加锁,如果对嵌套锁没有拥有权,返回0
INTEGER FUNCTION OMP_TEST_NEST_LOCK(NLOCK)
POINTER(NLOCK,NIL)
INTEGER NIL
END FUNCTION
! 返回墙钟时间(线程时间,各线程不要求一致)
DOUBLE PRECISION FUNCTION OMP_WTIME()
END FUNCTION
! 返回两个Tick之间所经过的时间长度(秒)
DOUBLE PRECISION FUNCTION OMP_WTICK()
END FUNCTION
END INTERFACE
END MODULE IFLOMP
|