X86处理器架构

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

处理器发展历史

最开始的处理器比较简单,8086处理器是评估当前的指令指针(CS:IP)指向的指令,然后再执行解码、执行、退出,并移动指令指针到下一个位置,每一个新的芯片都做了改进,大多数的芯片增加了新的功能,一些增加了新的寄存器,基于本篇文章的目的,我主要关注在对指令集运行方面有很大影响的变化,其它的例如新增了虚拟内存空间或者平行处理器等也非常值得一说和有用,但是这篇文章不会讨论。

指令集缓存在1982年被加入到CPU中,取代了每次执行一个指令都要去访问主内存,CPU只要读取当前指令指针指向的数据即可,但是指令集缓存很小,仅仅可以缓存很少的指令,但是确实通过减少了来回访问主内存的次数提高了性能。

1985年,386新增了数据缓存,同时扩展了指令集缓存,通过读取数据之外的层面提高了性能,在这点上指令集缓存和数据缓存大大小也从几个字节上升到几千的字节层面。

1989年,i486升级到了5层流水线,相对于以前每个CPU只有一个指令处理的流水线,现在每一层都有一个指令处理流水线,在相同的时钟频率下,486的性能是386的2倍,每一个流水线都从缓存中获取指令(当时的指令集缓存大部分都是8KB),第2层的流水线会解码指令集,3层会解析指令执行需要的内存地址(要理解这一点需要明白计算机中的内存地址表示方式),第4层会执行指令,第5层执行退出,如果需要的话把结果写回到寄存器和主内存。在CPU可以一次处理多个指令之后,程序可以运行的更快了。

1993年,奔腾处理器诞生,由于法律诉讼原因处理器的名字由数字被变为名称,这就是为什么叫奔腾而不叫586的原因,奔腾架构新增了一个二级独立超大流水线,主流水线和i486类似,但是二级流水线执行一些简单指令,例如整数的运算,并行并且变得更快了。

1995年,Intel发布了奔腾专业版,这是一个完全不同的处理器设计,这个芯片有几个最新的特性包括无序执行核心(OOOcore)和随机执行,流水线被扩展到了12层,它包括一个叫做超级流水线的东西,许多指令可以被并行同时处理,这个OOO核心我们后面会深入讨论一下。在1995年OOO被引进到2002年我们的下一个阶段出现之间,有很多变化,新增了额外的寄存器,一条指令处理多条数据(单指令多数据或者叫SIMD),缓存被不断添加,已有的缓存被不断增大,流水线有时被拆分了有时被固定,这些改变对性能翻倍提升都特别重要,但是这些改变对于通过芯片的数据流的改变都不大(这块不太理解)。

2002年,奔腾4核心处理器引入了一项新的技术:”超线程“,OOO核心在提升CPU处理指令流的方面太成功了以至于处理的速度要比指令发送给核心的速度还要快,甚至在(高)负载的情况下,对于大多数的用户来说OOO核心因为效率太高了所以大部分时间都是空闲,为了更稳定和高效的给OOO核心发送指令,他们设计了第2层的front-end,操作系统会识别到2个CPU,有2组的寄存器,有2组的指令集解码器在遍历指令集指针和处理结果(相当于要加速给核心发送指令集的速度),结果集被一个共享的OOO核心处理,但是这个过程应用程序是不知道的,然后指令就像以前那样执行退出,结果被发送给他们来的那个对应的核心。(这里翻译的不好,大家有时间可以看看原文。)

2006年,Intel发布了微核心架构,更长远来看,它被称为“core 2”(因为人们知道core2 肯定比core1要好),有一个让人惊讶的改动,CPU的时钟频率被降低了,超线程也被移除了,通过降低时钟频率,Intel才可以扩展了所有的流水线平台,OOO核心被扩展了,缓存和缓冲区被加大了,处理器被重新设计成为专注于具有共享高速缓存的双核和四核芯片。

2008年,Intel发布了一系列的酷睿i3、i5和i7处理器,被设计成为重新引入了带有共享OOO核心的超线程处理器,这3款处理器最大的区别就是内部的缓存大小不一样。

未来的处理器,下一代的微架构处理器更新现在叫做HasWell,大概会在2013年发布,到目前为止公布的文档显示这款处理器采用了14-stage的OOO核心流水线,所以数据流的设计很可能仍然在遵循奔腾专业的设计

