C++ OpenMp的并行编程
基于OpenMp的并行编程
功能:并行处理比较耗时的for循环
在OpenMP中,对for循环并行化的任务调度使用schedule子句来实现:
使用格式:schedule(type[,size])
type参数表示调度类型:static、dynamic、guided
size参数(可选):分配给每个线程的连续迭代计算的次数
静态调度(static)
大部分编译器在没有使用schedule子句的时候,默认是static调度。static在编译的时候就已经确定了,那些循环由哪些线程执行。
当不使用size 时,将给每个线程分配┌N/t┐个迭代。当使用size时,将每次给线程分配size次迭代。
#pragma omp parallel for schedule(static)
//#pragma omp parallel for schedule(static,2)
for (int i = 0; i < 10; ++i)
{
printf("i=%d, thread_id=%d\n", i, omp_get_thread_num());
}
动态调度(dynamic)
动态地将迭代分配到各个线程,动态调度可以使用size参数也可以不使用size参数,不使用size参数时是将迭代逐个地分配到各个线程,使用size参数时,每次分配给线程的迭代次数为指定的size次
#pragma omp parallel for schedule(dynamic)
//#pragma omp parallel for schedule(dynamic,2)
for (int i = 0; i < 10; ++i)
{
printf("i=%d, thread_id=%d\n", i, omp_get_thread_num());
}从结果看出:这个调度是逐个将任务分配到每一个核心,然后哪个执行完了就接着分配。如果指定size为2,就会每一次为每一个核心连续分配两个任务
guided调度(guided)
guided调度是一种采用指导性的启发式自调度方法。开始时每个线程会分配到较大的迭代块,之后分配到的迭代块会逐渐递减。迭代块的大小会按指数级下降到指定的size大小,如果没有指定size参数,那么迭代块大小最小会降到1
#pragma omp parallel for schedule(guided)
for (int i = 0; i < 10; ++i)
{
printf("i=%d, thread_id=%d\n", i, omp_get_thread_num());
}
三种运行方式总结:
静态调度static:每次哪些循环由那个线程执行时固定的,编译调试。由于每个线程的任务是固定的,但是可能有的循环任务执行快,有的慢,不能达到最优。
动态调度dynamic:根据线程的执行快慢,已经完成任务的线程会自动请求新的任务或者任务块,每次领取的任务块是固定的。
启发式调度guided:每个任务分配的任务是先大后小,指数下降。当有大量任务需要循环时,刚开始为线程分配大量任务,最后任务不多时,给每个线程少量任务,可以达到线程任务均衡。
open MP 与串行执行 对比:
https://www.cnblogs.com/mfryf/p/6863089.html
四种调度方式实例: dynamic、guided、runtime、static
https://blog.csdn.net/billbliss/article/details/44131919
C++ OpenMp的并行编程的更多相关文章
- 【并行计算】基于OpenMP的并行编程
我们目前的计算机都是基于冯偌伊曼结构的,在MIMD作为主要研究对象的系统中,分为两种类型:共享内存系统和分布式内存系统,之前我们介绍的基于MPI方式的并行计算编程是属于分布式内存系统的方式,现在我们研 ...
- 使用openmp进行并行编程
预处理指令pragma 在系统中加入预处理器指令一般是用来允许不是基本c语言规范部分的行为.不支持pragma的编译器会忽略pragma指令提示的那些语句,这样就允许使用pragma的程序在不支持它们 ...
- OpenMP共享内存并行编程详解
实验平台:win7, VS2010 1. 介绍 平行计算机可以简单分为共享内存和分布式内存,共享内存就是多个核心共享一个内存,目前的PC就是这类(不管是只有一个多核CPU还是可以插多个CPU,它们都有 ...
- OpenMP并行编程
什么是OpenMP?“OpenMP (Open Multi-Processing) is an application programming interface (API) that support ...
- OpenMP并行编程应用—加速OpenCV图像拼接算法
OpenMP是一种应用于多处理器程序设计的并行编程处理方案,它提供了对于并行编程的高层抽象.仅仅须要在程序中加入简单的指令,就能够编写高效的并行程序,而不用关心详细的并行实现细节.减少了并行编程的难度 ...
- OpenMP 并行编程
OpenMP 并行编程 最近开始学习并行编程,目的是为了提高图像处理的运行速度,用的是VS2012自带的OpenMP. 如何让自己的编译器支持OpenMP: 1) 点击 项目属性页 2)点击 配置 3 ...
- 并行编程OpenMP基础及简单示例
OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...
- 在C++中使用openmp进行多线程编程
在C++中使用openmp进行多线程编程 一.前言 多线程在实际的编程中的重要性不言而喻.对于C++而言,当我们需要使用多线程时,可以使用boost::thread库或者自从C++ 11开始支持的st ...
- C#并行编程系列-文章导航
菜鸟初步学习,不对的地方请大神指教,参考<C#并行编程高级教程.pdf> 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C# ...
随机推荐
- Shell学习之结合正则表达式与通配符的使用(五)
Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...
- 浅谈solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http Get操 ...
- 001.CDN概述
一 互联网应用质量概述 1.1 互联网应用质量 互联网应用质量指标--QoE,其主要指标: 服务成功率:指用户所请求的服务成功完成的几率. 服务建立时间:指从服务请求到服务呈现所花费的时间,并且会因为 ...
- Linux系统开发之路 - 下
5.Ubuntu安装好之后,就可以进行开发环境的搭建.(坚持看完有彩蛋,(>--..--<).jpg). 1)首先安装Nodejs和Npm. 打开浏览器输入nodejs.org,进入页面会 ...
- groupadd 创建组
groupadd 创建组 1 注意 :root用户才有权使用这个命令 2 groupadd -g 744 cjh 指定组ID号 3 在/etc/passwd 产生一个 组ID GID gpasswd ...
- 谈谈《Dotnet core结合jquery的前后端加密解密密码密文传输的实现》一文中后端解密失败的原因
详情请看<Dotnet core结合jquery的前后端加密解密密码密文传输的实现>,正常来讲,这个博客里面的代码是没有问题的,但是我有时候却会直接报错,原因是后台解密失败:Interna ...
- Wan Android 项目总结
Wan Android 项目总结 项目的由来 这个项目也算是自己学习了一段时间的Android以后的一个总结和学习吧,项目采用了Kotlin语言,Api采用的hongyang大神的WanAndroid ...
- SQL 并联更新
UPDATE o SET col2 = c.col3 FROM bo1 AS o JOIN bo2 AS c ON c.col3<>'' WHERE c.col3<>'' UP ...
- C# LnkHelper
using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; using Syst ...
- BZOJ.4513.[SDOI2016]储能表(数位DP)
BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...