中央处理器CPU中的技术

news2024/9/24 18:05:23

1 知识加油站

1.1 cpu 指令的执行过程

  • 取指:cpu 获取 程序计数器 中存放的指令地址。读取内存中此地址对应指令并存入指令寄存器
  • 译码:指令译码器,解析指令
  • 运行:算数逻辑单元计算
  • 回写:将执行结果写入对应位置

2. cpu中的技术与进化

  • 最先的cpu运行时只能顺序执行指令。意思是只有一条指令从取指到回写执行完毕才可以执行下一条指令。可以明显看到cpu在“摸鱼”,整个指令周期内只有一条指令被执行。弊端在于资源浪费,指令周期内有三个步骤处于等待空闲状态;
  • 然后cpu为了应对这种情况做了这样一个事来提高cpu利用率:指令流水线系统,也叫作指令预处理。顾名思义就是提前处理下一条指令,这样每个部件都可以同时并发运行,如下图:
    流水线
    • 假如顺序执行中每个步骤耗时 1ns,那么处理100条指令需要多久?4 * 4 = 16 ns
    • 假如在流水线中每个步骤耗时 1ns,那么处理4条指令需要多久?4 + (3 * 1)=7 ns
    • 假如在流水线拆分更细,4个步骤变为8个步骤,每个步骤耗时 0.5ns,那么处理4条指令需要多久?4 + (3 * 0.5)= 5.5 ns
    • 所以是不是意味着将流水线拆分的足够细足够多,那么就会运行的足够快呢?但实际上当拆分的足够多时反而会降低运行速度,猜猜为什么?
    • 流水线拆分越深越细,需要的电路越多,同时流水线中数据传递也需要耗时,而且还会带来功耗的增加。综合这些问题反而会导致性能的下降。所以流水线的深度级数只能找一个相对的平衡点
  • 使用流水线技术后,实际上并不能完全按照预期运行,因为如果同时有多个流水线模块访问内存时只能阻塞等待「结构冒险:硬件的资源竞争」;而且当一些指令依赖其他指令的结果时,也只能停下来等待「数据冒险:指令依赖其他指令的结果」;更要命的是,遇到分支的情况时并不能预测到下个分支运行哪个指令「控制冒险:流水线无法预知处于分支节点的下一条指令」。这些问题被总结为流水线中的冒险问题
  • 再cpu与工艺制程的发展,运行速度也是越来越快,内存读写跟不上了。但是发现当使用某个数据时,大概率上会访问连续的空间(见下方cpp-demo)。所以cpu又搞了一块高速缓冲区「缓存」,这样就使得每条指令和数据都要从内存读取一次,变为读取一块内存数据,在需要读内存时先访问缓存,如果缓存有就直接读缓存,减少内存的访问次数。
for(int index = 0; index < 100; index++)  
	result += data[index];
  • 缓存技术又发展为指令缓存与数据缓存,一级缓存发展到二级三级缓存

  • 同时在多核技术的发展下,出现多核数据不一致的问题。举例来说就是当两核同时执行i++时,本应该得到3,但是由于都从内存读到了i=1,导致两个核都计算完成并回写内存后,最终写入的是2。所以定义了一个叫原子操作的东西,表示这是不可分割的动作,谁要执行原子操作,就在总线上加LOCK#,虽然锁总线可以规避访问冲突,但是锁总线很影响其他的核心来操作内存。

  • 有很多时候数据不都从内存读取,而是从缓存直接拿,因此仍然存在多核缓存数据不一致的问题。所以cpu核心之间牵入一条专线片内总线,还制定了一套规则缓存一致性协议MESI,用来同步缓存数据,具体在此不展开叙述。有了这项技术,再执行原子操作时,再也不需要锁总线了。

  • 乱序执行

  • 动态预测

  • 并行计算

  • 超线程技术

文章持续完善中

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

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

相关文章

如何使用ShellSweep检测特定目录中潜在的webshell文件

关于ShellSweep ShellSweep是一款功能强大的webshell检测工具&#xff0c;该工具使用了PowerShell、Python和Lua语言进行开发&#xff0c;可以帮助广大研究人员在特定目录中检测潜在的webshell文件。 ShellSweep由多个脚本模块组成&#xff0c;能够通过计算文件内容的熵来评估…

xsslabs第四关

测试 "onclick"alert(1) 这与第三关的代码是一样的&#xff0c;但是每一关考的点是不一样的所以我们看一下源代码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;ch…

C++string类讲解

大家好鸭 见字如面&#xff0c;已经有好久没有写文章了&#xff0c;这段时间忙着学习&#xff0c;也忙着玩&#xff0c;所以停更了一段时间 今天让我们来谈一谈关于C中的string类 什么是string类&#xff1f; 在c语言中我们操作字符串往往采用指针&#xff0c;这样的访问方式并…

不看后悔的腾讯云优惠券领取入口指南,2024最新代金券

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

二级医院云HIS系统,云HIS源码,支持分院HIS,集团HIS

