【计组】入门篇 --《深入浅出计算机组成原理》

news2024/11/16 13:39:58

 课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 


目录

一、为什么需要学习计算机组成原理

二、冯·诺依曼体系结构:计算机组成的金字塔

1、计算机的基本硬件组成

2、冯·诺依曼体系结构

三、通过CPU主频谈性能

1、什么是性能

2、计算机的计时单位:CPU时钟

3、优化计算机性能的三条康庄大道

四、穿越功耗墙,我们该从哪些方面提升“性能”?

1、功耗:CPU的极限

2、并行优化,阿姆达尔定律

 

一、为什么需要学习计算机组成原理

计算机组成原理隔离了软件和硬件,提供了让软件无需关心硬件,就能直接操作硬件的接口。也就是说,你只需要对硬件有原理性的理解,就可以信赖硬件的可靠性,安安心心用高级语言来写程序。无论是写操作系统和编译器这样的硬核代码,还是写 Web 应用和手机 App 这样的应用层代码,你都可以做到心里有底。

二、冯·诺依曼体系结构:计算机组成的金字塔

1、计算机的基本硬件组成

首先要有三大件:CPU、内存和主板

 CPU:计算机最重要的核心配件,全名叫中央处理器(Central Processing Unit),计算机的所有“计算”都是由 CPU 来进行的

内存(Memory):撰写的程序、打开的浏览器等,都要加载到内存里才能运行。程序读取的数据、计算得到的结果,也都要放在内存里。内存越大,能加载的东西自然也就越多。

主板:一个有着各种各样,有时候多达数十乃至上百个插槽的配件。我们的 CPU 要插在主板上,内存也要插在主板上。主板的芯片组(Chipset)和总线(Bus)解决了 CPU 和内存之间通信的问题。芯片组控制了数据传输的流转,也就是数据从哪里到哪里的问题。总线则是实际数据传输的高速公路。因此,总线速度(Bus Speed)决定了数据能传输得多快。

有了三大件,只要配上电源供电,计算机差不多就可以跑起来了,加上各类I/O设备、配上硬盘进行数据持久化,还可以装一个机箱,配上风扇,解决灰尘和散热的问题。不过机箱和风扇,算不上是计算机的必备硬件。

还有一个特殊的设备——显卡。显卡之所以特殊,是因为显卡里有除了 CPU 之外的另一个“处理器”,也就是 GPU(Graphics Processing Unit,图形处理器),GPU 一样可以做各种“计算”的工作。

鼠标、键盘以及硬盘,这些都是插在主板上的。作为外部 I/O 设备,它们是通过主板上的南桥(SouthBridge)芯片组,来控制和 CPU 之间的通信的。

北桥芯片组的主要功能是控制内存,现在,北桥的工作已经移到CPU的内部,不存在于主板上了。

2、冯·诺依曼体系结构

首先要包含一个算术逻辑单元(Arithmetic Logic Unit, ALU)和处理器寄存器(Processor Register)的处理器单元(Processing Unit),用来完成各种算术和逻辑运算。

要有一个包含指令寄存器(Instruction Register)和程序计数器(Program Counter)的控制器单元,用来控制程序流程

接着是存储数据(data)和指令(Instruction)的内存,以及更大容量的外部存储(现在通常是硬盘)

最后是输入和输出设备以及对应的输入和输出机制

任何一台计算机的任何一个部件都可以回归到运算器、控制器、存储器、输入和输出设备中,而所有现代计算机也都是基于这个基础架构来设计开发的。

可以说,冯·诺依曼体系结构确立了我们现在每天使用的计算机硬件的基础架构。因此,学习计算机组成原理,其实就是学习和拆解冯·诺依曼体系结构,就是学习控制器、运算器的工作原理,也就是 CPU 是怎么工作的,以及为何这样设计;学习内存的工作原理,从最基本的电路,到上层抽象给到 CPU 乃至应用程序的接口是怎样的;学习 CPU 是怎么和输入设备、输出设备打交道的。学习组成原理,就是在理解从控制器、运算器、存储器、输入设备以及输出设备,从电路这样的硬件,到最终开放给软件的接口,是怎么运作的,为什么要设计成这样,以及在软件开发层面怎么尽可能用好它。

