上一章节我们讲解了CPU的结构和原理,以及处理器基本功能和指令集架构规范、指令集架构等内容,本章我们聊一聊微架构和IPC提升,主流CPU核心的微架构设计以及对开发者的影响。
IPC提升主要是提高指令的吞吐量,通过优化处理器流水线的微架构,提高一个周期可以执行的指令数量。
在理解流水线之前我们先看简单了解一下程序执行的步骤。通常一个程序指令可能会经历五个执行步骤:
早期的CPU设计只能按照程序指令的顺序进行执行,每个指令都需要经过这五个执行步骤。如果每个步骤需要200ps的话,一个时钟周期需要1000ps并且只能执行1个指令。3个指令需要3000ps。之后就诞生了流水线技术,通过在一个时钟周期内执行多条不同指令的不同步骤,提高流水线的吞吐量实现指令集并行。虽然不能降低单个指令的耗时,但是可以降低多条指令的总耗时。
现代CPU核心中的流水线设计很复杂,也会导致CPU中的控制单元占比很大。现代CPU流水线设计主要为了让运算单元每个周期都可以满负载执行,通常有10级流水线,加入了更多的功能模块用于增加流水线的吞吐量提高IPC。流水线通常分为前端和后端,前端主要负责读取指令和解码指令,后端主要负责调度发射指令和执行指令。接下来我们通过下图的流水线示例来了解现代CPU中的流水线设计,参考了当前主流的CPU性能核心的微架构实现。
提示:Intel最早在2004年推出了30+级流水线的CPU,但是流水线数量太长会导致微架构设计非常复杂,同时分支预测失败惩罚更高。这些原因导致目前CPU通常使用10级左右的流水线。
读取指令将内存中的指令读取到CPU中的指令缓冲区中,相关的优化是为了降低读取指令延迟和读取更多指令到CPU中,提高流水线的吞吐量。
由于从内存中读取程序指令延迟比较长,现代CPU会按照PC寄存器的地址一次性读取多条后面需要执行的程序指令CPU中,减少后续流水线空闲时间。将指令放在指令缓冲区中,等待解码器的使用。
由于一次性读取多条程序指令,会遇到一个问题就是当分支判断的时候由于分支还未执行无法知道后续分支执行的方向。通过添加分支预测单元提前预测分支可能的执行方向读取后续需要执行的程序指令。
分支预测分为动态分支预测和静态分支预测。高性能CPU核心都会使用动态分支预测的方式,分支预测成功率可以达到80%-90%。分支预测错误会导致分支预测惩罚需要回滚错误分支的指令执行,通常会导致10+个周期的流水线惩罚。
类型 | 实现方式 | 优点 | 缺点 | 详情 |
静态分支预测 | 编译器 | 实现简单、成本低 | 预测准确性比较差 | 在编译器中插入相关分支预测判断 |
动态分支预测 | CPU | 预测成功率高 | 成本高、增加功耗 | 一种简单实现:在每个分支执行完成的时候,将分支结果保存到缓存中进行统计。分支预测执行判断时,根据之前这个分支的执行结果选择概率更高的执行方向。 |
为了避免每次从内存中读取指令延迟比较长,将读取过的指令存入缓存中。经常使用的指令就可以直接从缓存中读取,但是L1缓存由于读取性能的限制容量有限,通常只有几十KB,在缓存缺失的时候可能会从内存中读取指令导致流水线卡顿。
由于CPU访问内存时,会将程序空间的虚拟地址映射为物理内存地址,这个映射过程有一定的耗时。通过加入TLB缓冲区将转换后的映射加入到缓存中,下次读取程序指令地址时就可以直接读取无需再进行地址转换。
解码指令将指令缓冲区中的指令按照顺序微码为多个微操作放入微操作队列中,相关的优化是为了降低解码耗时和同时解码更多的指令。
将指令缓冲区中几十个字节的指令解析成多个单独的程序指令,后续再发送到解码器提高解码效率。特别是对于x86指令由于指令长度不同,预解码阶段会更加复杂。
解码器将程序指令解码成CPU微操作指令。现代CPU核心中通常会添加多个解码器用于提高解码性能,通常会有3-10个解码器单个时钟周期可以解码多条指令。
x86平台的复杂指令可能会生成多条微操作,所以x86处理器通常包含一个复杂指令解码器,专门用于解码复杂指令。x86处理器的解码器通常比ARM更少,A17 Pro的高性能核有9个解码器,Intel i9 14900K的高性能核心只有6个解码器其中包含1个复杂指令解码器。
x86平台由于复杂指令的存在,解码指令效率更低。通常会加入额外的微指令缓存,将已经解码的指令微操作映射保存到缓存中,下次可以直接读取无需再解码。
一个周期内发射多个指令到运算单元,提高运算单元的吞吐量。有两种实现多发射的调度方式,静态调度和动态调度。现代CPU高性能核心使用动态调度一个周期可以发射6-10个指令。
类型 | 实现方式 | 优点 | 缺点 | 详情 |
静态调度 | 编译器 | 实现成本更低 | 性能提升一般 | 编译器对指令的执行顺序进行调整 |
动态调度 | CPU | 性能更好 | 成本高、增加功耗 | CPU实时对指令进行调度和发射 |
多发射调度主要是为了提高指令发射的效率,同一个时钟周期发射出更多的指令到计算单元,让计算单元持续处于高负载运算状态中提高吞吐量。一个时钟周期内将不同的指令发射到不同的计算单元,但是需要解决流水线冒险带来的挑战,通常存在三种类型的流水线冒险:
流水线调度过程中需要解决流水线冒险的问题,现代CPU微架构设计会通过ROB(重排序缓冲区)对执行进行动态调度,ROB越大可以保存的指令数越多性能越好:
一个时钟周期可以并行执行不同的计算单元,只要当前计算单元有空闲。
将指令和指令数据发射到计算单元的缓冲区中等待执行,当计算单元空闲时即可开始执行。
增加更多的整数运算、浮点运算、分支判断和内存读写单元数量,一个时钟周期可以执行更多的运算和内存读写操作。现代CPU性能核心通常有10+个算数单元和多个内存加载单元。
通过L1、L2缓存读取内存数据,将常用的数据保存到高速缓存中,提高下一次读取的性能。
现代CPU通常使用大小核设计,性能核有更复杂的流水线设计性能更好,能效核流水线设计更简单性能会差一些。
Intel最新的桌面级别处理器Core i9 14900K使用了8个Raptor Cove性能核和16个Gracemont能效核。
Apple最新的A17 Pro处理器使用了2个性能核和4个能效核。
高通最新的8 Gen 3处理器使用了1个X4超大核,5个A710性能核,2个A520能效核。
CPU核心微架构通过加入更多的流水线单元提高IPC,这些优化单元都需要消耗额外的晶体管数量增加能耗,同时IPC更高的核心会使用更高的时钟频率运行。在20世纪90年代流水线技术的发展带来了处理器性能的快速提升,但是随着功耗墙的限制,高性能核心在性能上比能效核心快几倍,但是在功耗上可能有几十到上百倍的消耗。CPU技术发展不再追求大幅提高IPC来提高性能,而是转向对晶体管更好的利用追求能耗比。
从现代CPU的微架构设计中也能看到,不同指令集的CPU在微架构上也有很多相似之处,更多的差异在解码单元对于不同指令的解码。
提示:IPC高的核心需要使用更高的时钟频率进行执行,主要是因为IPC高的核心有更复杂流水线设计和更积极的流水线调度避免流水线停顿,所以提高时钟频率可以提升性能。IPC低的核心会遇到更多的流水线停顿,提高频率也会导致很多周期流水线处于停顿等待内存读取或分支计算完成造成浪费。
SIMD(Single instruction, multiple data)单指令多数据,是一种通过单个指令同时进行多个数据运算的方式,主要是用于音视频、图像处理、向量运算这些计算场景。通过增加运算单元位宽、计算单元数量数量、寄存器位宽可以同时进行更多数据的运算,普通指令单个周期通常只能支持 2个数据的运算,SIMD指令单个周期可以同时几十个数据的运算。同时一次性读取多个内存数据也可以降低多次读取内存数据带来的数据延迟。大部分常见编程语言都提供对SIMD的支持,可以直接进行使用。
很多图像、音视频等场景,通常只需要更低的数据位宽进行运算,SIMD指令可以同时进行更多数据的运算。目前x86平台的SIMD指令发展到最新的AVX-512,运算宽度提升到 512 位,可以单指令执行 512 位的运算。ARM平台的SIMD指令发展到SSE,最高可执行2048位的运算。
例如一个像素值颜色通常使用 RGBA 32 位格式,Red、Green、Blue、Alpha 分别占 8 位。一个 256 位的 SIMD 指令可以同时对 8 个颜色(32 个 8 位)进行运算,普通指令只能进行 2 个 8 位运算。
SIMD虽然带来了性能的提升,但是芯片需要使用更多的晶体管用来支持SIMD指令更高的位宽计算和更多的寄存器数量。同时SIMD指令一次性传输数据量更大、指令复杂度更高、占用更多的寄存器和运算器,也带来了更多的计算功耗。SIMD也需要软件开发者针对特定场景选择使用SIMD指令进行优化才能得到性能提升。
从某种角度讲,SIMD和GPU的运算方式很相似。通过一次性并行处理更多的数据带来性能提升,同时一次性读取大量数据也可以降低内存数据延迟带来的影响。GPU很像同时并行多线程执行SIMD的多核心处理器,只不过相比CPU设计更复杂性能更高,同时GPU的线程数更多、SIMD通道数更多、SIMD单元数量更多。
近些年更多AI运算场景增加了对于高性能向量运算的要求。虽然CPU通过添加SIMD指令增加了向量运算的能力,但是CPU本身是用于通用计算设计,CPU中只有小部分用于SIMD运算。虽然类似Pytorch、TensorFlow这些AI训练框架都支持SIMD指令,但是使用SIMD进行大规模AI训练相比GPU性能更低,同时成本更高。SIMD更像是传统CPU运算的一种补充,用于简单的小规模运算场景用于提高性能。
超线程是一种STM(同时多线程)技术,通过在单个CPU核心中模拟运行多个线程提高CPU的多线程并行能力。Intel最早在2002年推出了超线程技术,一个核心同时支持2个线程。利用SMT可以避免处理器中长延时事件导致的暂停,提高计算单元的利用率。
超线程技术通过给每个线程增加一套寄存器和PC单元,多个线程共享流水线中的多发射、动态调度等模块,通过寄存器重命名和动态调用可以在一个周期内执行不同线程的多条指令。减少单个线程中发生类似缓存缺失这样的长延时等待事件,让计算单元一直在执行状态提高性能和吞吐量。
超线程技术会增加流水线调度的复杂度,现代CPU核心通常只支持2个线程的SMT。超线程技术需要依赖流水线的动态调度能力,所以现代CPU中通常只有高性能核心才支持。同时超线程技术虽然可以提高20%-30%的多线程性能,但是会增加7%的能耗和降低单核峰值性能。
由于IPC提升和时钟频率提升都因为功耗墙的限制而放缓,现代CPU通过提供更多的物理核心提高多线程并行能力提升指令吞吐量提高性能。通过增加CPU核心数带来的多线程性能提升,带来的能耗增加相比提升IPC、时钟频率更低。现在手机端CPU中也有5-9个核心,PC 级CPU中通常有10-30个核心,服务器CPU中核心数更多。
增加核心数可以复用核心内部的微架构设计,根据CPU的功耗、成本、性能诉求选择核心数量。例如Intel在桌面级酷睿处理器和服务器至强处理器可能会使用同样的核心,只是会增加更多的核心数量。Apple在A系列和M系列芯片也会使用同样的核心。
增加核心数也能带来一定的能耗优势,操作系统内核会根据运算负载动态的调度不同数量的核心进行执行,在运算负载低的时候可以调度更少的核心降低功耗。
现代CPU中通常还会使用大小核异构架构设计来提升能耗比降低功耗。性能核心用于高性能计算场景最大化执行性能,能耗核心用于日常低负载计算场景降低能耗。相同的核心会使用同样的时钟频率来运行,通常会共享使用L2缓存。大小核的设计也增加了操作系统内核对于多核心调度的难度。
类型 | 性能 | 功耗 | 时钟频率 | IPC |
性能核 | 高 | 高 | 更高的时钟频率 | 复杂的流水线设计、IPC 更高 |
能耗核 | 中 | 中 | 更低的时钟频率 | 简单的流水线设计、IPC 更低(更少的解码宽度、没有动态调度、更少的计算单元等) |
近些年CPU通过增加更多的核心数量提高CPU的多线程并行能力,但是这也带来了一些新的问题限制了核心数一直快速增加。首先CPU核心数更多增加缓存一致性的复杂度会影响性能,操作系统内核如何更好的对更多核心进行调度达到最高的能耗比。
同时对于软件开发者来讲,利用越来越多的核心进行编程会更复杂。编程语言以及开发框架也需要进行调整利用更多的核心。同时对于不同的软件类型,可以利用多线程并行执行的部分也是不一样的。(如果一个程序只有10%的运算工作可以并行执行,即使添加更多核心带来的提升也很有限)
虽然增加核心数带来的能耗增加相比IPC、时钟频率更低,但是依然会增加功耗,功耗墙也是限制核心数增加的限制之一。
虽然内存不属于处理器内部的结构,但是处理器运行时会依赖内存中的程序指令和程序数据,所以内存性能对处理器性能的影响很大。因为内存性能提升相比处理器时钟频率提升非常缓慢,当前处理器对内存读写通常需要50-100个时钟周期。关于内存访问速度的提升,一个方向是通过引入多级缓存减少处理器对内存的直接访问,另一个方向是内存自身性能的提升。
为了减少处理器对内存的直接访问,现代处理器引入了SDRAM(Synchronous dynamic random-access memory)存储作为处理器的缓存集成在处理器芯片中。SDRAM的优点是访问速度比内存快很多,缺点是功耗高、成本高(1位需要 6-7 个晶体管)、容量低。
处理器对内存的所有访问都通过缓存进行加载,缓存会保存最近使用过的内存数据,这样下次访问这些数据时就可以直接从缓存中返回避免直接从内存中读取。
以下是一个简单的具有二级缓存的处理器内存读写过程原型,不过现代处理器设计通常会比这个过程更加复杂:
处理器核心将寄存器中的数据保存到内存时,分别写入L1缓存、L2缓存,之后保存到内存中。
缓存性能提升方向主要是提高缓存命中率、降低缓存缺失耗时、降低缓存命中耗时,主要是通过以下这些技能进行提升:
增加缓存的容量,缓存中可以存储的数据越多,缓存命中率也就越高。功耗和成本会限制容量增长的速度,同时因为增加容量会影响访问速度,所以L1缓存容量增长很慢。
现代处理器通常有2-3级缓存,多核处理器每个核心包含一个L1缓存,L2、L3缓存是多个核心共享。读取速度L1 > L2 > L3,容量L3 > L2 > L1,成本L1 > L2 > L3。
这么设计的目的主要是通过局部性原理提高缓存性能。L1缓存关注读取性能,将更常用的内存数据放到容量更小的L1缓存中更快的读取。同时L1缓存设计会将指令和数据分离,提高缓存性能和缓存命中率。L2/L3缓存关注缓存缺失率,将更多的内存数据防止在缓存中减少缓存缺失耗时。
时间局部性 - 被引用过一次的内存数据在未来会被多次引用。
空间局部性 - 一个内存数据被引用,那么未来它临近的内存地址也会被引用。
提示:通常L1缓存是单核心独占、L2缓存可能是单核心独占或多核心共享、L3缓存/内存是所有核心共享。通过MESI协议来解决缓存一致性的问题。
存储类型 | 访问速度 | 容量 | 功能 | |
L1 | 1 - 5 时钟周期 | 64 - 256 KB | 指令、数据 | - |
L2 | 10 - 20 时钟周期 | 512 KB - 2 MB | 数据 | A17 Pro 大核16MB |
L3 | 20 - 50 时钟周期 | 12 - 36 MB | 数据 | - |
DDR | 50 - 100 时钟周期 | 8 - 64 GB | 指令、数据 | - |
通过更优秀的缓存涉及,减少缓存命中时的耗时。但是通常减少命中缓存耗时和增加缓存容量通常会有不可调和的矛盾。
根据前面流水线的介绍,现代处理器通常会对一次性读取内存多条程序指令到放入缓存中,同时也会提前读取后面可能会使用的内存数据到缓存中。但是当提前预加载到缓存中的数据并没有使用到时,会造成额外的功耗浪费。(例如分支预测错误)
将新的数据写入到缓存时,由于容量限制通常需要替换掉旧的缓存数据。常见的替换算法有LRU算法,使用更好的算法可以提高缓存命中率。
虽然通过加入多级缓存可以提高内存读写的性能,但是处理器高速缓存的容量很有限,遇到缓存缺失时还是需要直接访问内存。所以对内存的性能提升依然很重要,内存性能提升主要是从以下四个方向进行提升:
由于内存无法同时满足对延迟、功耗、带宽、成本的要求,现代内存逐渐发展出了多种不同的内存类型。针对不同的计算场景选择使用不同类型的内存,主要是基于处理器对延迟、功耗、带宽、成本的要求进行选择。每一代内存新标准的推出也会逐渐提高延迟、功耗、带宽的性能,同时降低上一代标准的成本。(通常新标准成本更高)
类型 | 最新标准 | 延迟 | 功耗 | 带宽 | 最大带宽 | 面积 | 成本 | 使用场景 | 特点 |
DDR | DDR5 | 低 | 中 | 低 | 64 Gbps | 中 | 低 | PC、服务器 | 延迟最低 |
LPDDR | LPDDR5X | 中 | 低 | 中 | 77 Gbps (8 Gen 3) | 小 | 低 | 手机、笔记本 | 功耗最低 |
GDDR | GDDR6X | 高 | 高 | 高 | 1008 Gbps(RTX 4090) | 大 | 中 | 独立显卡 | 高带宽、功耗最高、延迟最高 |
HBM | HBM3e | 高 | 中 | 超高 | 4800 Gbps(H200) | 小 | 高 | 服务器GPU | 带宽最高、成本最高 |
现代面向移动场景的处理器通常会将LPDDR内存使用3D集成封装技术直接集成到处理器芯片上。优点是可以减少传输物理距离提高传输性能、降低功耗,缺点是无法灵活更换内存。
近些年高速缓存技术发展逐渐放缓,同时缓存缺失是导致流水线停顿的主要原因之一。由于读取延迟限制了L1缓存容量的提升,L1容量提高很少。半导体工艺发展放缓,晶体管数量增长速度降低以及功耗问题,也降低了L2、L3缓存容量增加的速度。同时高速缓存的引入也给编译器和软件开发者带来了更大的挑战,如何更好的利用局部性原理提高缓存命中率:开发者需要编写缓存命中率更高的代码、编译器需要生成缓存命中率更高的程序指令。
提示:增加缓存容量的成本很高。以A17 Pro芯片为例,总共 190 亿个晶体管,因为包含GPU、NPU等协处理器,CPU使用的晶体管数量不超过 30%。缓存大小L2 20MB + L1 192KB,以一个缓存位需要几个晶体管来计算,缓存大概需要耗费几亿个晶体管。
内存技术每一代新标准在增加带宽、容量和能耗比上都有不错的提升,但是读取延迟降低缓慢很多。内存读取延迟导致的内存墙依然是限制处理器性能的主要因素之一。因为内存墙的限制,现在也有一种存算一体的探索方向,将内存和计算单元集成在一起减少数据传输延迟。
现代处理器核心数越来越多,每个核心都有自己的L1缓存,多个核心需要共享L2缓存、L3缓存、内存数据。多核缓存一致性的复杂度越来越高,额外的开销可能会降低读取延迟和增加功耗,限制多核处理器的性能。
提示:从高速缓存和内存上看,更小的程序体积、更小的内存占用是可以增加程序的运行性能的。
SOC(System on Chip)片上系统是一种将多个不同模块封装在一个芯片中的技术。现代CPU基本上都属于SOC芯片,将CPU、GPU、NPU、WIFI、蓝牙、Modem等模块集成到同一个芯片中。由于半导体技术的发展可以集成在芯片上的晶体管数量越来越多,可以将更多的模块集成到一个芯片中带来集成度、性能、系统单元复用率的提升:
模块 | 最新标准 |
提高性能 | 不同模块集成在同一个芯片上,跨模块间通信更快、功耗更低。手机端SOC通常会将内存封装在SOC芯片上,不同模块可以使用统一内存的方式复用内存,降低内存在不同模块间的传输提高性能。 |
提高集成度 | 不同模块集成在同一个芯片上,相比传统多个模块芯片的设计可以复用重复的传输电路或内存等降低成本、降低面积、降低功耗。(例如传统CPU/GPU都有独立内存,封装到SOC中可以复用一个内存即可。) |
虽然带来了性能的优势,但是由于SOC集成了更多模块同时需要模块间互联,芯片设计、制造复杂度更高,导致成本也更高。
现代SOC通常由一个CPU单元、多个协处理器(NPU/GPU)、无线模块(WIFI/蓝牙/蜂窝网络)、多媒体单元(ISP、DSP)、内存控制器、I/O 单元组成:
模块 | 功能 |
CPU | 中央处理器 |
GPU | 图形渲染、高性能运算 |
NPU | 神经网络运算、端测 AI 加速 |
ISP | 相机传感器、拍照/视频图像信号处理、优化画面质量 |
DSP | 音视频/图片硬件编解码 |
无线 | WIFI、蓝牙、蜂窝网络的传输通讯、协议编解码、连接管理 |
Display Engine | 管理屏幕显示、图像数据转换为屏幕格式、图像效果/分辨率优化、帧率调整 |
内存控制器 | 内存读写、内存地址映射、内存一致性、统一内存复用 |
I/O | 管理输入/输出设备的 I/O 读写 |
DSA(Domain Specific Architecture)领域特定架构是一种用于特定领域计算的结算机体系。由于CPU是一种追求通用计算的计算机体系结构,对于特定领域计算(音视频、图形、AI 等)的性能和能效比都比较差。DSA通过面向特定领域计算的设计大幅提高性能和能耗比,解决CPU对于特定领域计算的性能劣势。
现代SOC中的GPU、NPU、DSP就是一种常见的DSA模块。传统CPU通过复杂流水线设计、高速缓存、增加寄存器位数等特性提高CPU的运算性能,但是这会导致大量的晶体管消耗增加成本和能耗。DSA通过减少这些复杂的设计提高晶体管的利用率提高能效,相比CPU执行同样的特定领域运算可以带来的优势:更小的面积、更低的成本、更高的能耗比、更好的性能。
特点 | 说明 | 备注 |
专用存储 | 使用专用存储器减少数据移动 | - |
最小化数据类型 | 使用更小位宽的数据类型来计算、节省存储空间、运算更快 | - |
更多运算单元或存储器 | 加入更多运算单元、更大的存储器 | - |
并行方式 | 选择更有利于特定领域计算的并行方式 | 例如 GPU 的并行方式 |
专用编程语言 | 使用面向特定领域计算的编程语言/框架进行编程 | - |
Chiplet是近几年发展出的一种将不同的功能模块分离成小芯片,并通过先进封装技术组合在一起的新技术。Chiplet主要是为了解决传统SOC遇到的成本高和扩展性问题。
特点 | 说明 | 备注 |
降低成本 | 不同芯片可以使用不同成本的工艺制造、小芯片可以复用降低设计成本、小芯片面积更小成本更低 | - |
灵活性、扩展性 | 根据诉求灵活集成不同的小芯片满足市场需求、3D 封装降低芯片面积 | - |
不过Chiplet对封装技术的要求很好,不同小芯片间的通信设计也很复杂。目前只有少量的芯片使用了这种方式进行芯片制造。
由于CPU通用处理器性能提升放缓和对特性领域计算的能耗比和成本问题,未来也许会加入更多的DSA模块用于提升特定领域计算的性能和能耗比。近些年PC端处理器也在效仿移动端处理器加强DSA单元能力,包括提高核显 GPU 的性能以及加入 NPU。同时Chiplet技术的发展也可以帮助处理器集成更多的DSA单元同时降低成本。
CPU | 频率 | 核心数 | 线程数 | 指令集 | 微架构 | 工艺 | 晶体管数量 | TDP | 发行年份 | 备注 |
Core i9-14900K | 3.2 - 6 GHz | 8 + 16 | 32 | x86-64 | Raptor Cove + Gracemont | 7 nm | - | 125 - 253W | 2023 | - |
Core i9-13900K | 3 - 5.8 GHz | 8 + 16 | 32 | x86-64 | Raptor Cove + Gracemont | 7 nm | - | 125 - 253W | 2022 | - |
Core i9-12900K | 3.2 - 5.2 GHz | 8 + 8 | 24 | x86-64 | Golden Cove + Gracemont | 7 nm | - | 125 - 241W | 2021 | 引入大小核混合架构、支持 DDR5 |
Core i9-11900K | 3.5 - 5.3 GHz | 8 | 16 | x86-64 | Cypress Cove 待确定 | 10 nm | - | 95 - 125 W | 2021 | - |
Core i7-6700K | 4 - 4.2 GHz | 4 | 8 | x86-64 | Skylake | 14 nm | - | 91 W | 2015 | - |
Core i7-4790K | 4 - 4.4 GHz | 4 | 8 | x86-64 | Haswell | 22 nm | - | 88 W | 2014 | - |
Core i7-990X | 3.4 - 3.7 GHz | 6 | 12 | x86-64 | Westmere | 32 nm | 12 亿 | 130 W | 2011 | - |
Core 2 E6700 | 2.66 GHz | 2 | 2 | x86-64 | Conroe | 65 nm | 2.9 亿 | 65 W | 2006 | 引入双核心 |
Pentium D Processor 840 | 3.2 GHz | 2 | 2 | x86-64 | NetBurst | 90 nm | 2.3 亿 | - | 2005 | - |
Pentium 4 Extreme Edition | 3.4 GHz | 1 | 2 | x86-32 | NetBurst | 130 nm | - | 110W | 2004 | 引入超线程 |
Pentium 4 2.8 GHz | 2.8 GHz | 1 | 1 | x86-32 | NetBurst | 130 nm | 5500 万 | - | 2002 | - |
Pentium 3 Processor 1.1 GHz | 1.1 GHz | 1 | 1 | x86-32 | P6 | 180 nm | - | 33 W | 2000 | - |
Pentium Pro 200 MHz | 200 MHz | 1 | 1 | x86-32 | P6 | 500 nm | 550万 | 35W | 1995 | 微解码转换、动态调用、乱序执行、推测执行、引入二级缓存、SSE、支持寄存器更名 |
Pentium | 60 MHz | 1 | 1 | x86-32 | P5 | 800 nm | 310 万 | - | 1993 | - |
80486 | 25 MHz | 1 | 1 | x86-32 | i486 | 1 um | 100万 | - | 1989 | - |
80386 | 20 MHz | 1 | 1 | x86-32 | - | 1.5 um | 27.5万 | - | 1985 | 加入6级流水线 |
80286 | 12.5 MHz | 1 | 1 | x86-16 | - | 1.5 um | 13.4 万 | - | 1982 | - |
80186 | 6 MHz | 1 | 1 | x86-16 | - | 2 um | 5.5 万 | - | 1982 | - |
8086 | 5 MHz | 1 | 1 | x86-16 | - | 3 um | 2.9 万 | 2 W | 1978 | 第一个 x86 架构处理器、16 位、引入8个通用寄存器、分段内存 |
8085 | 3 MHz | 1 | 1 | 8085 | - | 3 um | 6500 | - | 1976 | - |
8080 | 2 MHz | 1 | 1 | 8080 | - | 6 um | 4500 | - | 1974 | 不兼容 8008 |
8008 | 0.5 MHz | 1 | 1 | 8008 | - | 10 um | 3500 | 1 - 2 W | 1972 | 第一个 8 位可编程处理器 |
代号 | 类型 | 指令集 | 线程数 | 解码宽度 | ROB | 发射宽度 | 分支预测惩罚 | L1 缓存 | L2 缓存 | SIMD | IPC |
Raptor Cove | Intel 性能核 | x86-64 | 2(超线程) | 6 | 512 | 6 | 8 | 48 KB(D)、32 KB(I) | 2 MB | AVX 512 | 3.525、4.23(超线程) |
Gracemont | Intel 能效核 | x86-64 | 1 | 6 | 256 | 6 | 8 | 32 KB(D)、64 KB(I) | 2 MB(共享) | AVX 256 | 2.52 |
A520 | ARM 小核 | ARMv9 | 1 | 3 | 0 | 3 | - | 64 KB(D)、32 KB(I) | 256 KB | SVE | 0.94 |
A720 | ARM 大核 | ARMv9 | 1 | 5 | 192 | 5 | - | 64 KB(D)、32 KB(I) | 512 KB | SVE | 3.03 |
X4 | ARM 超大核 | ARMv9 | 1 | 10 | 384 | 10 | - | 64 KB(D)、64 KB(I) | 2 MB | SVE | 4.4 |
A17 E | Apple 能效核 | ARMv8 | 1 | 5 | 224 | 5 | 5 | 128 KB(D) + 64 KB(I) | 4 MB(共享) | NEON | 3.05 |
A17 P | Apple 性能核 | ARMv8 | 1 | 9 | 670 | 9 | 9 | 64 KB(D)、128 KB(I) | 16 MB(共享) | NEON | 5.06 |
CPU核心数越来越多,软件开发者需要使用面向多线程的利用更多的核心并行才能提高程序执行的性能。同时也可以导致编程语言、编程范式、框架的一些改变:
SOC不断增加更多的DSA单元增加特定领域运算的能耗比,未来可能需要面向更多不同类型的处理器进行编程,不同的处理器会导致编程语言和编程范式的改变。
CPU性能提升放缓带给软件的性能提升更少,同时软件自身功能不断增加对于性能的消耗,软件追求更高的性能提升就需要做更多的软件性能优化。
作者:京东零售 何骁
来源:京东云开发者社区 转载请注明来源
页面更新:2024-04-26
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号