Intel Nehalem是Intel研发的中央处理器微架构之代号,该架构取代了前代的Core微处理器架构。使用Nehalem架构的微处理器采用45纳米 制程(后期改用32纳米制程),在2007年的Intel开发者论坛上Intel官方展示了一个采用两颗INehalem微架构的处理器的系统平台。首款采用Intel Nehalem架构的处理器是2008年11月正式发售的桌面型处理器Intel Core i7 。

Inter Core i7架构

目前Inter Core i7使用Nehalem微架构来实现CPU内部结构,而ARM微架构依然沿用Cortex。

Nehalem是一款OOO(Out of Order)乱序执行的Superscaler(超标量)的X86处理器。

超标量意味着CPU中有多个执行单元,可以在同一时刻执行多条无相关依赖性的指令,从而达到提升ILP(Instruction Level Parallelism)指令并行化的目的。

乱序执行则是指在多个执行单元的超标量设计中,一系列的执行单元可以同时运行一些没有数据以及逻辑关联的若干指令,只有需要等待其他指令运算结果的数据会依照顺序执行,从而提升执行效率。

Intel Nehalem arch

Inter Core i5

CPU PipeLine执行流程

取指与解码(Front-End In-Order)

  • Instruction Fetch:将主存中的指令集合(4K左右)加载到L1的Instruction Cache中
  • Prefetch Buffer:从L1的指令缓存装载16Byte长度的指令到Buffer
  • Predecode&Instruction Length Decoder:将上过程中Buffer的指令进行指令长度解析(确定指令长度,解码指令前缀,为解码器标注指令类型等)以及进行分支预测的处理(确定分支指令的的跳转,使用BTB保存分支预测指令的地址)避免处理器在执行预测路径上的时候不会'"stalling"
由于X86是CISC指令集的处理器,CISC的指令是变长指令集,所以在解码之前,需要将指令进行解析,确定指令的前缀、长度等等,而RISC指令集则不需要进行该处理,因为RISC是等长指令集。
  • Instruction Queue:将Predecode处理过后的指令进行指令对齐以及宏指令的融合(将可融合的指令送到解码器,生成新的指令,如比较判的分支X86指令集最终解码成单条micro Op,从而提升解码器的带宽,降低指令数量,提高运行效率)
  • Complex&Simple Decorder:将Instruction Queue中的指令进行解析,Complex Decoder负责解码复杂指令,将单条复杂的x86指令翻译成1-4条Micro Ops,Simple Decoder负责解码简单指令,将单条简单的x86指令翻译成1条类RISC指令的Micro Op
X86的CPU属于CISC指令集,由于CISC的指令长度不固定,而且执行时间也不固定,所以Nehalem架构会将CISC指令通过Predecode以及Decode处理成类RISC指令(也就是Decode完的MicroOp),因为RISC指令长度等长,执行时间恒定,通常一个cycle就能执行完,因此后续处理器设计就会比较简单,并且流水线的长度可以达到很长,使得CPU可以到达很高的频率。
  • Decoded Instruction Queue:接收到了解码后的Micro Ops后,会经过Loop Stream Decoder以及Micro Instruction Sequencer
Loop Stream Decoder会对循环段(如for,while,do...while)少于28个ops的情况下,会保存起来,而不需要再重新取指,进行分支预测以及解码等操作,并且Instruction Sequencer会将指令进行序列化
  • MicroOp Fusion:将多条Micro Ops进行融合,用于降低Micro Ops的数量,提高指令执行的吞吐量,以及Reorder Buffer的使用效率

执行引擎(Out-Of-Order Executor)

OOOE是为了直接提升ILP(Instruction Level Parallelism)指令集并行化的设计,在多个执行单元的超标量设计中,一系列执行单元可以同时执行一些没有数据关联性的若干指令,只有需要等待其他指令运算结果的数据会按照顺序执行。

  • 2 x Register Allocation Table:不同的指令可能都会需要用到相同的通用寄存器(GPR,General Purpose Registers),为了在这种情冲突的况下指令们也能并行工作,处理器需要准备解决方法。一般的RISC架构准备了大量的GPR,而x86架构天生就缺乏GPR(x86具有8个GPR,x86-64具有16个,一般RISC具有32个,IA64则具有128个),为此Intel开始引入重命名寄存器(Rename Register),不同的指令可以通过具有名字相同但实际不同的寄存器来解决(为了SMT同步多线程,这些寄存器还要准备双份,每个线程具有独立的一份)
