OpenMP中的常用函数
1、设置线程数目
void omp_set_num_threads(int num_threads);
通过该函数来指定其后用于并行计算的线程数目,其中参数num_threads就是指定的线程数目。
通过该函数可以获取当前运行组中的线程数目,如果是在并行结构中使用该函数,其返回的就是现在并行计算中的所有的线程总数,如果是在串行中使用该函数,其返回值就为1。
通过该函数可以返回当前线程的ID,如果使用该函数时处于并行结构中,它返回的就是这个并行线程的ID,如果在串行中,就是返回主线程的ID。
omp_set_dynamic 功能启用或禁用线程数动态调整可用于并行区域的执行。 格式如下所示:
#include <omp.h>
void omp_set_dynamic(int dynamic_threads);
如果 dynamic_threads 计算为非零值,对于执行后续并行区域使用线程的数目可能由种运行时环境自动调整以最佳利用系统资源。 因此,用户指定的线程的数目最大线程计数。 线程数在执行并行区域的团队保持固定为该并行区域的持续时间以及由 omp_get_num_threads 函数报告。
如果 dynamic_threads 计算结果为 0,动态调整被禁用。
该函数具有中描述的效果顶部,在调用从 omp_in_parallel 函数返回零程序的一部分。 如果从 omp_in_parallel 函数返回非零值程序的一部分调用,此功能的行为未定义。
为 omp_set_dynamic 的调用在 OMP_DYNAMIC 环境变量的优先级。
线程的动态调整的默认实现中定义。 因此,依赖于线程的特定数字正确执行的用户代码应显式禁用动态线程。 不需要实现能够动态地调整线程数,但是,要求他们提供接口以便支持在所有平台上的可移植性。
总体来说,调用omp_set_dynamic会覆盖OMP_DYNAMIC环境变量的设置,其参数是一个int类型,这也是这个函数容易让人误解的地方之一。其实,其参数也是一个"bool"类型,和OMP_DYNAMIC的功能是一样的,上面的MSDN描述可知,如果参数为非零值,线程组线程数量也是根据系统的资源状态动态调整的,当然,在线程组执行一个并行区域的时候,其线程数量是固定的(fixed),这也是对“动态”容易造成的误解,所以,“动态调整“并不是表示并行块执行的过程中会动态变化线程组线程数量,而是在设置了”动态“之后,接下里的并行区域会根据系统的当前状况进行判断来分配合理的线程数量。
omp_get_dynamic函数用于获取是否允许动态调整,其返回值为int类型,但是实际只会返回0和1两个值之一。
(PS:不知道为什么openmp不规定omp_set_dynamic的参数类型为bool,可能是C里面没有bool类型的原因?)
(3)例子:
- #include <omp.h>
- int main(int argc, _TCHAR* argv[])
- {
- omp_set_dynamic(0); // can be ignored!
- printf("Is Dynamic: %d\n",omp_get_dynamic());
- omp_set_num_threads(10);
- #pragma omp parallel num_threads(5)
- {
- printf("ID: %d, Max threads: %d, Num threads: %d \n",omp_get_thread_num(), omp_get_max_threads(), omp_get_num_threads());
- }
- omp_set_dynamic(1000); // nonzero is OK!
- printf("Is Dynamic: %d\n",omp_get_dynamic());
- omp_set_num_threads(10);
- #pragma omp parallel num_threads(5)
- {
- printf("ID: %d, Max threads: %d, Num threads: %d \n",omp_get_thread_num(), omp_get_max_threads(), omp_get_num_threads());
- }
- return 0;
- }
分析上面的程序,来理解设置动态和不设置的差别,在4核CPU上运行的结果如下:
OpenMP中的常用函数相关推荐
- Python之pandas:pandas中数据处理常用函数(与空值相关/去重和替代)简介、具体案例、使用方法之详细攻略
Python之pandas:pandas中数据处理常用函数(与空值相关/去重和替代)简介.具体案例.使用方法之详细攻略 目录 pandas中数据处理常用函数(isnull/dropna/fillna/ ...
- c语言中math的库函数,C语言中math.h库中的常用函数
C语言中math.h库中的常用函数 int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fa ...
- php spl函数,PHP SPL标准库中的常用函数介绍
这篇文章主要介绍了PHP SPL标准库中的常用函数介绍,本文着重讲解了spl_autoload_extensions().spl_autoload_register().spl_autoload()三 ...
- json pandas 内存溢出_pandas中的常用函数
Pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. 近年随着大数据时代的到来,产生 ...
- [C++基础]队列queue中的常用函数
[C++基础]队列queue中的常用函数 本博客转载自:https://www.cnblogs.com/xuning/p/3321733.html 在C++中只要#include即可使用队列类,其中在 ...
- Makefile中的常用函数——wildcard,patsubst,filter
Makefile中的常用函数 wildcard 提取文件用 #拿到DIR指定目录的所有文件 SRC = $(wildcard $(DIR)) #拿到当前文件夹下的 *.cpp 文件 src=$(wil ...
- mysqlsql常用函数_MySQL中的常用函数
在MySQL中,函数不仅可以出现在select语句及其子句中,而且还可以出现在update.delete语句中. 常用的函数有: 1. 字符串函数:主要用于处理字符串. 2. 数值函数:主要用于处理数 ...
- mysql中常用的sql函数_Mysql中的常用函数:
Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...
- MATLAB中的常用函数小结
1. MATLAB中的常用函数小结 文章目录 1. MATLAB中的常用函数小结 1. MATLAB图像处理工具箱 1.1 图像显示 1.2 图像文件输入/输出 1.3. 图像像素值及其统计 1.4 ...
- OpenMP中的一些函数
不断更新,最后更新时间:2022.10.15 OpenMP中的一些函数 MPI_Allreduce函数.规约函数:组合(规约,将所有的发送信息进行同一个操作)所有进程的值并将结果分发回所有进程(原文说 ...
最新文章
- 调试Linux内核操作指南(withing kgdb)
- ssh遇到port 22:No route to host问题的解决方法
- 自动化测试之alert弹窗的切换
- 汉恩互联「绘动画室」,触摸背景墙
- bootstrap-代码-内联代码
- Java远程通讯技术及原理分析
- java map清除值为null的元素_Java中的集合框架大总结
- Python+matplotlib一笔绘制红色五角星
- sql server 面试_SQL Server审核面试问题
- [VB]BMP转JPG
- Atitit.ide代码块折叠插件 eclipse
- JML 规格设计分析
- tomcat介绍-通俗易懂篇
- 营养学和计算机交叉,营养配餐系统综述
- cnpm 新版本替换,及randomUUID is not a function问题解决
- php汉字转为拼音方法一
- 计算工资、劳务税前或税后收入的JS代码(ES6)
- 突破单点瓶颈、挑战海量离线任务,Apache Dolphinscheduler在生鲜电商领域的落地实践
- WordPress网站利用WP2PCS-SY插件定时、增量网站备份至百度网盘
- 如何基于知识图谱技术构建现代搜索引擎系统、智能问答系统、智能推荐系统?