open mp笔记

news2024/12/28 19:38:03

在这里插入图片描述

Open mp在cpu上并行计算,
统一内存访问(OPEN MP pthreads),同一块内存共享多个CPU
非统一内存访问(MPI),每个CPU都有自己对应的内存,通过blus interconnect链接起来,cpu不能直接访问他们的内存,需要进行通信才可以访问到他们所属的memory,
OPEN MP pthreads他们都是针对共享内存编程的API
在这里插入图片描述

哪个线程要指定
Open mp,只加简单的预定义,编译器自动编译并行,

Open mp开始运行时候,有一个master thread 主线程(串行执行的)执行—并行(分开了fork),同步,合并,
在这里插入图片描述
在这里插入图片描述
有一些编译器不支持open mp,加入pragma让编译器暂时不用管这个语言规范
在这里插入图片描述在这里插入图片描述

获取将要派生的线程的数量,在main函数里,strtol可以获取在程序执行时候获得的一些参数

pragma omp parallel num threads(thread_count)

Hello();

并行执行hello();
Pragma用了这个语句表示这个可能在c中是不被接受的
omp parallel,告诉他我们要使用omp的并行化
num threads(thread_count) 我们要并行的数量有多少个

int my_rank = omp_get_thread num();当前我们创建的线程是排第几个,比如一共有4个线程创建的,那么这个可能的取值就是0,1,2,3,也是线程id
int thread count = omp_get_num threads();当前我们创建的线程总数,按着上边的例子就是4
在这里插入图片描述
在这里插入图片描述

openmp for

在这里插入图片描述
在这里插入图片描述

for(int i=0;i<1000;i++)中,线程也是比较均匀分配的,可能,线程0:0-249;线程1:250-499;线程2:500-749;线程3:750-1000
均等分配,同时并行执行的
在这里插入图片描述

比如要用,fibo[i-1],fibo[i-2],他们如果还没计算出来,就不会得到正确的输出,数据依赖会导致结果错误。

OpenMP编译器不检查被parallel for指令并行化的循环所包含的迭代间的依赖关系
个或者更多个迭代结果依赖于其他迭代的循环,一般不能被正确的并行化

openmp private variables

在这里插入图片描述

变量在并行块外定义,也可以在并行中调用
在这里插入图片描述
在这里插入图片描述

对于线程0,可能tmp的值是2,对于线程1,tmp的值为3,1比0慢一点,那么当线程0执行到c[i]的时候此时的结果是3*3,不对应于0线程对应的2的tmp值
在这里插入图片描述
在这里插入图片描述

这样定义了以后,每个线程都有tmp,

关于private的信息

每一个线程都是拥有独自的该变量的副本
如果i被定义为私有变量,那么在for循环里面,所有的线程都不能访问其他(尽管i是共享变量)
所有的线程都不会使用到先前的定义
所有线程都不能给共享的j赋值,(不会改变之前全局定义的j的值)
在循环的入口以及出口,都不会进行定义(私有的j只会在线程内部被定义使用)
在这里插入图片描述

Firstprivate

Firstprivate 选项告诉编译器私有变量在第一个循环会继承共享变量的值这个私有的变量只会在每个线程的第一个循环继承,而不会在每个循环中继承和
其使用方法于private几乎一致
#pragma omp parallel for lastprivate(x)
在这里插入图片描述
在这里插入图片描述

本来这个指针a指向0x1,后边改变一下指向0x2,对原来的值是没有影响的,但是要是修改了0x1指向的空间的值,其他线程也是可以看到这个修改的
在这里插入图片描述

lastprivate

用私有lastprivate 选项告诉编译器私有变量会在最后-个循环出去的时候变量的值替换掉我们共享变量的值
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

parallel语句

在这里插入图片描述

当负责最后一个iteration的线程离开循环的时候它会将该私有变量的值赋值给当前共享变量的值。

只有速度的差异没有代码执行量的差异
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

section选项

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Reduction 归并

在这里插入图片描述