寄存器重命名避免了机器指令或者微操作不必要的顺序化执行,从而提高了处理器的指令级并行的能力。
  • ReOrder Buffer:只能存放128条指令,将寄存器重命名后的指令按照编程的原始顺序重新排序成一个队列,把打乱了次序的指令们依次插入队列中。
  • Reservation Station:指令保留站,等待源数据到来,以进行OOOE乱序执行,而没有数据的指令,则在Reservation Station中等待,直到等待到了数据后,通过各个端口发送到ALU中进行运算和执行,最终将运算数据通过MOB存入L1的数据缓存中,并且将结果通过Result Bus分发到ROB中,如果运算已经完成,则会更新ROB中的指令结果,并且从ROB中移除已经完成的指令,将该指令放到RRF中。除了存放指令之外,保留站的作用是监听内部结果总线上是否有保留站内指令所需要的参数。需要读取L1/L2缓存乃至内存的指令或者需要等待其他指令结果的指令必须在此等待
  • Retirement Register File:从ROB中移出一条指令就意味着指令执行完毕了,这个阶段叫做Retire回退,相应地ROB往往也叫做Retirement Unit(回退单元),并将其画为流水线的最后一部分。该部件存储了被提交的体系寄存器的状态,通过逻辑寄存器的号来查询这个寄存器堆,用于进行寄存器是否可用的标识,为寄存器重命名查询寄存器状态以便提供空闲寄存器。

重要部件

CPU中分为以下重要的部件:

  • PipeLine
  • 超标量&超线程
  • Hardware Prefetch:根据历史操作预先加载以后会用到的指令来提高性能
  • 分支预测(Branch Prediction)
  • Macro Ops && Micro Ops指令融合(MicroOp Fusion)
  • LSD
  • Register Allocation Table
  • ROB
  • RRF
  • MOB
  • Cache:L1,L2,L3缓存
    • L1:分为指令缓存(Instruction Cache,32K)以及数据缓存(Data Cache,32K):(N路集合关联)
    • L2:每个核超线程共享一个256K缓存(N路组相连(N Way Set-Associative))等
    • L3:所有核共用同一个8M的缓存
  • 多核CPU的总线:QPI

原文作者:None_Ling

原文地址:X86处理器架构--Nehalem-腾讯云开发者社区-腾讯云(版权归原文作者所有,侵权联系删除)

 

X86 X64 ARM等处理器架构 这种架构在处理复杂的多任务、高强度的计算工作以及运行大型软件方面表现出色,例如在专业的图形设计、视频编辑、大型游戏运行以及科学计算等场景中应用广泛。应用场景:由于其开源性和灵活性,受到了广泛的关注和研究,目前在一些新兴的应用领域,如物联网、边缘计算等方面具有较大的发展潜力,一些企业和科研机构正在基于该架构进行芯片的研发和应用。应用场景:虽然现在 PowerPC架构的市场份额相对较小,但在一些对性能和可靠性要求较高的特定领域,如航空航天、军事、高端网络设备等仍然有一定的应用。等都是基于 ARM 架构设计的。 阅读详情

相关推荐

X86架构(八)——32位处理器架构

分支目标预测的目的就是在分支指令执行之前,尽可能准确地预测分支的执行方向和目标地址,以便处理器提前取指并执行可能的目标指令,避免因等待分支结果而导致的流水线停顿。乱序执行是指处理器在执行指令时,不按照程序中指令的顺序依次执行,而是根据指令的依赖关系和处理器的资源情况,动态地调整指令的执行顺序。不过,段的基地址是0x00000000,段的长度是4GB。在32位模式下,为了防止对内存的违规访问,传统的段寄存器(CS、SS、DS、ES)不在保存16位段地址,而是段的选择子,用于选择要访问的段。

qq_42518517的博客 1920

初探Nehalem微架构

