【计算机体系结构】指令集体系结构、微体系结构简介

news2024/11/28 8:51:53

1. “虚拟” to “现实”

在这里插入图片描述

首先可以看这张图片,下面的 Physics 所指的是我们的物理世界中看得见摸得到或者是客观存在的事物,而人类希望将自己的工作内容或者需求以某种方式映射到物理层面上,用物理变化带来的影响来完成人类工作内容。例如早期的计算器——算盘先生,通过拨动被赋予数值意义的算珠,完成数值运算。但这是一些简单的工作,那么要完成更加复杂的工作呢?播放视频、计算并生成电子表格、自动化控制一个系统环境运作,这些该工作如何做到映射在物理层面上?这样想想,哇!真是一件够复杂的事情,这两个中间的空白差距太大了。

那么从广义上来讲,计算机体系结构就是构建一个抽象的描述,将问题一层一层转化,并且实现出具体的层级,用来连接这两个层面,填补上中间的这片差距空白。但它的工作不仅仅是这些,计算机体系结构这么复杂当然想要设计出一个尽量不发生改变或者不发生大的变化的结构,那么就将这用来完成桥接的中间内容分层,细化出更加细节的抽象层或其它层级用来解决一个个细小的问题,那么这样就不会因为物理层或者应用层的一点点变化而发生翻天覆地的改变,这样就能重复性的利用设计,将可利用的物理事物转化为人类希望想要的应用。
[注]:这里的解释是笔者概括性的解释,也许有点难理解,或者说笔者的描述不够好,还请见谅!
在这里插入图片描述
这张图是对整个计算机环境的抽象,从上至下的层级表示越往下的被依赖程度越高,越往上则依赖程度越高。即是说上一层依赖于下一层这样的关系。最顶层 Application 描述的是应用程序软件(就是我们平时使用的一些软件程序如:微信、浏览器、WordVisual Studio Code 等等),而下一层则是算法层 Algorithm,应用软件的开发是离不开算法结构的。而算法的实现也是依赖于实现他的编程语言 Programming Language

这些软件能够正常的运行是依赖于有操作系统或者虚拟机环境 (Operating System / Virtual Machine) 提供的资源管理接口,以及控制调度系统来为软件的运行保驾护航,事实上操作系统和虚拟机环境也是软件,但是稍微偏基础一些。

下面的几层我想从下往上来看,物理层 (Pyhsics) 指的是物理世界中根据基本物理定律的物理变化,粒子的运动规律等,器件层 (Devices) 一般指的是晶体管,电路 (Circuits) 指的是利用晶体管搭建出的各种规模的电路,门(逻辑门)(Gates) 指的是利用电路构建出的 “逻辑门”(如,与门、或门、非门等),在往上就到了我们的重点的研究对象寄存器传输层 (RTL--Register-Transfer Level),用寄存器传输级描述语言实现的一层软件层(常见的语言有 VerilogVHDLScala 等),然后往上的微体系结构 (Microarchitecture),来设计出芯片结构,再往上就到了 指令集体系结构 (Instruction Set Architecture),这为软件编程提供了规范。

2. 计算机发展(No 陈述历史)

在这里插入图片描述

这张图展现了上层应用的需求导致中间我们关注的这三层会发生变化,而下面基层的技术水平则会限制着这三层的变化。

在这里插入图片描述
该图片来自于《计算机体系结构:量化研究方法 第 5 版》(《Computer Architecture - A Quantitative Approach 5》),这张图片展示了不同年份的计算机与 1978 年的 AX-11/780 机器的对数折线图,横轴是年份时间线,纵轴的 1、10、100、1000... 是对数尺度,这张图片试图在表达在计算机体系结构中有一些非常基础且关键的东西在推动着整个计算机行业的发展(计算机性能的提升)。

可以看到图中的线条几乎可以看作是一条直线上升,是什么让计算机性能能够以指数增长的速度提升。能够让计算机这么飞速发展的原因有两个,其中一个就是计算机架构,虽然这很重要,但这并不是最关键的,最关键的就是晶体管技术的发展。要知道单个晶体管的运行速度和性能不一定能够和指数增长的速度一样发展,但如何要让计算机性能以指数增长的速度提升,计算机架构师想到了,只要用更多的晶体管就好了啊!让更加多的晶体管来提供更多的性能,这就是常常被称为摩尔定律的东西。

