openmp 通用核心 学习 2 数据环境—任务-内存模型
目录
openmp 数据环境
子句:
在上述三个子句中也可以传入指针和数组
openmp 任务:
openmp内存模型:
openmp 数据环境
子句:
shared(list)
private(list)//默认构造 值未被初始化
对于图6-5:
//File #1
int tmp;
void danger()
{tmp = 0;#pragma omp parallel private(tmp)work(); printf("%d\n", tmp); // tmp has unspecified value
}// File #2
extern int tmp;
void work()
{tmp = 5;
}
输出5;
当
#include"test6_5.hpp"
#include<iostream>
#include<omp.h>
int tmp;int main(){tmp = 0;#pragma omp parallel private(tmp)work(tmp);std::cout<<tmp;return 0;
}extern int tmp;
void work(int& tmp){tmp = 5;
}
输出0;
当
#include"test6_5.hpp"
#include<iostream>
#include<omp.h>
int tmp;int main(){tmp = 0;#pragma omp parallel private(tmp)work(tmp);std::cout<<tmp;return 0;
}//extern int tmp;
void work(int& tmp){tmp = 5;
}
输出0;
个人理解:extern int tmp 不知道应该使用文件域范围的tmp还是数据环境中私有的tmp所以会出现第一种情况。
firstprivate(list) //copy复制构造
default(none) //如果在构造体上使用default(none),那么所有从遭遇线程传递到区域的变量必须明确地列在private、firstprivate、shared、或reduction子句中,编译器会将没有列出的变量标记为错误。
在上述三个子句中也可以传入指针和数组
具体参考:https://www.openmp.org/spec-html/5.0/openmpsu21.html#:~:text=When%20the%20size%20of%20the%20array%20dimension%20is,the%20lower-bound%20is%20absent%20it%20defaults%20to%200.
openmp 任务:
#pragma omp task //task构造创建一个显式的任务
#pragma omp single //single构造创建一个共享工作构造,与所有的共享工作构造一样,末尾有一个栅栏,可以使用nowait去除栅栏
图7—9:
#pragma omp parallel
{ #pragma omp single{ p = listhead;while (p) { #pragma omp task firstprivate(p) { process (p);} // end of task creationp = p->next;} } // end of single region
} // end of parallel region
#pragma omp single 只允许一个线程创建任务,其他线程虽然在栅栏处等待,但是会处理process()而且此时single线程,不一定运行到了single块最后,可能还在创建线程。
图7-11:
int fib (int n)
{ int x,y;if (n < 2) return n;#pragma omp task shared(x)x = fib(n-1);
#pragma omp task shared(y)y = fib(n-2);
#pragma omp taskwaitreturn (x+y);
}int main()
{ int NW = 30;#pragma omp parallel{ #pragma omp singlefib(NW);}
}
#pragma omp taskwait
使用taskwait强制等待这个点以前的所有兄弟任务和子任务完成,
对于这个程序,为了x,y在每个任务的数据环境之外可用,他们必须被共享。
openmp内存模型:
三个简单的规则来描述openmp通用核心中的内存模型:
1.当混合来自多个线程的共享变量的读写操作时,确保在写入和后续读取之间有一个栅栏(显示栅栏或隐式栅栏)
2.在算法的控制流不支持栅栏的区域内更新共享变量时,要用临界区保护更新
3.不使用变量的值来定义线程之间的排序约束,即使它们是以无竞争的方式更新的。顺序约束在通用核心中是通过栅栏来定义的。
内存一致性规则:
线程使用冲刷来使其变量与内存保持一致。在以下位置隐含了一次冲刷:
1.进入和退出临界区构造;
2.从显式或隐式栅栏中退出
相关文章:
openmp 通用核心 学习 2 数据环境—任务-内存模型
目录 openmp 数据环境 子句: 在上述三个子句中也可以传入指针和数组 openmp 任务: openmp内存模型: openmp 数据环境 子句: shared(list) private(list)//默认构造 值未被初始化 对于图6-5: //File #1 int tm…...
Linux有哪些指令
Linux操作系统提供了许多指令,可以帮助用户进行各种操作。以下是一些常见的Linux指令: ls:列出当前目录下的文件和目录。cd:改变当前工作目录。pwd:显示当前工作目录。mkdir:创建新的目录。rm:…...

图扑 HT for Web 风格属性手册教程
图扑软件明星产品 HT for Web 是一套纯国产化独立自主研发的 2D 和 3D 图形界面可视化引擎。HT for Web(以下简称 HT)图元的样式由其 Style 属性控制,并且不同类型图元的 Style 属性各不相同。为了方便查询和理解图元的 Style 属性࿰…...
oracle 数据库删除序列
oracle 数据库删除序列 要删除 Oracle 数据库中的序列,你可以使用以下的 SQL 命令: DROP SEQUENCE sequence_name;其中,sequence_name 是你想删除的序列的名称。你需要确保当前用户对序列拥有适当的权限。 请注意,删除序列将永…...

