OpenMP 运行库函数

               运行库函数就是运行时会用到的库函数,库函数是直接调用的,是被封装起来的,我们看不到。

因为属于完成老师布置的翻译,所以,写在这里分享一下。


      

      OMP_SET_NUM_THREADS

   目的:

     设置下一个并行区域使用的线程数。必须是正整数。

说明:

 

 1. 动态线程机制的修改影响此函数。

 2.可行的:指定线程的最大数量,可以用于任何并行区域的动态线程机制。

 3.限制:指定使用确定数量的线程,直到下一次调用该函数。

 4.该函数只能在串行代码部分被调用。

 5.该函数比OMP_NUM_THREADS的环境变量的优先级高。

OMP_GET_NUM_THREADS

目的:

  获取当前并行区域内同一个team内的线程数量。

说明:

 

1.如果此函数是被串行代码调用,或被嵌套的序列化的并行函数调用,则返回1。

2.默认的线程数量是与实现相关的。

OMP_GET_MAX_THREADS

目的:

 

   获取通过OMP_GET_NUM_THREADS能够得到的最大线程数量。


说明:

 

1.通常这个最大数量由omp_set_num_threads()或OMP_NUM_THREADS环境变量决定。

2.可以在串行或并行区域调用。

OMP_GET_THREAD_NUM

目的:

获取线程在team内的ID,返回值在0omp_get_num_threads()-1之间。主线程(master thread)的ID0

说明:

如果被一个嵌套的并行区域调用或是被串行的区域调用,则返回0。

例子:

1.示例1是正确的方法来确定线程在并行区域的数量。

2.示例2是不正确的,TID变量必须是私有的。

3.示例3是不正确的,OMP_GET_THREAD_NUM的调用在并行区域之外。

 Fortran - determining the number of threads in a parallel region

 

Example 1: Correct

      PROGRAM HELLO

 

      INTEGER TID, OMP_GET_THREAD_NUM

 

!$OMP PARALLEL PRIVATE(TID)

 

      TID = OMP_GET_THREAD_NUM()

      PRINT *, 'Hello World from thread = ', TID

 

      ...

 

!$OMP END PARALLEL

 

      END

 

Example 2: Incorrect

      PROGRAM HELLO

 

      INTEGER TID, OMP_GET_THREAD_NUM

 

!$OMP PARALLEL

 

      TID = OMP_GET_THREAD_NUM()

      PRINT *, 'Hello World from thread = ', TID

 

      ...

 

!$OMP END PARALLEL

 

      END

 

Example 3: Incorrect

      PROGRAM HELLO

 

      INTEGER TID, OMP_GET_THREAD_NUM

 

      TID = OMP_GET_THREAD_NUM()

      PRINT *, 'Hello World from thread = ', TID

 

!$OMP PARALLEL

 

      ...

 

!$OMP END PARALLEL

 

      END

          OMP_GET_THREAD_LIMIT

       目的:

    获取一个程序的最大可用的openmp线程数量。

     说明:

   参考OMP_THREAD_LIMIT环境变量。

  OMP_GET_NUM_PROCS

目的:

获取程序最大可用处理器数目。

OMP_IN_PARALLEL

目的:

判断代码段是否处于并行区域中。

说明:

Fortran里,如果它被动态的在并行区域执行,则返回TRUE,否则返回FALSEC/C++,如果是处于并行区域,则返回一个非零正数,否则返回0

OMP_SET_DYNAMIC

目的:

启用或禁用在并行区域可动态调整的线程数量。

说明:

1. 对于Fortran,如果返回的是TRUE,则后续并行区域的可用线程数量可以通过运行时环境自动调整。如果返回的是FALSE,则动态线程的调整是不允许的。

2. 对于C/C++,如果动态线程的值是非零的,则此机制是被允许的,否则是不被允许的。

3. OMP_SET_DYNAMIC函数比OMP_DYNAMIC的环境变量的优先级高。

4. 默认设置由实现决定。

5. 必须被程序的串行部分调用。

OMP_GET_DYNAMIC

目的:

获取是否允许动态线程的调整。

说明:

 

1. 在Fortran里,这个函数返回TRUE,表示动态线程的设置是被允许的,否则,返回FALSE

