运行库函数就是运行时会用到的库函数,库函数是直接调用的,是被封装起来的,我们看不到。
因为属于完成老师布置的翻译,所以,写在这里分享一下。
目的:
设置下一个并行区域使用的线程数。必须是正整数。
说明:
1. 动态线程机制的修改影响此函数。
2.可行的:指定线程的最大数量,可以用于任何并行区域的动态线程机制。
3.限制:指定使用确定数量的线程,直到下一次调用该函数。
4.该函数只能在串行代码部分被调用。
5.该函数比OMP_NUM_THREADS的环境变量的优先级高。
目的:
获取当前并行区域内同一个team内的线程数量。
说明:
1.如果此函数是被串行代码调用,或被嵌套的序列化的并行函数调用,则返回1。
2.默认的线程数量是与实现相关的。
目的:
获取通过OMP_GET_NUM_THREADS能够得到的最大线程数量。
说明:
1.通常这个最大数量由omp_set_num_threads()或OMP_NUM_THREADS环境变量决定。
2.可以在串行或并行区域调用。
目的:
获取线程在team内的ID,返回值在0到omp_get_num_threads()-1之间。主线程(master thread)的ID为0。
说明:
如果被一个嵌套的并行区域调用或是被串行的区域调用,则返回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 |
目的:
获取一个程序的最大可用的openmp的线程数量。
说明:
参考OMP_THREAD_LIMIT环境变量。
目的:
获取程序最大可用处理器数目。
目的:
判断代码段是否处于并行区域中。
说明:
在Fortran里,如果它被动态的在并行区域执行,则返回TRUE,否则返回FALSE。C/C++,如果是处于并行区域,则返回一个非零正数,否则返回0。
目的:
启用或禁用在并行区域可动态调整的线程数量。
说明:
1. 对于Fortran,如果返回的是TRUE,则后续并行区域的可用线程数量可以通过运行时环境自动调整。如果返回的是FALSE,则动态线程的调整是不允许的。
2. 对于C/C++,如果动态线程的值是非零的,则此机制是被允许的,否则是不被允许的。
3. OMP_SET_DYNAMIC函数比OMP_DYNAMIC的环境变量的优先级高。
4. 默认设置由实现决定。
5. 必须被程序的串行部分调用。
目的:
获取是否允许动态线程的调整。
说明:
1. 在Fortran里,这个函数返回TRUE,表示动态线程的设置是被允许的,否则,返回FALSE。
2. 在C/C++,返回非零值则表示动态线程是被允许的,否则返回0。
目的:
设置是否允许嵌套并行。
说明:
1. 在Fortran里,此函数返回TRUE,则可以嵌套并行,否则,返回FALSE。
2.C/C++返回非零值则表示可以嵌套并行,否则返回0.
目的:
此函数设置调度类型,当循环指令指定一个运行时的调度,该调度就被应用。
目的:
此函数用来获得调度表,这个调度表是当循环指令指定运行时被应用的调度表
目的:
此函数限制嵌套的并行区域的级别。
说明:
1. 如果所要求的并行区域的级别数大于支持并行实现的级别数,则将并行区域的级别数设置为支持实现并行的级别数。
2. 这个函数描述了仅当调用串行代码的影响。当调用并行区域时,此函数的作用被默认实现。
目的:
此函数返回并行区域中活动级别的最大数量。
目的:
返回嵌套并行区域的级别。
说明:
1. omp_get_level 函数返回嵌套的并行区域的被调用的封闭任务的数量,不包括隐式并行区域。
2. 此函数通常返回一个非负整数,如果被串行部分的代码调用,则返回0.
目的:
对于一个给定嵌套级别的当前线程,此函数返回祖先线程或当前线程的编号。
说明:
如果要求的嵌套级别的范围在0和当前线程嵌套级别之外,根据omp_get_level返回,函数返回-1。
目的:
对于一个给定嵌套级别的当前线程,此函数返回祖先线程或者当前线程所属线程团队的大小。
说明:
如果要求的嵌套级别的范围在0和当前线程嵌套级别之外,根据omp_get_level返回,函数返回-1.不活动的并行区域被当作用一个线程执行的活动并行区域。
目的:
此函数返回嵌套的活动并行区域的封闭的被调用的任务的级别。
说明:
此函数通常返回一个非负整数,如果被串行部分的代码调用,则返回0。
目的:
如果被最后的区域的任务执行,则返回true,否则,返回false。
目的:
初始化一个和锁变量相关的锁
说明:
1. 初始状态是未锁定的状态。
2. 对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8。
目的:
这个函数将给定所的变量与其他锁分离。
说明:
1. 对于未初始化的锁,不要使用销毁。
2. 对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8。
目的:
强制其他线程等待,直到锁可以用。线程会获得锁的所有权。
说明:
1. 未初始化的锁,不允许被调用。
2. 对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8。
目的:
从执行的子程序上释放锁。
说明:
1. 未初始化的锁,不能使用释放锁。
2. 对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8。
目的:
设置一个锁,但是如果这个锁是不可用的也不能阻塞。
说明:
1. 在Fortran里,如果锁设置成功,则返回TRUE,否则,返回FALSE。
2.对于Fortran,变量必须是是一个足够大的整数去存放一个地址,比如在64位的系统上,用INTEGER*8。
3. 在C/C++里,返回非零则锁设置成功,否则返回0.
4. 未初始化的锁不能检测其状态。
OMP_GET_WTIME
目的:
1. 提供获取时钟时间的函数。
2. 返回一个双精度浮点值表示过去某一时刻经历的时间。通常成对出现,用第二次调用的值减去第一次调用的值获得一块代码的执行时间 。
3. 此函数得到的时间是相对于线程的,也就是每一个线程都有自己的时间。
目的:
1. 提供一种获取墙上时钟时间的函数。
2. 返回一个双精度浮点值,等于连续时钟之间的秒数