三、通过CPU主频谈性能

1、什么是性能

性能就是时间的倒数

性能=1/响应时间

衡量计算机性能的标准中主要有两个指标:

一是响应时间,也叫执行时间;二是吞吐率(Throughput)或者带宽(BandWidth)

2、计算机的计时单位:CPU时钟

用时间来衡量计算机的性能有两个问题:

一是时间不准。计算机可能同时运行着好多个程序,CPU实际上不停地在各个程序之间切换;而且,有的程序在运行的时候,可能要从网络、硬盘去读取数据,要等网络和硬盘把数据读出来,给到内存和CPU;所以说,要想准确统计某个程序运行时间,进而去比较两个程序的实际性能,我们得把这些时间给刨除掉。

Linux 下有一个叫 time 的命令,可以帮我们统计出来,同样的 Wall Clock Time 下,程序实际在 CPU 上到底花了多少时间。

它会返回三个值:

  • real time,也就是我们说的 Wall Clock Time,也就是运行程序整个过程中流逝掉的时间;
  • user time,也就是 CPU 在运行你的程序,在用户态运行指令的时间;
  • sys time,是 CPU 在运行你的程序,在操作系统内核里运行指令的时间。

而程序实际花费的 CPU 执行时间(CPU Time),就是 user time 加上 sys time。

 

备注:你最好在云平台上,找一台 1 CPU 的机器来跑这个命令,在多 CPU 的机器上,seq 和 wc 两个命令可能分配到不同的 CPU 上,我们拿到的 user time 和 sys time 是两个 CPU 上花费的时间之和,可能会导致 real time 可能会小于 user time+sys time。

二是即使拿到了CPU时间,也不一定可以比较出程序之间性能的差异,因为就算在同一台计算机上,CPU可能满载运行,也可能降频运行;

除CPU外,时间这个性能指标还会受到主板、内存这些其他相关硬件的影响,所以,需要对“时间”这个指标进行拆解——

程序的CPU执行时间=CPU时钟周期数(CPU Cycles)* 时钟周期时间(Clock Cycle)

对于CPU的时钟周期数还可以再做一个分解——

程序的CPU执行时间=指令数 * CPI(每条指令的平均时钟周期数)* 时钟周期时间

时钟周期时间:就是计算机的主频,取决于计算机硬件

CPI:每一条指令需要多少CPU Cycle(越少越优)

指令数:代表执行我们的程序需要多少指令

3、优化计算机性能的三条康庄大道

提升计算机主频

优化 CPU 设计使得在单个时钟周期内能够执行更多指令

通过编译器来减少需要的指令数。

四、穿越功耗墙,我们该从哪些方面提升“性能”?

1、功耗:CPU的极限

CPU一般都被叫做超大规模集成电路,这些电路实际上都是一个个晶体管组合而成的,就是让晶体管里的“开关”不断地去打开合关闭,来组合完成各种运算合功能。

想要计算得快,一方面,要在CPU里面,同样的面积里面,多放一些晶体管,也就是增加密度,另一方面,要让晶体管打开合关闭地快一点,也就是提升主频,这两者都会增加功耗,带来耗电合散热问题。因此,在 CPU 里面,能够放下的晶体管数量和晶体管的“开关”频率也都是有限的。

增加晶体管可以增加硬件能够支持的指令数量,增加数字通路的位数,以及利用好电路天然的并行性,从硬件层面更好地实现特定的指令。

一个CPU的功率,可以表示为:功耗~=1/2*负载电容*电压的平方*开关频率*晶体管数量