会把每一个线程的j加起来
在这里插入图片描述

j=10+10+20=40
在这里插入图片描述

Barrier

他是用于实现同步的一种手段他会在代码的某个点,令线程停下直到所有的线程都到达该地方
使用的语法如下
#pragmaomp barrier
阻塞在这个语句之前,等所有线程都到了再继续往下执行
许多情况下,它已经能够自动的插入到工作区结尾
比如说在for,single
但是它能够被nowait禁用
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双11消费遇冷?如何让消费回归心智原点

近一年来&#xff0c;小红书话题「重新养育自己」引热议。直面成长缺憾&#xff0c;不少人探寻解决方案&#xff0c;即像对待新生命般&#xff0c;不论是衣食住行还是心灵&#xff0c;重新关照自己。 借此&#xff0c;本期千瓜将锁定小红书热门话题背后的消费观转变&#xff0…

手写数字识别--神经网络实验

实验源码自取&#xff1a; 神经网络实验报告源码.zip - 蓝奏云 上深度学习的课程&#xff0c;老师布置了一个经典的实验报告&#xff0c;我做了好久才搞懂&#xff0c;所以把实验报告放到CSDN保存&#xff0c;自己忘了方便查阅&#xff0c;也为其他人提供借鉴 由于本人是小白…

2023年11月1日,Google全新域名来袭:.ing域名现已问世!

2023年11月1日(Oct31,2023美国与中国时差)Google宣布&#xff0c;正式推出.ing域名&#xff0c;这是一种新的顶级域名&#xff0c;旨在为用户提供更多的选择和创意。.ing域名是由Google和国际互联网名称与数字地址分配机构&#xff08;ICANN&#xff09;合作开发的&#xff0c;…

安全与HTTP协议:为何明文传输数据成为争议焦点?

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、H…

自动驾驶算法(二):A*算法讲解与代码实现

目录 1 A* 算法提出的动机 2 A*算法代码详解 3 A*算法完整代码 1 A* 算法提出的动机 减少收录的珊格树目&#xff0c;增加搜索速度。在Dijkstra算法中&#xff0c;我们考虑收录栅格时我们考虑的是到起点的距离&#xff0c;我们会考虑收录距离起点较近的珊格进行收录。在A*算法…

关于打包css找不到报错

背景&#xff1a;最近公司产品升级为v3项目&#xff0c;打包总是报css缺失 问题&#xff1a;报错提示如下&#xff0c;找不到css 出现原因分析&#xff1a;由于项目比较老&#xff0c;很多人写的&#xff0c;代码风格不统一导致的&#xff0c;比如父组件A使用<style><…

日志数据库写入数据频繁内存占用越来越大

一直写数据&#xff0c;内存越来越高。查看内存占用命令&#xff1a;htop 解决方式&#xff1a;日志数据库的模式改为【简单】 完整会把你的所有操作记录早日志文件&#xff0c;简单就不会

虾总管:16年磨一剑,引领餐饮新现象级潮流

在繁忙的都市生活中&#xff0c;我们常常追求一种简单而美好的生活。美食&#xff0c;则是让我们忘却烦恼&#xff0c;回归初心的一种方式。在河北承德&#xff0c;就有这样一家美食品牌虾总管&#xff0c;用一份鸭虾锅带给无数人美好和喜悦。 16年始终如一&#xff0c;初心不改…

teambition迁移云效

由于TB(行云)停止运营了&#xff0c;可惜了&#xff0c;非常好用的一个工具&#xff0c;项目管理&#xff0c;代码管理&#xff0c;自动化构建等&#xff0c;都支持。现需要切换到云效(https://codeup.aliyun.com/)。这个工作量确实挺大的&#xff0c;像我有N个公司*N个项目的&…

win10 vs2015 构建xp适配

整理中&#xff1a; LIB_CPPFLAGS-D"_WIN32_WINNT0x502"

跨模块边界分配和释放内存