你应该听说过这个词,他的意思其实是**戈登摩尔说:“每过十八个月到两年,你可以用同样数额的美元,但你会得到之前两倍数量的晶体管。”**这是最早的版本,而现在慢慢的把说法转变成了,你的电脑每年将会比原来快两倍,这可不是戈登摩尔说的(摩尔:“这个锅我不背!”)他说的花同样钱可以得到两倍晶体管,也有时候被人翻译成每年芯片上的晶体管数量能增长到以前的两倍,这也不是他的原话,但意思差的不太多。(摩尔:“你们让我背负的可太多了啊!”)
在这里插入图片描述
从图中可以看到有两个明显的转折点,首先看第一个,在 1986 的时间节点上发生了快速的上升,这里的便是发明了精简指令集计算机(Reduced Instruction Set Computer),或者叫做 RISC 计算机。因此当人们发明了第一个 RISC 时,计算机性能产生了一个拐点。

在这里插入图片描述

图中还有另外一个拐点,是在 2003 ~ 2007 年之间,在此之前顺序处理器的性能都可以保持着指数增长的趋势,但在这里顺序处理器的性能开始暴露出他的问题,为了保持计算机性能的指数增长,处理器从顺序处理器(单核处理器)变成了多核处理器即在单个芯片上拥有多个内核,但是多核处理器任然会有他的瓶颈,日后会有更新的技术来解决计算机性能发展停滞的问题。如果计算机性能发展停滞,那将代表所有的电脑性能突然间都不会再增长,也就不会有人再购买新的电脑芯片了。

3. 什么是计算机架构 / 指令集架构(Architecture or Instruction Set Architecture)

在这里插入图片描述

John_L._Hennessy 和 David A. Patterson 将 Architecture 称作 Instruction Set Architecture。下面就直接使用指令集架构 (Instruction Set Architecture) 来表示。

Q: What is instruction set architecture?

A: a instruction set architecture, or big A architecture is trying to provide the programmer some abstract machine model.


指令集架构

  • 程序员可见状态(内存、寄存器)
  • 执行语义
  • 输入输出(I/O)
  • 数据类型、大小

指令集架构是尝试为程序员提供一个抽象的机器模型, 以及为程序员提供一些机器状态的可视化,如机器是否有存储器、是否有寄存器,同时还定义了一些操作指令以及一些基本的计算指令, 并且定义了指令的操作方式。例如,ADD 指令一个基本的加法指令,它的实际语义定义了如何从一个寄存器中取出数据并与另一个寄存器中的数据相加,最后再保存。

将两个数相加,并保存到另一个寄存器中,这样看起来执行一条加法指令并不是一步完成的,其实指令很多时候都不会是一步完成还会有其他的操作需要处理,例如,IO 中断。那么就需要再指令集架构中定义一个中断的指令和实际语义是什么,或者是如何在 IO 出入一块数据,这些操作又是如何与处理器交互的。因此指令集架构还需要定义 IO 的输入输出如何工作。

有了输入输出,那么还需要考虑每次操作数的大小,每次操作多大的数据呢?以一个字节为单位?两个字节为单位?四个?那么一个字节具体又是多长?所以还需要定义数据的大小和类型。

指令集架构是提供给软件的一个抽象层,或者说是为了软件而提供了一个这样的抽象层(指令集架构),这样的目的是为了让软件不会有太大的改变。 指令集架构为机器的程序运行制定了一套理论基础即机器该依照此清楚自己如何运行程序,而没有明确的规定不同数据结构的大小、哪些东西运行得多快,这些实际性的执行问题都会在 微架构 (Microarchitecture) 中考虑。

在整个计算机体系结构中有这么多分层,我们需要清楚的一点是,设计整个计算机体系架构即设计每一层时都需要做到 权衡彼此。因此 指令集架构的设计会影响软件程序和微架构,即需要在同时兼顾上下相互影响的设计实现一个特定的指令集体系架构。

4. 什么是微架构/组织(Microarchitecture/Organization)

在这里插入图片描述

Q: What is a microarchtecture?

A: what microarchitecture and organization is really thinking about here is the tradeoffs as you’re going to implement a fixed instruction set architecture.


微架构

  • 如何为了某些指标而实现指令集架构的权衡(例如:流水线深度、流水线数量、Cache 大小、峰值功耗、乱序执行、总线宽度、ALU 宽度)

因为一般来说指令集架构是固定的,为了达到多种用途或者不同性能的处理器那么将根据一些目标指标来根据指令集架构实现不同的微架构。