功耗增加太多会导致CPU散热跟不上,这时就需要降低电压。

(电压太低会导致电路无法联通,因为不管用什么作为电路材料,都是有电阻的,所以没办法无限制降低电压,另一方面,电压过低对工艺的要求也更高,成本也更贵)

2、并行优化,阿姆达尔定律

我们现在用的 2 核、4 核,乃至 8 核的 CPU就是通过并行提高性能。

能通过并行提高性能的问题,通常满足以下几个条件:

  • 第一,需要进行的计算,本身可以分解成几个可以并行的任务
  • 第二,需要能够分解好问题,并确保几个结果能够汇总到一起
  • 第三,在“汇总”这个阶段,是没有办法并行进行的,还是得顺序执行,一步一步来

阿姆达尔定律(Amdahl’s Law)说的是,对一个程序进行优化之后,处理器并行运算之后效率提升的情况,具体可以用这样一个公式来表示:

优化后的执行时间=受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间

然而无论是简单地通过提升主频,还是增加更多的 CPU 核心数量,通过并行来提升性能,都会遇到相应的瓶颈。

在摩尔定律合并行计算之外,整个计算机组成层面,还有这样几个原则性的性能提升方法:

  • 加速大概率事件
  • 通过流水线提高性能
  • 通过预测提高性能

课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 

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

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

相关文章

【微信早安定时推送消息】微信公众号定时推送早安消息 带天气、纪念日、生日、定时推送等(完整代码)

我挥舞着键盘和本子,发誓要把世界写个明明白白。 简介 利用所学知识给他/她一个惊喜,是作为计算机专业的你最大的乐趣。 无计算机基础,5分钟即设置好 (定时推送 及 最新版 将在下期带来) 获取完整代码,关注…

性能测试怎么做?性能测试重点和各项性能测试流程(超级详细)

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 性能测试基础 1&am…

【设计模式】过滤器模式(Filter Pattern)

过滤器模式属于结构型模式,但它并不属于我们常说的二十三种设计模式。主要是以相对解耦的方式来过滤一组对象。 文章目录过滤器模式的介绍优点应用场景过滤器模式的使用类图实现方法第一步,创建员工类第二步,创建过滤器接口第三步&#xff0c…

如何部署商城项目

如何部署商城项目 1.导入数据库 ​ 注意:先保证数据库开启了远程访问(见数据库安装和配置笔记)。 1.1设置数据库服务器编码 ​ vi /etc/my.cnf ​ 在[mysqld]下面添加 character_set_serverutf8 init_connectSET NAMES utf81.2打开本地…

RK3399平台开发系列讲解(中断篇)中断控制器(Generic Interrupt Controller)

🚀返回专栏总目录 文章目录 一、GIC硬件的实现形态二、主要的功能块三、中断类型四、中断状态沉淀、分享、成长,让自己和他人都能有所收获!😄 📢外围设备不是把中断请求直接发给处理器,而是发给中断控制器,由中断控制器转发给处理器。ARM公司提供了一种标准的中断控制…

NR CSI(二) the workflow of CSI report

微信同步更新欢迎关注同名modem协议笔记 本篇内容是对CSI report相关流程的整理,其描述主要集中在R16 38.331 38.321 38.214中,以实网中的一个配置开始,看下相关定义。 如上图实网中的配置,CSI-ReportConfig 对应的就是Reporting…

Cookie和Session的工作流程是什么样的?5min学懂:简易用户登录(前端+后端+数据库)

目录 前言 一、Cookie 1.1、Cookie从哪里来? 1.2、Cookie到哪里去? 二、Session 2.1、什么是sessionId? 三、Cookie和Session的区别 四、Cookie和Session的具体工作流程 五、代码实现用户登录 5.1、核心方法 5.2、代码 前言 想要了解Cookie和…

【设计模式】桥接模式(Bridge Pattern)