JAVA毕业设计098—基于Java+Springboot的在线教育课程视频(源码+数据库)
基于JavaSpringboot的在线教育课程视频(源码数据库)098 一、系统介绍 本系统分为管理员、教师、用户三种角色(角色菜单可自行分配) 用户功能: 注册、登录、课程搜索、视频观看、课程资料发布、资料浏览、用户中心、我的发布、通知信息、密码修改 教师功能&…...

如何在雷电模拟器上安装Magisk并加载movecert模块抓https包(二)
接来下在PC端安装和配置Charles,方法同下面链接,不再赘述。在模拟器上安装magisk实现Charles抓https包(二)_小小爬虾的博客-CSDN博客 一、记录下本机IP和代理端口 二、在手机模拟器上设置代理192.168.31.71:8888,设置…...

基于web的酒店客房管理系统
目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 会员信息管理 客房信息管理 收藏客房管理 用户入住管理 客房清扫管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施…...
linux查看系统信息
Linux查看当前操作系统版本信息 cat /proc/version Linux version 2.6.32-696.el6.x86_64 (mockbuildc1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:05 UTC 2017 Linux查看版本当前操作系统内核信息 uname -a Linux…...

蓝牙官网demo的记录
目录 一、官网蓝牙demo 二、可以参考的博客带蓝牙demo 一、官网蓝牙demo 平常看android官网,发现有两个不同的文档地址: 连接 | Android 开源项目 | Android Open Source Project 蓝牙概览 | Connectivity | Android Developers 蓝牙demo在 …...

Linux相关概念及常见指令
注意:本篇博客除了讲解Linux的相关指令,还穿插着Linux相关概念及原理的讲解。 账号相关指令 whoami:查看当前用户 adduser 用户名: 添加新用户 passwd 用户名:为这个用户设置密码 ls指令 1.Linux中文件的理解 文件是Linux中存储数据的基本单…...
CentOS 系统如何在防火墙开启端口
在 CentOS 上,你可以使用 firewall-cmd 命令来开启防火墙的特定服务或端口。以下是在 CentOS 上开启 3306 端口的步骤: 检查防火墙状态:可以使用以下命令检查防火墙的状态: sudo firewall-cmd --state如果防火墙处于活动状态&…...

2023年电工(初级)证考试题库及电工(初级)试题解析
题库来源:安全生产模拟考试一点通公众号小程序 2023年电工(初级)证考试题库及电工(初级)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局&#…...
vue拦截器是什么,如何使用
Vue拦截器是一种用来拦截并处理HTTP请求和响应的机制,它可以在请求或响应发送前或后进行一些预处理或处理。在Vue中,可以使用axios库来实现拦截器,axios库是一个基于Promise的HTTP客户端,可以用于浏览器和Node.js平台。 使用axio…...

CSS 之 table 表格布局
一、简介 除了使用HTML的<table>元素外,我们还可以通过display: table/inline-table; 设置元素内部的布局类型为表格布局。并结合table-cell、table-row等相关CSS属性值可以实现HTML中<table>系列元素的效果,具有表头、表尾、行、单元格…...

【Kotlin精简】第2章 集合
1 简介 在 Kotlin 中集合主要分为可变集合与只读集合,其中可变集合使用 “Mutable” 前缀 集合类名表示,比如 MutableList、MutableSet、MutableMap 等。而对于只读集合就是和 Java 中集合类名是一致。 Java 中的 List 非 Kotlin 中的 List , 因为 Kot…...

VSCODE+PHP8.2配置踩坑记录
VSCODEPHP8.2配置踩坑记录 – WhiteNights Site 我配置过的最恶心的环境之一:windows上的php。另一个是我centos服务器上的php。 进不了断点 端口配置和xdebug的安装 这个应该是最常见的问题了。从网上下载完php并解压到本地,打开vscode,安装…...
React 状态管理 - Context API 前世今生(下)
New Context API Provider【context的生产者组件】 createContext 创建一个Context对象,订阅了整个Context对象的组件,会从组件树中离自身最近的那个匹配的Provider中读取到当前的context值。Context.Provider 父Context对象返回的Provider组件&#x…...

地下城堡3魂之诗阵容搭配攻略
在地下城堡3魂之诗游戏中,拥有一个合理搭配的阵容非常关键,可以让角色能力发挥最大化。以下是建议的阵容搭配及攻略: 关注【娱乐天梯】,获取内部福利号 1.核心成员(2名) 在阵容中选择两个输出型角色作为核心成员,他们的…...

网工内推 | 技术支持工程师,厂商公司,HCIA即可,有带薪年假
01 华为终端有限公司 招聘岗位:初级技术支持 职责描述: 1、通过远程方式处理华为用户在产品使用过程中各种售后问题; 2、收集并整理消费者声音,提供服务持续优化建议; 3、对服务中发现的热点、难点问题及其他有可能造…...

有 AI,无障碍,AIoT 设备为视障人群提供便利
据世界卫生组织统计,全球共 22 亿人视力受损,包含 2.85 亿视障人群和 3,900 万全盲人群。而且,这一数字将随老龄化加剧不断增加。 虽然视障人群面临着诸多不便,但是针对视障人群的辅助设备却存在成本高、维护困难、操作复杂等问题…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...