OpenMP学习笔记

本文介绍了OpenMP,一个用于共享内存并行系统的编程接口,支持C、C++和Fortran。通过在源代码中添加pragma,程序员可以实现并行化,提高代码执行效率。文章详细讲解了OpenMP接口、在Visual Studio中的配置、用例展示以及效果测试,展示了在矩阵相乘中显著的速度提升。同时,也提到了OpenMP的优缺点,如简化多线程编程、跨平台支持,但也可能导致程序复杂度增加。
摘要由CSDN通过智能技术生成

什么是 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值