openMP学习开发笔记

本文是关于OpenMP的学习笔记,介绍了Parallel指令、For循环并行、Sections/Section指令的使用,以及private子句、default子句和任务调度的概念。OpenMP作为一种操作级并行框架,通过多线程提升程序性能,适用于多核处理器环境。文章强调了在使用section和任务调度时要注意负载均衡,以充分利用计算资源。
摘要由CSDN通过智能技术生成

最近用到openMp,于是查了些资料,了解了一下,一些笔记如下,分享出来,如有不当之处,还望给出指正。

openMP是一种操作级并行的框架,它可以利用多线程来增强程序的性能。

可以对 For循环,或者几个语句Sections块进行并行。

openMP是一个跨平台的框架,已经被内置到很多IDE种,如VS2017。

函数级别的并行,可能还是得用Thread来进行。

(使用前提: 是计算机具有多个核心)


目录

Parallel指令的用法:

For指令的用法:

Sections/Section指令的用法:

private 子句:

default 子句:

任务调度:


Ref: https://www.cnblogs.com/lpxblog/p/5190438.html


Parallel指令的用法:

parallel指令是用来为一段代码创建多个线程来执行它的。parallel块中的每行代码都被多个线程重复执行。

Fork/Join的方式,创建的线程之间是相互并行的,但是被创建的线程和主线程之间是“串行”的关系。


For指令的用法:

for指令要和parallel指令结合起来才有效果,要么是连着的parallel for指令,要么就是for指令包含在parallel代码块中、


Sections/Section指令的用法:

section语句是用在sections语句里用来将sections语句里的代码划分成几个不同的段,每段都并行执行。

#pragma omp [parallel] sections [子句]

{

#pragma omp section

{

代码块

}

}

使用section语句时,需要注意保证各个section里的代码执行时间相差不大,否则就达不到并行的效果了。


private 子句:

private子句用于将一个或多个变量声明成线程私有的变量,变量声明成私有变量后,指定每个线程都有它自己的变量私有副本,其他线程无法访问私有副本。即使在并行区域外有同名的共享变量,共享变量在并行区域内不起任何作用,并且并行区域内不会操作到外面的共享变量。


default 子句:

用法:

default(shared | none)

使用shared时,默认被传入并行区域的同名变量被当做共享变量处理,不会产生线程私有副本,除非使用private显式指定。

如果使用none作为参数,则线程中用到的变量必须显式指定其是共享的还是私有的。


任务调度:

OpenMP中,任务调度主要用于并行的for循环中,当循环中每次迭代的计算量不相等时,如果简单的给各个线程分配同样次数的迭代的话,会造成各个线程的计算负载不均衡,这会使得有些线程先执行完,有些后执行完,造成某些CPU核空闲,影响程序性能。

在OpenMP中,对for循环并行化的任务调度使用schedule子句来实现

Schedule子句功能——for循环并行化的任务调度

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值