桥接模式属于结构型模式,主要解决因业务增长时滥用继承而导致的**“类爆炸”问题。桥接模式将一个树型的整体继承结构替换为由抽象的类(抽象化角色)组成的抽象部分和由实现接口(实现化角色)与实现类(具体实…

无法访问mybatis.dto.StudengInVO-使用maven编译报错

一、问题由来 最近一次拉代码后,合并代码然后进行编译时出现一个问题,使用maven在进行编译的时候报一个错,无法访问mybatis.dto.StudengInVO。 突然出现这个错误让自己感觉很奇怪,开发工具已经使用了好几个月,项目也已…

SSM毕设项目 - 基于SSM的汉服文化平台网站(含源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.3 系统结构设计4 项目获取1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品,【基于SSM的汉服文化…

(十三)Spring之JdbcTemplate

文章目录环境新增、删除与修改数据新增修改删除查询一个查询一个对象查询一个值查询多个对象批量操作批量添加批量修改批量删除使用回调函数使用德鲁伊连接池上一篇:(十二)Spring IoC注解式开发JdbcTemplate是Spring提供的一个JDBC模板类&…

高阶数据结构:二叉搜索树

本篇主要是在初级数据结构中介绍的二叉树的提升,了解二叉搜索树的特性。 文章目录 一、二叉搜索树的概念二、二叉搜索树操作 1、二叉搜索树的查找2、二叉搜索树的插入3、二叉搜索树的删除三、二叉搜索树的实现四、二叉搜索树的应用五、关于二叉树进阶面试题一、二叉…

大衣哥又有喜事了,孟文豪新作《克什克腾的眼泪》,是给他写的吗

农民歌唱家大衣哥又出新歌啦! 就在大衣哥被谷传民起诉不久,互联网上面又传出新消息,继《火火的情怀》之后,大衣哥的新歌《新时代的新农民》,又要和大家见面了。很多人不明白,大衣哥不过是一个农民歌唱家&am…

Java中的反射,枚举和Lambda表达式

一. 反射 1. 反射的概述 2. 反射的使用 反射常用的类 通过反射获取Class对象 获得Class类相关的方法 使用反射创建实例对象 使用反射获取实例对象中的构造方法 通过反射获取实例对象的属性 通过反射获取实例对象的方法 3. 反射的优缺点 二. 枚举 1…

Graalvm 安装和静态编译

文章目录1、下载2、graalvm安装3、native-image工具安装3.1 安装native-image3.2 安装C编译工具4、java编译成二进制exe4.1、普通的java命令行应用4.2、Swing应用编译4.3、使用maven插件静态编译4.4、javafx应用编译1、下载 文件下载:https://www.graalvm.org/down…

[附源码]计算机毕业设计JAVA剧本杀门店管理系统-

[附源码]计算机毕业设计JAVA剧本杀门店管理系统- 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM myb…

OBS-VirtualCam OBS的虚拟摄像头插件

OBS-VirtualCam 是OBS的一个虚拟摄像头插件,可以将OBS中的内容提供给一个虚拟摄像头,这样其它软件就可以使用这个内容了,这里试试这个插件功能。 1. 下载obs并安装 登录OBS Studio网站,下载windows版, 下载完成后并安装…

栈的基本操作

目录 一、什么是栈? 二、用单链表实现栈 三、用顺序表数组实现栈 一、什么是栈? 栈(stack)是一个先进后出(FILO-First In Last Out)的有序列表。 主要方法:入栈(push)…

SCA算法优化脉冲耦合神经网络的图像自动分割(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

【C语言】初识指针(终篇)

摸了一手秀发,发现还在~ 目录 1、指针运算 1.1指针加减整数 1.2指针减指针 1.3指针关系运算 2、二级指针 3、指针和数组 4、指针数组 前言: 大家好,我是拳击哥。上一期我们讲到了指针类型,指针的访问步长,野指针…