什么是 OpenMP
OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受,用于共享内存并行系统的多处理器程序设计的一套指导性编译处理方案(Compiler Directive) 。
OpenMP支持的编程语言包括C、C++和Fortran;而支持OpenMp的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。
OpenMp提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMp时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。
OpenMP 接口
头文件:#include "omp.h"
函数 | 说明 |
---|---|
omp_set_num_threads | 设置并行线程数量 |
omp_get_num_threads | 获取并行线程数量 |
omp_get_max_threads | 获取最多可以用于并行的线程数量 |
omp_get_thread_num | 获取当前线程序号 |
omp_get_num_procs | 获取程序可用的处理器数量 |
omp_set_dynamic | 设置“零”:关闭线程动态调整,按照程序指定的线程数量创建线程 设置“非零”:启动线程动态调整,按照计算机实际情况创建线程数量 |
omp_get_dynamic | 获取当前动态调整状态,返回“0”或“1” |
omp_in_parallel | |
omp_set_nested | 设置“零”:不允许OpenMP进行嵌套(默认) 设置”非零“:允许OpenMP进行嵌套 |
omp_get_nested | 获取当前是否允许嵌套,返回”0“或”1“ |
omp_init_lock | 初始化互斥锁 |
omp_destroy_lock | 销毁互斥锁 |
omp_set_lock | 获得互斥锁 |
omp_unset_lock | 释放互斥锁 |
omp_test_lock | 尝试获得互斥器,如果获得成功则返回true,否则返回false |
omp_init_nest_lock | 初始化嵌套互斥锁 |
omp_destroy_nest_lock | 销毁嵌套互斥锁 |
omp_set_nest_lock | 获得嵌套互斥锁 |
omp_unset_nest_lock | 释放嵌套互斥锁 |
omp_test_nest_lock | 尝试获得嵌套互斥器,如果获得成功则返回true,否则返回false |
o |