提示:Intel最早在2004年推出了30+级流水线的CPU,但是流水线数量太长会导致微架构设计非常复杂,同时分支预测失败惩罚更高。这些原因导致目前CPU通常使用10级左右的流水线。
读取指令读取指令将内存中的指令读取到CPU中的指令缓冲区中,相关的优化是为了降低读取指令延迟和读取更多指令到CPU中,提高流水线的吞吐量。
多指令读取由于从内存中读取程序指令延迟比较长,现代CPU会按照PC寄存器的地址一次性读取多条后面需要执行的程序指令CPU中,减少后续流水线空闲时间。将指令放在指令缓冲区中,等待解码器的使用。

由于一次性读取多条程序指令,会遇到一个问题就是当分支判断的时候由于分支还未执行无法知道后续分支执行的方向。通过添加分支预测单元提前预测分支可能的执行方向读取后续需要执行的程序指令。
分支预测分为动态分支预测和静态分支预测。高性能CPU核心都会使用动态分支预测的方式,分支预测成功率可以达到80%-90%。分支预测错误会导致分支预测惩罚需要回滚错误分支的指令执行,通常会导致10+个周期的流水线惩罚。
静态分支预测和动态分支预测类型
实现方式
优点
缺点
详情
静态分支预测
编译器
实现简单、成本低
预测准确性比较差
在编译器中插入相关分支预测判断
动态分支预测
CPU
预测成功率高
成本高、增加功耗
一种简单实现:在每个分支执行完成的时候,将分支结果保存到缓存中进行统计。分支预测执行判断时,根据之前这个分支的执行结果选择概率更高的执行方向。
L1 指令缓存为了避免每次从内存中读取指令延迟比较长,将读取过的指令存入缓存中。经常使用的指令就可以直接从缓存中读取,但是L1缓存由于读取性能的限制容量有限,通常只有几十KB,在缓存缺失的时候可能会从内存中读取指令导致流水线卡顿。
TLB 缓存由于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内核中通常有更多的物理寄存器数量,超过指令集中定义的寄存器数量。需要对寄存器进行重命名放置到不同的寄存器中提高指令级并行,例如两条指令都使用同一个寄存器可以放置到不同的寄存器中进行处理。指令重排序 - 因为需要同时发射多条指令提高吞吐量,所以需要对指令的执行顺序进行调整导致乱序执行。但是会保证最终的执行结果符合原本的预期。数据预读取 - 提前将后面程序指令需要使用的内存数据加载到缓存中,避免缓存缺失导致的延时。分支预测惩罚 - 流水线执行过程中会将分支预测相关的指令执行结果暂时保存,等待最终分支预测正确时才会执行完成。如果分支预测错误需要回滚这些错误预测的指令。指令发射 - 将对应的指令发射到计算单元执行指令多执行一个时钟周期可以并行执行不同的计算单元,只要当前计算单元有空闲。
计算单元缓冲区将指令和指令数据发射到计算单元的缓冲区中等待执行,当计算单元空闲时即可开始执行。
增加计算单元增加更多的整数运算、浮点运算、分支判断和内存读写单元数量,一个时钟周期可以执行更多的运算和内存读写操作。现代CPU性能核心通常有10+个算数单元和多个内存加载单元。
L1/L2 数据缓存通过L1、L2缓存读取内存数据,将常用的数据保存到高速缓存中,提高下一次读取的性能。
主流 CPU 核心的微架构设计现代CPU通常使用大小核设计,性能核有更复杂的流水线设计性能更好,能效核流水线设计更简单性能会差一些。
IntelIntel最新的桌面级别处理器Core i9 14900K使用了8个Raptor Cove性能核和16个Gracemont能效核。
Raptor Cove性能核Gracemont 能效核AppleApple最新的A17 Pro处理器使用了2个性能核和4个能效核。
性能核能效核ARM高通最新的8 Gen 3处理器使用了1个X4超大核,5个A710性能核,2个A520能效核。
X4 超大核A720 性能核A520 能效核小结CPU核心微架构通过加入更多的流水线单元提高IPC,这些优化单元都需要消耗额外的晶体管数量增加能耗,同时IPC更高的核心会使用更高的时钟频率运行。在20世纪90年代流水线技术的发展带来了处理器性能的快速提升,但是随着功耗墙的限制,高性能核心在性能上比能效核心快几倍,但是在功耗上可能有几十到上百倍的消耗。CPU技术发展不再追求大幅提高IPC来提高性能,而是转向对晶体管更好的利用追求能耗比。
从现代CPU的微架构设计中也能看到,不同指令集的CPU在微架构上也有很多相似之处,更多的差异在解码单元对于不同指令的解码。
提示:IPC高的核心需要使用更高的时钟频率进行执行,主要是因为IPC高的核心有更复杂流水线设计和更积极的流水线调度避免流水线停顿,所以提高时钟频率可以提升性能。IPC低的核心会遇到更多的流水线停顿,提高频率也会导致很多周期流水线处于停顿等待内存读取或分支计算完成造成浪费。
数据级并行:SIMD 和 GPUSIMDSIMD(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从某种角度讲,SIMD和GPU的运算方式很相似。通过一次性并行处理更多的数据带来性能提升,同时一次性读取大量数据也可以降低内存数据延迟带来的影响。GPU很像同时并行多线程执行SIMD的多核心处理器,只不过相比CPU设计更复杂性能更高,同时GPU的线程数更多、SIMD通道数更多、SIMD单元数量更多。
SIMD 和 GPU小结近些年更多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 - 处理器核心需要读取数据时,将数据内存地址发送给L1缓存。L1缓存检查是否有缓存数据,如果L1缓存中有缓存数据直接返回。如果缓存缺失将数据内存地址发送给L2。L2 - L2缓存检查是否有缓存数据。如果L2缓存中有缓存数据将数据写入L1缓存同时读取到处理器中。如果缓存缺失将数据内存地址发送给内存。内存 - 从内存中读取数据,之后分别写入L2缓存、L1缓存,然后读取到处理器中。保存处理器核心将寄存器中的数据保存到内存时,分别写入L1缓存、L2缓存,之后保存到内存中。
缓存提升方向缓存性能提升方向主要是提高缓存命中率、降低缓存缺失耗时、降低缓存命中耗时,主要是通过以下这些技能进行提升:
增加容量增加缓存的容量,缓存中可以存储的数据越多,缓存命中率也就越高。功耗和成本会限制容量增长的速度,同时因为增加容量会影响访问速度,所以L1缓存容量增长很慢。
使用多级缓存现代处理器通常有2-3级缓存,多核处理器每个核心包含一个L1缓存,L2、L3缓存是多个核心共享。读取速度L1 > L2 > L3,容量L3 > L2 > L1,成本L1 > L2 > L3。
这么设计的目的主要是通过局部性原理提高缓存性能。L1缓存关注读取性能,将更常用的内存数据放到容量更小的L1缓存中更快的读取。同时L1缓存设计会将指令和数据分离,提高缓存性能和缓存命中率。L2/L3缓存关注缓存缺失率,将更多的内存数据防止在缓存中减少缓存缺失耗时。
时间局部性 - 被引用过一次的内存数据在未来会被多次引用。
空间局部性 - 一个内存数据被引用,那么未来它临近的内存地址也会被引用。
现代CPU多级缓存设计提示:通常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算法,使用更好的算法可以提高缓存命中率。
内存性能提升虽然通过加入多级缓存可以提高内存读写的性能,但是处理器高速缓存的容量很有限,遇到缓存缺失时还是需要直接访问内存。所以对内存的性能提升依然很重要,内存性能提升主要是从以下四个方向进行提升:
读取延迟 - 持续减少内存读取延迟,可以降低缓存缺失从内存中读取数据的耗时。功耗 - 由于移动设备等低功耗场景的出现,对内存产生的功耗也有更低的要求。带宽 - 因为内存性能提升很慢,同时现代处理器不断的引入新的协处理器例如GPU、NPU需要进行更多的内存数据传输。增加内存带宽虽然无法降低单次内存读取延迟但是可以同时传输更多的数据。成本 - 更低的成本可以使商品价格更低,同时可以增加更多的内存容量。更多内存类型由于内存无法同时满足对延迟、功耗、带宽、成本的要求,现代内存逐渐发展出了多种不同的内存类型。针对不同的计算场景选择使用不同类型的内存,主要是基于处理器对延迟、功耗、带宽、成本的要求进行选择。每一代内存新标准的推出也会逐渐提高延迟、功耗、带宽的性能,同时降低上一代标准的成本。(通常新标准成本更高)
不同内存类型特点类型
最新标准
延迟
功耗
带宽
最大带宽
面积
成本
使用场景
特点
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、DSA 和 ChipletSOCSOC(System on Chip)片上系统是一种将多个不同模块封装在一个芯片中的技术。现代CPU基本上都属于SOC芯片,将CPU、GPU、NPU、WIFI、蓝牙、Modem等模块集成到同一个芯片中。由于半导体技术的发展可以集成在芯片上的晶体管数量越来越多,可以将更多的模块集成到一个芯片中带来集成度、性能、系统单元复用率的提升:
模块
最新标准
提高性能
不同模块集成在同一个芯片上,跨模块间通信更快、功耗更低。手机端SOC通常会将内存封装在SOC芯片上,不同模块可以使用统一内存的方式复用内存,降低内存在不同模块间的传输提高性能。
提高集成度
不同模块集成在同一个芯片上,相比传统多个模块芯片的设计可以复用重复的传输电路或内存等降低成本、降低面积、降低功耗。(例如传统CPU/GPU都有独立内存,封装到SOC中可以复用一个内存即可。)
虽然带来了性能的优势,但是由于SOC集成了更多模块同时需要模块间互联,芯片设计、制造复杂度更高,导致成本也更高。
SOC 组成结构现代SOC通常由一个CPU单元、多个协处理器(NPU/GPU)、无线模块(WIFI/蓝牙/蜂窝网络)、多媒体单元(ISP、DSP)、内存控制器、I/O 单元组成:
模块
功能
CPU
中央处理器
GPU
图形渲染、高性能运算
NPU
神经网络运算、端测 AI 加速
ISP
相机传感器、拍照/视频图像信号处理、优化画面质量
DSP
音视频/图片硬件编解码
无线
WIFI、蓝牙、蜂窝网络的传输通讯、协议编解码、连接管理
Display Engine
管理屏幕显示、图像数据转换为屏幕格式、图像效果/分辨率优化、帧率调整
内存控制器
内存读写、内存地址映射、内存一致性、统一内存复用
I/O
管理输入/输出设备的 I/O 读写
高通 8 gen 3Hexagon Processor - AI 模块FastConnect - WIFI、蓝牙Apple M3从M3的设计上可以看出,现代SOC中CPU部分占用的硅面积不超过30%DSADSA(Domain Specific Architecture)领域特定架构是一种用于特定领域计算的结算机体系。由于CPU是一种追求通用计算的计算机体系结构,对于特定领域计算(音视频、图形、AI 等)的性能和能效比都比较差。DSA通过面向特定领域计算的设计大幅提高性能和能耗比,解决CPU对于特定领域计算的性能劣势。
DSA 设计现代SOC中的GPU、NPU、DSP就是一种常见的DSA模块。传统CPU通过复杂流水线设计、高速缓存、增加寄存器位数等特性提高CPU的运算性能,但是这会导致大量的晶体管消耗增加成本和能耗。DSA通过减少这些复杂的设计提高晶体管的利用率提高能效,相比CPU执行同样的特定领域运算可以带来的优势:更小的面积、更低的成本、更高的能耗比、更好的性能。
DSA 设计原则特点
说明
备注
专用存储
使用专用存储器减少数据移动
-
最小化数据类型
使用更小位宽的数据类型来计算、节省存储空间、运算更快
-
更多运算单元或存储器
加入更多运算单元、更大的存储器
-
并行方式
选择更有利于特定领域计算的并行方式
例如 GPU 的并行方式
专用编程语言
使用面向特定领域计算的编程语言/框架进行编程
-
ChipletChiplet是近几年发展出的一种将不同的功能模块分离成小芯片,并通过先进封装技术组合在一起的新技术。Chiplet主要是为了解决传统SOC遇到的成本高和扩展性问题。
特点
说明
备注
降低成本
不同芯片可以使用不同成本的工艺制造、小芯片可以复用降低设计成本、小芯片面积更小成本更低
-
灵活性、扩展性
根据诉求灵活集成不同的小芯片满足市场需求、3D 封装降低芯片面积
-
不过Chiplet对封装技术的要求很好,不同小芯片间的通信设计也很复杂。目前只有少量的芯片使用了这种方式进行芯片制造。
Meteor LakeIntel2023年推出的Meteor Lake处理器使用Chiplet封装,CPU使用Intel4nm工艺,Graphics使用台积电5nm工艺,SOC、IO使用台积电6nm工艺。小结由于CPU通用处理器性能提升放缓和对特性领域计算的能耗比和成本问题,未来也许会加入更多的DSA模块用于提升特定领域计算的性能和能耗比。近些年PC端处理器也在效仿移动端处理器加强DSA单元能力,包括提高核显 GPU 的性能以及加入 NPU。同时Chiplet技术的发展也可以帮助处理器集成更多的DSA单元同时降低成本。
主流 CPU 发展Intel 处理器发展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 位可编程处理器
最新 CPU 微架构对比代号
类型
指令集
线程数
解码宽度
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核心数越来越多,软件开发者需要使用面向多线程的利用更多的核心并行才能提高程序执行的性能。同时也可以导致编程语言、编程范式、框架的一些改变:
多线程编程 - 更多的使用到多线程编程利用多核的性能简化并行编程 - 编程语言提供了更多特性简化并行编程,例如async/await函数、结构化并发异步编程 - 更多的跨线程异步调用非共享内存的并发模型 - 可以减少数据竞争、减少线程锁使用、减少线程切换的耗时,Go、Rust、Swift语言都提供了类似的并发模型UI框架 - 传统UI框架都是基于单线程模型设计,UI框架和浏览器需要更好的利用多核心的性能优势。同时非UI操作需要更多考虑多线程的利用减少主线程的消耗函数式编程 - 函数式编程更有利于并行执行变得更流行SIMD、DSA单元SOC不断增加更多的DSA单元增加特定领域运算的能耗比,未来可能需要面向更多不同类型的处理器进行编程,不同的处理器会导致编程语言和编程范式的改变。
硬件性能提升放缓CPU性能提升放缓带给软件的性能提升更少,同时软件自身功能不断增加对于性能的消耗,软件追求更高的性能提升就需要做更多的软件性能优化。
AOT - 类似Java、C#、JS这些传统的解释执行编程语言开始追求AOT编译提高性能,新的编程语言通常也会支持AOT编译简化内存管理 - 简化传统的自动内存管理方式,使用更简单的内存管理方式。例如Rust的所有权更多利用编译器去检查内存安全值类型 - 更多的值类型使用,栈上的值类型性能更好编译器 - 编译器利用静态优化生成性能更好的代码减少运行时消耗,静态类型系统、静态方法派发相关链接计算机组成与设计:硬件/软件接口 RISC-V版(原书第2版)计算机体系结构:量化研究方法(第6版)ARM64体系结构编程与实践芯片战争芯片简史Introducing the Arm architectureArm A-Profile ArchitectureArm A64 Instruction Set ArchitectureArm A-profile A64 Instruction Set ArchitectureAArch64 memory managementSnapdragon 8 Gen 3 Mobile PlatformSnapdragon X EliteNanoReviewGeekbenchIntel Core i9-14900KIntel Core i9-10900KIntel Core 2 E6700Pentium 4 Processor Extreme EditionIntel Pentium III Processor 1.1 GHzIntel Pentium Pro 200 MHz804868038680286801868086Intel ProcessorsCPU 微架构设计作者:京东零售 何骁
来源:京东云开发者社区 转载请注明来源