Nehalem是Intel针对Core架构作出了改动,将原来的架构扩展为原生4核(甚至6核、8核)设计,并为多核的需要准备了新的总线QPI来满足巨大的带宽需求的产物。Nehalem内核还采用了集成内存控制器的设计,还融合了NetBurst架构的超线程技术以提高性能。主要优势:更大缓存,更大内存带宽。4核心Nehalem: Core i7处理器如下:可是SMT什...

weixin_34009794的博客 508

《汇编语言 基于x86处理器》- 读书笔记 - 第2章-x86处理器架构

本章主要学习了x86处理器架构。内容包括基础微型计算机设计、指令执行周期、内存读取、程序加载执行过程,以及32位和64位x86处理器的操作模式、基本执行环境、内存管理等。同时,还涉及了典型x86计算机组件如主板、内存和输入输出系统。

灵台方寸山斜月三星洞 1960

CPU性能优化:超线程技术

并不是所有的场合都适合使用超线程技术,可以根据自己的实际需求选择开启或者关闭超线程,在高并发的服务器场合下,使用超线程技术确实可以提升性能,但是在一些对单核性能要求比较高的场合,如大型游戏,开启超线程反而会增加系统的开销,影响性能,在Intel核AMD的处理器产品系列中,你会发现并不是所有的处理器都使用了超线程技术,甚至某代处理器全部放弃使用,而最新的Intel 10代处理器则又卷土重来,全面开启超线程,截至目前,市面上还没有发现使用超线程技术的ARM处理器

fantasy_ARM9的博客 3454

cpu结构研究

转自:http://www.zrway.com/lab/lab_show.jsp?RecNo=2701 The Core Execution Engine: Load/Store Unit 处理器核心执行引擎:存取单元   运算需要用到数据,也会生成数据,这些数据存取操作就是存取单元所做的事情,实际上,Nehalem和Core的存取单元没什么变化,仍然是3个。 Nehale

WitsMakeMen的专栏 3465

intel处理器演进-20211011

Archi­tectural change Fabrication process Micro-architecture Code names Release date Processors 8P/4P Server 4P/2P Server/ Workstation Enthusiast/ Workstation Desktop Mobile Tick 65 nm P6, NetBurst Presle, Cedar Mill

weixin_48576628的博客 419

【芯片学习】X86 CPU 发展历史与分析——1971~2020——明白Intel架构的变迁

近日由于需要,我对x86CPU架构发展历史进行了调研与学习。目前主流的x86架构,其先进的技术代表厂家就是Intel与AMD,它们相爱相杀的故事广流于家家户户。但是我整理Intel的相关CPU发展就花了2、3个星期(期间还有别的事情),于是AMD的相关产品还没来得及整理与写入。关于Intel的芯片发展过程,相关的整理网站其实还不少,但大多数都停在2011年(因为也是那个时候写的),也就是截止到Intel Core架构之前,而后续的介绍文章都很稀碎。我借鉴了很多很多诸如这样的文章与维基百科,主要参考网站都放

Hide_in_Code 1万+

理解x86x86_64和x64处理器架构,区别

简单来说,x86是32位架构,而x86_64和x64都指的是同一个64位架构(只是命名惯例不同)。64位架构在当代计算中占主导地位,因为它可以处理更多数据并能更高效地处理更复杂的任务。

chaoran____的博客 3709

1、探索x86处理器架构:从基础到深入

本博文深入探讨了x86处理器架构及其相关系统,涵盖微计算机的基本设计原理、指令执行周期、x86处理器的特性与操作模式、内存管理机制(分段与分页)以及输入输出系统的多级访问方式等内容。通过本文,读者可以全面了解计算机的工作原理,并为后续学习奠定基础。

fff88的博客 751

64位x86-64处理器架构

本节重点关注所有使用 x86-64 指令集的 64 位处理器的基本架构细节。这些处理器包括 Intel 64 和 AMD64 处理器系列。指令集是已讨论的 x86 指令集的 64 位扩展。以下为一些基本特征: 1) 向后兼容 x86 指令集。 2) 地址长度为 64 位,虚拟地址空间为 2 64 字节。按照当前芯片的实现情况,只能使用地址的低 48 位。 3) 可以使用 64 位通用寄...

Java入门基础教程 3665

X86:2:X86处理器架构