2. 在C/C++,返回非零值则表示动态线程是被允许的,否则返回0

OMP_SET_NESTED

目的:

设置是否允许嵌套并行。

说明:

1. 在Fortran里,此函数返回TRUE,则可以嵌套并行,否则,返回FALSE

2.C/C++返回非零值则表示可以嵌套并行,否则返回0.

OMP_SET_SCHEDULE

目的:

此函数设置调度类型,当循环指令指定一个运行时的调度,该调度就被应用。

OMP_GET_SCHEDULE

目的:

此函数用来获得调度表,这个调度表是当循环指令指定运行时被应用的调度表

OMP_SET_MAX_ACTIVE_LEVELS

目的:

此函数限制嵌套的并行区域的级别。

说明:

1. 如果所要求的并行区域的级别数大于支持并行实现的级别数,则将并行区域的级别数设置为支持实现并行的级别数。

2. 这个函数描述了仅当调用串行代码的影响。当调用并行区域时,此函数的作用被默认实现。

OMP_GET_MAX_ACTIVE_LEVELS

目的:

此函数返回并行区域中活动级别的最大数量。

OMP_GET_LEVEL

目的:

返回嵌套并行区域的级别。

说明:

1.  omp_get_level 函数返回嵌套的并行区域的被调用的封闭任务的数量,不包括隐式并行区域。

2. 此函数通常返回一个非负整数,如果被串行部分的代码调用,则返回0.

OMP_GET_ANCESTOR_THREAD_NUM

目的:

对于一个给定嵌套级别的当前线程,此函数返回祖先线程或当前线程的编号。

说明:

如果要求的嵌套级别的范围在0和当前线程嵌套级别之外,根据omp_get_level返回,函数返回-1

OMP_GET_TEAM_SIZE

目的:

  对于一个给定嵌套级别的当前线程,此函数返回祖先线程或者当前线程所属线程团队的大小。

说明:

   如果要求的嵌套级别的范围在0和当前线程嵌套级别之外,根据omp_get_level返回,函数返回-1.不活动的并行区域被当作用一个线程执行的活动并行区域。

OMP_GET_ACTIVE_LEVEL

目的:

此函数返回嵌套的活动并行区域的封闭的被调用的任务的级别。

说明:

此函数通常返回一个非负整数,如果被串行部分的代码调用,则返回0

OMP_IN_FINAL

目的:

如果被最后的区域的任务执行,则返回true,否则,返回false

OMP_INIT_LOCK 
OMP_INIT_NEST_LOCK

目的:

初始化一个和锁变量相关的锁

说明:

1. 初始状态是未锁定的状态。

2. 对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8

OMP_DESTROY_LOCK 
OMP_DESTROY_NEST_LOCK

目的:

这个函数将给定所的变量与其他锁分离。

说明:

1. 对于未初始化的锁,不要使用销毁。

2. 对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8

OMP_SET_LOCK 
OMP_SET_NEST_LOCK

目的:

强制其他线程等待,直到锁可以用。线程会获得锁的所有权。

说明:

1. 未初始化的锁,不允许被调用。

2. 对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8

OMP_UNSET_LOCK 
OMP_UNSET_NEST_LOCK

目的:

从执行的子程序上释放锁。

说明:

1. 未初始化的锁,不能使用释放锁。

2. 对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8

OMP_TEST_LOCK 
OMP_TEST_NEST_LOCK

目的:

设置一个锁,但是如果这个锁是不可用的也不能阻塞。

说明:

1. Fortran里,如果锁设置成功,则返回TRUE,否则,返回FALSE

2.对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8

3. C/C++里,返回非零则锁设置成功,否则返回0.

4. 未初始化的锁不能检测其状态。

OMP_GET_WTIME

目的:

1. 提供获取时钟时间的函数。

2. 返回一个双精度浮点值表示过去某一时刻经历的时间。通常成对出现,用第二次调用的值减去第一次调用的值获得一块代码的执行时间 。

3. 此函数得到的时间是相对于线程的,也就是每一个线程都有自己的时间。

OMP_GET_WTICK

目的:

1. 提供一种获取墙上时钟时间的函数。

2. 返回一个双精度浮点值,等于连续时钟之间的秒数



你可能感兴趣的:(openmp)