1. “虚拟” to “现实”
首先可以看这张图片,下面的 Physics
所指的是我们的物理世界中看得见摸得到或者是客观存在的事物,而人类希望将自己的工作内容或者需求以某种方式映射到物理层面上,用物理变化带来的影响来完成人类工作内容。例如早期的计算器——算盘先生,通过拨动被赋予数值意义的算珠,完成数值运算。但这是一些简单的工作,那么要完成更加复杂的工作呢?播放视频、计算并生成电子表格、自动化控制一个系统环境运作,这些该工作如何做到映射在物理层面上?这样想想,哇!真是一件够复杂的事情,这两个中间的空白差距太大了。
那么从广义上来讲,计算机体系结构就是构建一个抽象的描述,将问题一层一层转化,并且实现出具体的层级,用来连接这两个层面,填补上中间的这片差距空白。但它的工作不仅仅是这些,计算机体系结构这么复杂当然想要设计出一个尽量不发生改变或者不发生大的变化的结构,那么就将这用来完成桥接的中间内容分层,细化出更加细节的抽象层或其它层级用来解决一个个细小的问题,那么这样就不会因为物理层或者应用层的一点点变化而发生翻天覆地的改变,这样就能重复性的利用设计,将可利用的物理事物转化为人类希望想要的应用。
([注]:这里的解释是笔者概括性的解释,也许有点难理解,或者说笔者的描述不够好,还请见谅!
)
这张图是对整个计算机环境的抽象,从上至下的层级表示越往下的被依赖程度越高,越往上则依赖程度越高。即是说上一层依赖于下一层这样的关系。最顶层 Application
描述的是应用程序软件(就是我们平时使用的一些软件程序如:微信、浏览器、Word
、Visual Studio Code
等等),而下一层则是算法层 Algorithm
,应用软件的开发是离不开算法结构的。而算法的实现也是依赖于实现他的编程语言 Programming Language
。
这些软件能够正常的运行是依赖于有操作系统或者虚拟机环境 (Operating System / Virtual Machine)
提供的资源管理接口,以及控制调度系统来为软件的运行保驾护航,事实上操作系统和虚拟机环境也是软件,但是稍微偏基础一些。
下面的几层我想从下往上来看,物理层 (Pyhsics)
指的是物理世界中根据基本物理定律的物理变化,粒子的运动规律等,器件层 (Devices)
一般指的是晶体管,电路 (Circuits)
指的是利用晶体管搭建出的各种规模的电路,门(逻辑门)(Gates)
指的是利用电路构建出的 “逻辑门”(如,与门、或门、非门等),在往上就到了我们的重点的研究对象寄存器传输层 (RTL--Register-Transfer Level)
,用寄存器传输级描述语言实现的一层软件层(常见的语言有 Verilog
、VHDL
、Scala
等),然后往上的微体系结构 (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
宽度)
因为一般来说指令集架构是固定的,为了达到多种用途或者不同性能的处理器那么将根据一些目标指标来根据指令集架构实现不同的微架构。
例如,Intel
的 X86
就是一个指令集体系架构,在此指令集架构上有许多不同的微体系架构的实现,因此有了高性能处理的服务器版本和专注于特定功能的机器,虽然芯片内部看起来完全不同,但是两个处理器可以执行相同的代码,因为他们使用的是完全一样的指令集架构。
5. 一些实例的对比指令集架构和微架构
5.1. 指令集架构相同但微架构不同
下面两款处理器均采用 X86
指令集架构,但不同的是设计的微架构不同,导致两者最终看起来完全不一样,但是两者可以运行相同的代码,原因就是两者使用的指令集架构完全相同。
可以看到 AMD Phenom X4
处理器有 4
个核心,功耗 125W
,有 3
个解码指令,64KB
的 L1 I Cache
和 64KB
的 L1 D Cache
,512KB
的 L2 Cache
,支持乱序执行,频率可达 2.6GHz
。而 Intel Atom
只有一个核,但功耗只有 2W
,2
个解码指令,较小的 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