共享模型之内存(二)

news2024/11/16 13:53:39

1.有序性

1>.JVM会在不影响正确性的前提下调整语句的执行顺序,思考下面一段代码:

static int i;
static int j;
// 在某个线程内执行如下赋值操作
i = ...; 
j = ...;

可以看到,至于是先执行i还是先执行j,对最终的结果不会产生影响.所以,上面代码真正执行时,既可以是:

i = ...; 
j = ...;

也可以是:

j = ...;
i = ...;

这种特性称之为"指令重排",单线程环境下没有问题,但是在多线程环境下"指令重排"会影响正确性.为什么要有重排指令这项优化呢?从CPU执行指令的原理来理解一下吧;

指令重排序的目的是为了实现指令级的并行效果!

2.指令级并行原理

2.1.相关名词

1>.Clock Cycle Time

主频的概念大家接触的比较多,而CPU的Clock Cycle Time(时钟周期时间),等于主频的倒数,意思是CPU能够识别的最小时间单位,比如说4G主频的CPU的Clock Cycle Time就是0.25 ns,作为对比,我们墙上挂钟的Cycle Time是1s;

例如,运行一条加法指令一般需要一个时钟周期时间;

2>.CPI

有的指令需要更多的时钟周期时间,所以引出了CPI(Cycles Per Instruction)指令平均时钟周期数(/多少个时钟周期);

3>.IPC

IPC(Instruction Per Clock Cycle)即CPI的倒数,表示每个时钟周期能够运行的指令数;

4>.CPU执行时间

程序的CPU执行时间,即我们前面提到的user + system时间.可以用下面的公式来表示:
程序CPU执行时间 = 指令数 * CPI * Clock Cycle Time

2.2.鱼罐头的故事

加工一条鱼需要50分钟,只能一条鱼、一条鱼顺序加工…
在这里插入图片描述
可以将每个鱼罐头的加工流程细分为5个步骤:

去鳞清洗 10分钟
蒸煮沥水 10分钟
加注汤料 10分钟
杀菌出锅 10分钟
真空封罐 10分钟

优化:

在这里插入图片描述
即使只有一个工人,最理想的情况是: 他能够在10分钟内同时做好这5件事,因为对第一条鱼的真空装罐,不会影响对第二条鱼的杀菌出锅…

2.3.指令重排序优化

事实上,现代处理器会设计为一个时钟周期完成一条执行时间最长的CPU指令.为什么这么做呢?可以想到指令还可以再划分成一个个更小的阶段,例如,每条指令都可以分为:{取指令 - 指令译码 - 执行指令 - 内存访问 - 数据写回}这5个阶段;
在这里插入图片描述

在不改变程序结果的前提下,这些指令的各个阶段可以通过重排序和组合来实现指令级并行,这一技术在80年代中叶到90年代中叶占据了计算架构的重要地位;

提示:分阶段,分工是提升效率的关键!

***注意: 指令重排的前提是,重排指令不能影响结果,例如:

// 可以重排的例子
int a = 10; // 指令1
int b = 20; // 指令2
System.out.println( a + b );

// 不能重排的例子
int a = 10; // 指令1
int b = a - 5; // 指令2

2.4.支持流水线的处理器

1>.现代CPU支持多级指令流水线,例如支持同时执行{取指令 - 指令译码 - 执行指令 - 内存访问 - 数据写回}的处理器,就可以称之为五级指令流水线.这时CPU可以在一个时钟周期内,同时运行五条指令的不同阶段(相当于一条执行时间最长的复杂指令),IPC = 1,本质上,流水线技术并不能缩短单条指令的执行时间,但它变相地提高了指令地吞吐率;

题外话:

奔腾四(Pentium 4)支持高达35级流水线,但由于功耗太高被废弃!在这里插入图片描述

2.5.SuperScalar处理器

1>.大多数处理器包含多个执行单元,并不是所有计算功能都集中在一起,可以再细分为整数运算单元、浮点数运算单元等,这样多条指令也可以做到并行获取、译码等,CPU可以在一个时钟周期内执行多于一条指令,IPC > 1;
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

mysql:日志,redo,undo,为什么使用日志?

mysql日志 mysql事务的隔离性是通过锁来实现的 而原子性,一致性,持久性就是通过日志来实现的。 REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持 久性。 UNDO LOG 称为 回滚日志 …

凑个小热闹:python采集《狂飙》评论

前言 昨晚,2023年首部爆款剧集《狂飙》迎来大结局,一度冲上热搜第一 “是非面前稍不留神,就会步入万丈深渊,唯有坚守信仰,才能守得初心” 面对这么多广大网友的讨论,我也来凑上一个热闹 用python采集一下…

Mybatis框架(三)深入Mybatis之Mybatis注解开发与分页的实现

本文是本人专栏【Java开发后端系列框架】里的文章,文章根据各框架官网与网上资料加上本人工作经验,进行修改总结发布在这个专栏,主要目的是用于自我提升,不用于获取利益。如果系列文章能到帮到您本人将感到荣幸,如果有…

docker学习(四):DockerFile微服务实战及docker端口映射

文章目录前言1.Dockerfile介绍2.微服务实战案例3.docker端口映射3.1查看docker网络模式命令3.2docker网络模式前言 大家好,这是我学习docker系列的笔记文章,目标是掌握docker,为后续学习K8s做准备。本文记录了springBoot微服务项目通过DockerFile生成镜…

基于Android的租车app

需求信息: 1.用户中心 进行登陆注销、修改信息、修改密码、上传用户信息:身份证、驾驶证等,并提供基本的验证真伪功能。2.租车交易 用户可以查看可以根据条件查看可以租用的汽车车辆信,息。完成租用车辆功能,(包括登记汽车使用的位置范围) 车…