文章目录2.2 32位x86处理器2.2.1操作模式2.3 64位X86-64处理器 2.2 32位x86处理器 所有x86处理器的基本架构特点 Intel IA-32系列中的成员和所有32位AMD处理器 2.2.1操作模式 x86处理器三个主要 保护模式、 实地址模式 系统管理模式; 一个子模式:虚拟8086模式 这是保护模式的特殊情   保护模式是处理器的原生状态 所有指令和特性都可用的 分配给程序的独立内存区域被称为段, 处理器会阻止程序使用自身段范围之外的内存   虚拟80

fgh123的博客 1419

x86处理器架构——64位x86-64处理器架构

重点关注所有使用 x86-64 指令集的 64 位处理器的基本架构细节。这些处理器包括 Intel 64 和 AMD64 处理器系列。指令集是已讨论的 x86 指令集的 64 位扩展。以下为一些基本特征:1) 向后兼容 x86 指令集。2) 地址长度为 64 位,虚拟地址空间为 2 64 字节。按照当前芯片的实现情况,只能使用地址的低 48 位。3) 可以使用 64 位通用寄存器,允许指令具有 64 位整数操作数。4) 比 x86 多了 8 个通用寄存器。

tombaby_come的博客 1397

x86架构与ARM架构处理器

英文缩写: ISA指令集架构,Instruction Set Architecture  CISC复杂指令集计算机,Complex Instruction Set Computer  RISC精简指令集计算机,Reduced Instruction Set Computer  EPIC显性并行指令计算,Explicitly Parallel Instruction Computing

cc_lq的专栏 1144

x86架构处理器有哪些主要特点?底层原理是什么?

32位和64位支持:x86架构支持32位和64位操作系统和应用程序。分支预测和乱序执行:x86架构处理器采用分支预测技术,预测分支指令的执行路径,并进行预加载,以避免流水线中断。同时,它还支持乱序执行,可以根据指令之间的相关性和依赖关系,灵活地调整指令的执行顺序,提高指令级并行性。高度并行化:x86架构处理器具有多级流水线和超标量执行等技术,可以同时执行多条指令,提高指令级并行性和执行效率。广泛应用:x86架构处理器广泛应用于个人计算机和服务器领域,是当前最常见和流行的处理器架构之一。

长风破浪会有时的博客 2586

深度解析 8086 处理器x86 架构的奠基者

8086 处理器以其创新的并行架构、灵活的寻址方式、丰富的指令集,为 x86 架构奠定了坚实基础。它不仅是技术史上的里程碑,更是理解现代 CPU 工作原理的 “活化石”。从 16 位到 64 位,从实模式到保护模式,8086 的设计思想仍在当代处理器中延续,见证着计算机技术的辉煌演进。(本文适合计算机体系结构学习者、汇编语言开发者及历史爱好者阅读,后续可扩展 8086 与现代 CPU 的对比分析。延伸思考:如何将 8086 的内存分段机制与现代虚拟内存结合?欢迎在评论区交流!

2501_90200491的博客 1401

『ARM』和『x86处理器架构解析指南

如果问大家是否知道 CPU,我相信不会得到否定的答案,但是如果继续问大家是否了解ARM 和 X86 架构,他们的区别又是什么,相信可能部分人就会哑口无言了目前随着深度学习、高性能计算、NLP、AIGC、GLM、AGI 的技术迭代,助力大模型快速发展,对于多元算力结合(CPU+GPU)需求越来越高,再不了解 CPU 就说不过去了,因此本文将会带您深入了解 CPU 架构,并且解析 CPU 两大主流架构:ARM 和 X86中央处理器(Central Processing Unit,CPU

ReturnTmp的博客 4428

x86处理器架构——32位x86处理器架构

重点讲解了 32 位 x86 处理器的基本架构特点。这些处理器包括了 Intel IA-32 系列中的成员和所有 32 位 AMD 处理器

tombaby_come的博客 789

如何查看Mac的处理器架构‌‌是ARM还是x86

如何查看Mac的处理器架构‌‌是ARM还是x86

AI小美好 2万+
上一篇: Linux系统实战项目——sudo日志审计
下一篇: 一文搞懂精简指令集与复杂指令集
Linux加油站
博客等级 码龄4年 2161粉丝 1183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值