云HIS具有可扩展、易共享、易协同、低成本、体验号、更便捷、易维护的优势&#xff0c;重新定义了数字化医院信息系统&#xff0c;实现数字化医院信息系统的转型升级。云 HIS 系统功能完善&#xff0c;涵盖临床各业务部门&#xff0c;采集、抽提、汇总、存贮、展现所有的临床诊…

FL Studio 21.2.3.3586 for Mac中文版新功能介绍及2024年最新更新日志

如果你正计划学习音乐制作&#xff0c;一款强大且易学的音乐制作软件是必不可少的。由于很多小伙伴对音乐制作软件没有实际体验过&#xff0c;到底选择哪一款软件最合适成为当下最纠结的问题。 这里为大家推荐一款功能强大且适合新手小伙伴的音乐编曲软件—FL Studio 21.2.3.35…

[物联网] OneNet 多协议TCP透传

[物联网] OneNet 多协议TCP透传 STM32物联网–ONENET云平台的多协议接入产品创建 : https://blog.csdn.net/qq_44942724/article/details/134492924 Onenet tcp 透传 : https://blog.csdn.net/flyme2010/article/details/107086001 tcp服务端测试工具 : http://tcp.xnkiot.com/…

解决导入项目后在idea中不显示的问题

问题&#xff1a; 今天下午重新打开寒假之前负责的项目&#xff0c;发现打不开了&#xff0c; 从master拉取最新代码到我的分支&#xff0c;发现我的分支上显示就是这样子&#xff0c;无论怎么更新代码都不行。 原因&#xff1a; 在上一次上传代码的时候&#xff0c;我把我分…

YOLOv9改进|使用AKConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 AKConv是一种具有任意数量的参数和任意采样形状的可变卷积核&#xff0c;对不规则特征有更好的提取效果。 RepNCSPELAN4是YOLOv9中的…

JAVA的学习日记

JAVA的学习日记&#xff08;2024.3.1&#xff09;&#xff08;b站韩顺平老师课程学习笔记版&#xff09; ps:捡起忘光光的Java语言 Sublime //1. public是公有&#xff0c;class是类 //2. public class Hello表示Hello是一个类&#xff0c;是一个public公有的类 //3. Hello{…

【框架】MyBatis 框架重点解析

MyBatis 框架重点解析 1. MyBatis 执行流程 会话工厂生产的 SqlSession 对象提供了对数据库执行SQL命令所需的所有方法&#xff0c;包括但不限于以下功能&#xff1a; 数据库操作&#xff1a;SqlSession可以执行查询&#xff08;select&#xff09;、插入&#xff08;insert&a…

桥接模式(Bridge Pattern) C++

上一节&#xff1a;适配器模式&#xff08;Adapter Pattern&#xff09; C 文章目录 0.理论1.组件2.使用场景 1.实践 0.理论 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它的核心思想是将抽象部分与其实现部分分离&#xff0c;使它们可…

liunx安装jdk、redis、nginx

jdk安装 下载jdk,解压。 sudo tar -zxvf /usr/local/jdk-8u321-linux-x64.tar.gz -C /usr/local/ 在/etc/profile文件中的&#xff0c;我们只需要编辑一下&#xff0c;在文件的最后加上java变量的有关配置&#xff08;其他内容不要动&#xff09;。 export JAVA_HOME/usr/l…

操作系统系列学习——多进程图像

文章目录 前言多进程图像 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感谢 【哈工大】…

设置文字之间的间距应该如何实现

设置文字之间的间距&#xff0c;通常指的是字母之间&#xff08;字符间距&#xff09;或单词之间的间距。在CSS中&#xff0c;这可以通过letter-spacing和word-spacing属性来实现。 字符间距&#xff08;letter-spacing&#xff09; letter-spacing属性用于调整字符之间的间距…

【Kotlin】函数

1 常规函数 1.1 无参函数 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有参函数 1&#xff09;常规调用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2&#xff09;形参指定默…

C++:设计包含min 函数的栈

目录 题目 代码实现 输出 题目 定义栈的数据结构&#xff0c;要求添加一个min 函数&#xff0c;能够得到栈的最小元素。 要求函数min、push 以及pop 的时间复杂度都是O(1)。 代码实现 #include <iostream>template<typename T>class stack { public:stack() {…

React富文本编辑器开发(四)

上一节我们做了块级元素的格式操作&#xff0c;这节我们来讲行内元素的相关操作。行内元素的样式一般指 粗体、斜体、代码或 删除线等 。通过前一章的内容得知&#xff0c;元素的渲染是通过渲染器来呈现的&#xff0c;块级元素通过指定 renderElement, 行内元素&#xff08;即内…

vxe-table编辑单元格动态插槽slot的使用

业务场景&#xff1a;表格中只有特定某一行的的单元格可以编辑&#xff0c;列很多&#xff0c;为每个列写个插槽要写很多重复代码&#xff0c;所以这里使用动态插槽&#xff0c;简化代码量。显示编辑图标&#xff0c;点击编辑图标隐藏。失去焦点保存调后台接口。 解决办法&…

【C语言】文件及文件操作详解(fseek,ftell,rwind)

目录 1. 为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 二进制文件和文本文件 4. 文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 文件的打开和关闭 5. 文件的顺序读写 6.文件的随机读写 6.1 fseek 6.2 ft…