我想&#xff0c;有一条编程铁律已经深深的刻入到你的头脑中了&#xff1a;使用成套的函数来分配和释放内存&#xff0c;例如&#xff0c;如果使用 LocalAlloc 分配内存&#xff0c;则应该使用 LocalFree&#xff0c;类似的例子还有&#xff1a;GlobalAlloc 对应 GlobalFree&am…

手把手教你使用Vue2.0实现动态路由展示

文章目录 VUE2相关组件版本原始菜单数据数据库数据树形数据 前端项目配置静态路由配置路由守卫左侧路由回显代码 使用Vue2实现动态路由展示 思路&#xff1a; 后端返回树形数据根据数据渲染左侧菜单根据数据组装路由数据 注意&#xff1a;本文主要目的讲解是一种思路&#xff0…

47GB水经微图从入门到精通视频教程

本视频教程共47GB&#xff0c;为了方便大家观看&#xff0c;同时录制了横版视频教程和竖版视频教程。 本视频教程的内容主要包括快速入门、地图标注、影像下载、高程下载和矢量下载几部分。 本文将列出所有视频教程所有内容。 快速入门&#xff08;23.1GB&#xff09; 如何…

串口实用解说

我们学习单片机&#xff0c;首先接触的可能是点灯&#xff08;GPIO&#xff09;&#xff0c;再次就是串口&#xff08;UART&#xff09;。 串口是常用的一种通信接口&#xff0c;也是学嵌入式必备掌握的一项知识&#xff0c;但我发现有很多小伙伴只知道用串口输出或者打印一些数…

《windows核心编程》第4章 进程

一、进程基本概念 1、进程&#xff1a;一个进程就是一个正在运行的程序&#xff0c;一个程序可以产生多个进程。进程包含下面两个东西 ● 进程内核对象&#xff1a;一个内核对象被系统用来管理某个进程&#xff0c;内核对象就是代表这个进程。这个内核对象中&#xff0c;还包…

CTS分析思路

目录 原理简介&#xff1a; Cts测试原理&#xff1a; CTS报告与日志目录 CTS报告目录如下​编辑 log查看 举例 原理简介&#xff1a; Cts环境搭建和测试方法&#xff0c;大家可以自行查询网上资料。 Cts测试原理&#xff1a; 输入命令后&#xff0c;会安装一系列的测试…

短视频账号矩阵系统/剪辑/矩阵/无人直播/文案引流爆款

一、 短视频账号矩阵源码开发包含哪几方面&#xff1f; 1. 界面设计&#xff1a;需要根据用户需求&#xff0c;设计出优美简洁的UI界面&#xff0c;使用户可以方便快捷地管理自己的短视频账号。 2. 数据存储&#xff1a;需要将用户的账号信息、数据统计等信息存储在数据库中&a…

pytorch dropout 置零 + 补偿性放缩

一句话概括&#xff1a;&#xff08;训练过程中&#xff09;Dropout 操作 随机置零 非置零元素进行后补偿性放缩。以保证dropout前后数据scale不变。 详细解释(来自chatgpt): 在 PyTorch 中&#xff0c;dropout 的操作不仅仅是将某些元素置零。为了确保期望输出在训练和测试…

WoShop跨境电商商城源码(多语言多货币多商户进出口电商平台)

一、跨境电商商城系统源码包括以下几个部分 前端框架&#xff1a;uni-app,vue 后端框架&#xff1a;ThinkPHP5.wokerman 支付系统&#xff1a;PayPal、USDT等主流支付平台 语言包&#xff1a;跨境电商支持15种语言&#xff0c;后续会增加 前端&#xff1a;包含APP端、小程序端、…

无需数据搬迁,10倍性能提升!携程的统一分析之旅

作者&#xff1a;携程技术中心大数据总监 许鹏 携程自 2022 年起引入了 StarRocks&#xff0c;目前已经成为了集团内部的主要技术栈&#xff0c;应用到酒店、机票、商旅、度假、市场、火车票等多个关键业务线。目前&#xff0c;携程内部已经拥有超过 10 个 StarRocks 集群&…