基于数字孪生的智慧电网3D可视化运维系统

十四五规划提出:“加快推动数字产业化,培育壮大人工智能、大数据、区块链、云计算、网络安全等新兴数字产业”,这是深化电网领域以新能源为主体的国家新型电力系统战略。建设背景在2020年的联合国气候峰会上,我国正式提出了“3060…

听说,这届飞桨社区的框架贡献者真的很“卷”

飞桨平台的快速发展,与开源开放密不可分。飞桨框架建设并非只靠百度工程师,也离不开热爱飞桨、热爱开源的开发者们,他们用自己的方式参与飞桨框架建设,与飞桨共同成长。 为了鼓励更多的开发者参与到飞桨社区的开源建设中&#xff…

前端利器——炫酷的CodePen

前言众所周知,前端是一个很容易将自己的劳动成果呈现出来的一个职位,无论是写1行代码还是写100行代码,都可以通过页面来进行呈现,在工作中的劳作成果也是可以一眼就呈现给客户、用户的。比如一些精美的页面,炫酷的特效…

C++智能指针auto_ptr、unique_ptr、shared_ptr、weak_prt详解

目录 一.为什么要使用智能指针 二.auto_ptr 三.unique_ptr 四.shared_ptr 五.weak_ptr 智能指针均定义在头文件<memory>中&#xff1a; #include<memory> 同时每种智能指针都是以类模板的方式实现 一.为什么要使用智能指针 C的内存管理中&#xff0c;每当…

如何使用ArcGIS拼接栅格

1、概述数据的来源是多种多样的&#xff0c;特别是从网上下载的各种数据往往是分块的数据&#xff0c;在使用的时候需要进行数据的拼接&#xff0c;这里为大家介绍一下ArcGIS进行栅格拼接的方法&#xff0c;希望能对你有所帮助。2、直接拼接在ArcToolbox中点击“数据管理工具\栅…

某书x-s和web_session

开工发现某书web更新了,目前笔记信息接口: /api/sns/web/v1/feed 请求时headers中需要x-s、x-t,cookie中需要有web_session。 文章目录 web_sessionX-SJS代码Python代码web_session web_session和当前环境绑定,重新注册后浏览器中的ID也会更新。 其主要依赖的参数是webI…

WebDAV之葫芦儿·派盘 +Polaris Office

Polaris Office 支持WebDAV方式连接葫芦儿派盘。 推荐一款可以实现在Windows桌面PC,Mac,Android设备和iOS设备上同步的移动办公软件,还支持通过WebDAV添加葫芦儿派盘。 Polaris Office是一款功能全面的办公自动化套件,软件集成了

vue 动态组件component

这篇文章主要介绍了 vue 动态组件component &#xff0c;vue提供了一个内置的<component>,专门用来实现动态组件的渲染&#xff0c;这个标签就相当于一个占位符&#xff0c;需要使用is属性指定绑定的组件&#xff0c;想了解更多详细内容的小伙伴请参考下面文章的具体内容…

ChatGPT小白免费使用教程

本教程介绍chargpt使用教程 :不需要翻墙,不需要注册,也不需要缴纳费用 通过本教程您将会使用chargpt写代码 搜索问题写论文 。 我展示了两个问题 问题一 :用python写一个学生信息管理系统 问题二:用python进行中文分词

【iMessage苹果相册推】CSR邮箱必须与证书分属的AppID相同。 若是您可以在步伐中吸取令牌,则此步伐是成功的。

推荐内容IMESSGAE相关 作者✈️IMEAX推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容3.日历推 *** …

Echarts修改柱状图柱子的宽度

第009个点击查看专栏目录Echarts的柱状图通常我们不去设置柱子的宽度&#xff0c;都是以默认的状态来处理。柱条的宽度&#xff0c;不设时自适应。 series-bar. barWidth 自适应 设定值可以是绝对值例如 10 或者百分数例如 ‘60%’。百分数基于自动计算出的每一类目的宽度。 …

Mac使用Maven出现command not found的问题

问题 Maven一直使用的好好的&#xff0c;但某一天开始突然挂了&#xff0c;出现command not found的问题&#xff08;事后推测可能是在多次修改.bash_profile后导致的误删配置&#xff09; 尝试1&#xff1a;先是问度娘&#xff0c;得到的答案清一色的是添加如下行到.bash_pro…

第九层(11):STL之常用遍历算法

文章目录前情回顾常用算法常用遍历算法for_eachtransform下一座石碑&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;一名大一的智能制造专业学生&#xff0c;在学习C/C的路上会越走越远&#xff0c;后面不定期更新有关C/C语法&#xff0c;数据结构&#xff0c;算法…

Git基本信息和日常操作记录

文章目录一、Git1、干啥的2、Git 与svn 的区别二、Git操作记录注意2.1、配置别名2.2、初始化本地git仓库&#xff08;创建新仓库&#xff09;2.3、配置用户名2.4、配置邮件2.4、clone远程仓库2.5、查看配置2.6、暂存修改撤回2.7、配置 git log 日志快捷命令2.8、git 自定义配置…

一刷代码随想录——二叉树

理论基础【1】分类满二叉树完全二叉树优先级队列其实是一个堆&#xff0c;堆就是一棵完全二叉树&#xff0c;同时保证父子节点的顺序关系。二叉搜素树二叉搜索树是有数值的&#xff0c;二叉搜索树是一个有序树。平衡二叉搜素树&#xff08;AVL&#xff09;C中map、set、multima…