例如,IntelX86 就是一个指令集体系架构,在此指令集架构上有许多不同的微体系架构的实现,因此有了高性能处理的服务器版本和专注于特定功能的机器,虽然芯片内部看起来完全不同,但是两个处理器可以执行相同的代码,因为他们使用的是完全一样的指令集架构。

5. 一些实例的对比指令集架构和微架构

5.1. 指令集架构相同但微架构不同

下面两款处理器均采用 X86 指令集架构,但不同的是设计的微架构不同,导致两者最终看起来完全不一样,但是两者可以运行相同的代码,原因就是两者使用的指令集架构完全相同。

可以看到 AMD Phenom X4 处理器有 4 个核心,功耗 125W,有 3 个解码指令,64KBL1 I Cache64KBL1 D Cache512KBL2 Cache,支持乱序执行,频率可达 2.6GHz。而 Intel Atom 只有一个核,但功耗只有 2W2 个解码指令,较小的 L1 Cache,但有着和左边一样大小的 L2 Cache,只能顺序执行,频率只有 1.6GHz;这就是微架构在权衡处理器指标的结果,根据相同的指令集架构设计出了不同的微体系架构。

在这里插入图片描述

5.2. 指令集架构不同且微架构不同

下面两款处理器采用的不同的指令集架构,同时微架构也不同,同样的代码是不能在对方处理器上运行。

左边在上文提到采用的 X86 指令集架构,而右边 IBM POWER7 采用的 Power 指令集架构,同时可以看到下面的指标参数,两者的微架构是不同的。
在这里插入图片描述
需要注意的是,采用不同的指令集架构,但是微架构设计有可能相同,但同样不可互相执行对方的代码。

6. 小结

微体系架构更多考虑的是处理器性能和其它的应用指标,而指令集架构更多关心的则是一种软件设计方面的因素。

觉得这篇文章对你有帮助的话,就留下一个赞吧*^v^*
请尊重作者,转载还请注明出处!感谢配合~
[作者]: Imagine Miracle
[版权]: 本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
[本文链接]: https://blog.csdn.net/qq_36393978/article/details/128647553

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

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

相关文章

《Linux Shell脚本攻略》学习笔记-第二章

2.1 简介 本章将为你介绍一些最值得关注同时也是最实用的命令。 2.2 用cat进行拼接 cat命令能够显示或者拼接文件内容。cat能够将标准输入数据与文件数据组合在一起。 通常的做法是将stdin重定向到一个文件,然后再合并两个文件。而cat命令一次就能搞定这些操作。 1&…

【Linux】基础常见指令

目录​​​​​​​ 前言 一、Linux的环境搭建与远程控制 Linux 环境的搭建方式主要有三种 使用 XShell 远程登陆到 Linux 二、常见指令 1. ls 指令 2. pwd命令 3. cd 指令 4. touch指令 5. mkdir指令 6. rmdir指令 && rm 指令 7. man指令 8. cp指令 9. mv指令 10.…

【微信小程序】实用教程02-添加全局页面配置、页面、底部导航

开始前,请先完成项目创建,详见 【微信小程序】实用教程01-注册登录账号,获取 AppID、下载安装开发工具、创建项目、上传体验 前期准备 因我们的项目是根据模板创建的,需先清理掉无效的页面代码,具体操作方式如下&…

LeetCode 64. 最小路径和

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 64. 最小路径和,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 LeetCode 64…

【Redis】使用阻塞队列+Redis优化秒杀业务

【Redis】使用阻塞队列Redis优化秒杀业务 文章目录【Redis】使用阻塞队列Redis优化秒杀业务1. 为什么要优化2. 怎么优化2.1 查询优惠卷2.2 判断秒杀库存2.3 校验一人一单2.4 减库存2.5 创建订单2.6 保证redis操作的原子性3. 确认优化方案4. 实现优化方案4.1 编写lua脚本4.2 定义…

jvm系列(3)--运行时数据区Runtime

目录运行时数据区概述及线程前言运行时数据区结构运行时数据区与内存线程的内存空间Runtime类线程JVM 线程JVM 系统线程程序计数器(PC寄存器)PC寄存器介绍PC寄存器的作用举例两个面试题CPU 时间片本地方法接口本地方法举例为什么要使用 Native Method?与Java环境外交…

Tomcat打破双亲委派模型

tomcat的类加载器结构tomcat的类加载(loadClass)过程和原本的双亲委派模型思路差不多,先看有没有加载过。先在本地 Cache 查找该类是否已经加载过,也就是说 Tomcat 的类加载器是否已经加载过这个类。如果 Tomcat 类加载器没有加载…

【学习笔记】【Pytorch】张量(Tensor)的基础操作

【学习笔记】【Pytorch】张量(Tensor)的基础操作一、创建张量1.使用数据创建张量2.无需数据的创建选项3.torch.Tensor与torch.tensor的区别4.PyTorch中张量的创建方法的选择二、张量的属性1.张量的 torch.dtype2.张量的 torch.device3.张量的 torch.layo…

阿维塔冲击年10万台订单,第二款车型Q2发布

1月13日,阿维塔科技在重庆总部召开渠道合作伙伴大会。今年,阿维塔计划推出: •阿维塔11后驱版本 •并发布第二款产品,代号E12,定位中大型轿车。阿维塔今年计划冲击10万辆订单目标。在当前CHN平台的基础上,阿…

Openresty记录笔记

最近由于项目需要学习了安全代理的相关知识,其实刚开始的时候是非常需要一个入门的介绍,大概说明下这个到底是个什么东西,能干啥,简单的原理是什么,为此我记录下我看完用完的心得,记录成笔记。 一般我们代码…

Redis 持久化详解

目录一、简介二、RDB持久化2.1、SAVE2.2、BGSAVE2.3、SAVE选项2.4、RDB文件结构2.5、RDB文件载入三、AOF持久化3.1、开启AOF功能3.2、配置AOF文件的冲洗频率3.3、AOF重写3.3.1、BGREWRITEAOF命令(手动)3.3.2、AOF重写配置选项(自动&#xff0…

Android | Service

Android Service Service 概念 实现程序后台运行的解决方案,一种可在后台执行长时间运行操作而不提供界面的应用组件。Service 的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,Service 仍然能…

Vue3——第十五章(计算属性:computed)

一、基础示例 模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。推荐使用计算属性来描述依赖响应式状态的复杂逻辑。 在这里定义了一个计算属性 publishedBooksMessage。computed() 方…

【设计模式】创建型模式·原型模式

设计模式学习之旅(五) 查看更多可关注后查看主页设计模式DayToDay专栏 一. 概述 用一个已经创建的实例作为原型,通过复制(克隆)该原型对象来创建一个和原型对象相同的新对象。 原型模式包含如下角色: 抽象原型类:规定了具体原型对象必须实现…

Java基础(二)

1.标识符标识符:由数字、字符、下划线、$组成(不能以数字、下划线开头)java严格区分大小写2.命名规范包名:多单词组成时所有字母全部小写类名、接口名:多单词组成时,所有单词首字母大写变量名、方法名&…

屏幕录制工具哪个好用?分享3款相见恨晚的软件

在我们的日常生活中,我们经常使用截图和手机屏幕记录功能来记录一些重要的内容。然而,录制的图片清晰度很低,或者需要不断的截图,这很容易出错一些重要的内容,这个时候就需要进行录屏了。那么电脑上的屏幕录制工具哪个…

group by详解

group by功能 在SQL中group by主要用来进行分组统计,分组字段放在group by的后面;分组结果一般需要借助聚合函数实现。 group by语法结构 1、常用语法 语法结构 SELECT column_name1,column_name2, … 聚合函数1,聚合函数2 , … FROM table_name GROUP…

电脑删除了大文件怎么恢复?看看这四种方法

电脑能够帮助我们存储大量的文件,比如视频、文档、音频等,但是随着时间的流逝,有些文件所存在的意义也变得毫无价值了,这时候很多小伙伴都会选择删除操作,可是由于电脑磁盘内容过多,容易面临重要文件被误删…

硬件仿真加速器与原型验证平台

基于软件仿真工具对于动辄几百万门的ASIC验证而言,几乎显得力不从心。不管是从成本还是从性能的角度来看,使用硬件仿真器或者基于FPGA的原型验证平台,几乎是验证工程师的不二法门。因为基于硬件的环境能够极大的提高验证的速度,增…

Promise(基础)

Promise是什么 1.promise是一门新的技术(ES6规范) 2.Promise是JS中一编程的解决方案(旧的解决方案是单纯的使用回调函数) 3.promise一个构造函数,promise队形用来封装一个一步操作并可以获取其成功/失败的结果值。 注…