CPU架构与优化
详细记述CPU架构以及与处理器性能优化有关的知识,方法,和实际案例。
一凡stkeke
程序猿要非常勤奋地把自己变成一个懒货
展开
-
Intel Skylake (Server) 架构/微架构/流水线 (5) - 非时效存储
Non-Temporal Store on Skylake Server Microarchitecture考虑到在Skylake Server微架构中,LLC的每个存储体(bank)容量所发生的变化,如果程序/库/驱动代码只使用LLC来确定每处理器核可用的片上缓存容量,则它们可能会看到在Skylake微架构上缓存容量缩小了,因此可能会考虑使用非时效存储(non-temporal store)...原创 2019-01-14 07:05:14 · 797 阅读 · 3 评论 -
Intel Skylake (Server) 架构/微架构/流水线 (4) - 高速缓存推荐用法
Skylake Server Microarchitecture Cache Recommendations下表是Skylake与Broadwell微架构上缓存指标的比较。表:Skylake与Broadwell微架构缓存比较 Cache Level Category Broadwell Skylake Server...原创 2019-01-14 07:05:06 · 1099 阅读 · 0 评论 -
Intel Skylake (Server) 架构/微架构/流水线 (3) - 高速缓存
Skylake Server Microarchitecture Cache相比于前代基于Broadwell微架构的前代Intel Xeon处理器,基于Skylake Server微架构的Intel Xeon Processor Scalable Family对处理器core与uncore架构都做了重大的改进,以期提升某些部件的性能和可扩展性。Larger Mid-level Cache...原创 2019-01-14 07:04:58 · 960 阅读 · 0 评论 -
Intel Skylake (Server) 架构/微架构/流水线 (2) - 体系结构新特性
Intel Skylake Server微架构引入了如下的新特性(某些特性可能不是全系处理器标配),允许程序员为应用程序优化性能和能耗。处理器核基于Intel Skylake Server微架构,这个微架构是基于改进了制程的Kaby Lake微架构注:基于Kaby Lake的服务器主要集中的E3 v6系列。可参考https://en.wikipedia.org/wiki/Kaby_Lake#...原创 2019-01-14 07:04:45 · 1943 阅读 · 0 评论 -
Intel Skylake (Server) 架构/微架构/流水线 (1) - 流水线概述
Intel Skylake (Server) MicroarchitectureIntel® Xeon® Processor Scalable Family基于Intel Skylake Server微架构,主要面向于服务器市场。可以使用CPUID指令判断处理器的类型,然后查询对应的微架构。注:我机器上CPUID指令的DisplayFamily_DisplayModel签名是06_55H,...原创 2019-01-13 08:13:48 · 3708 阅读 · 0 评论 -
Intel Kaby Lake架构/微架构/流水线
Intel Kaby Lake Microarchitecture这部分内容主要来自于Wikipedia/Wikichip。Kaby Lake微架构是Intel Skylake Client微架构的继任者,面向与主流的桌面和移动设备。Kaby Lake是Intel PAO模式的第一个“Optimization”版本,本质上是Skylake微架构的优化版本。注:Intel PAO模式, ...原创 2019-01-13 08:13:35 · 2441 阅读 · 0 评论 -
Intel Skylake (Client) 架构/微架构/流水线 (5) - PAUSE指令时延
PAUSE Latency in Skylake MicroarchitecturePAUSE指令通常用于软件线程中,这些线程运行在一个处理器核的两个逻辑处理器中,等待某个锁被释放。这种短小的等待循环可能持续数十个或者几百个周期,所以处于性能考虑,最好在等待期间占据CPU,而不是放弃CPU,将其送还回操作系统。如果可以预知等待时间有数千个周期或更长,则最好通过调用操作系统的同步API函数将CP...原创 2019-01-13 08:13:27 · 985 阅读 · 0 评论 -
Intel Skylake (Client) 架构/微架构/流水线 (4) - 高速缓存&存储器子系统
Cache and Memory SubsystemSkylake Client微架构的缓存层级结构具有如下的增强:较前代具有更高的带宽 更大的缓冲区,可以同时处理更大的读存与写存操作 处理器可以同时并行地做两个页面走查(page walk),前几代只能做单页面走查。 注:据wikipedia https://en.wikipedia.org/wiki/Page_table ...原创 2019-01-13 08:13:21 · 2123 阅读 · 0 评论 -
Intel Skylake (Client) 架构/微架构/流水线 (3) - 乱序执行引擎
The Out-of-Order Execution Engine注:下面这个对比实际上来自与Skylake Server微架构,不知道是否适用于Skylake Client微架构,放在这里供参考。Skylake Client微架构乱序执行引擎的增强如下:比前代微架构更大的缓冲区,允许更深的乱序执行 改善了除法/平方根和近似倒数(approximate reciprocals)的...原创 2019-01-13 08:13:15 · 1352 阅读 · 0 评论 -
Intel Skylake (Client) 架构/微架构/流水线 (2) - 前端
The Front End相比起前代,Skylake Client微架构的前端做了如下增强:传统的译码流水线可以每周期译码出5条微指令,前代是4条微指令。 译码后微指令缓存(DSB,即Decoded ICache)可以每周期发送6条微指令给微指令队列IDQ(Instruction decoded queue,即uop queue)。对于IDQ,如果开启了超线程,每个逻辑处理器可以保存...原创 2019-01-13 08:13:08 · 690 阅读 · 2 评论 -
Intel Skylake (Client) 架构/微架构/流水线 (1) - 流水线概述
Intel Skylake Client MicroarchitectureIntel Skylake Client微架构是Haswell/Broadwell微架构的继任者,除了继承了前代微架构的成功之处,还做了多方面的功能与性能增强。下面是Skylake微架构流水线的功能功能框图。更大的内部缓冲区,允许更深的乱序执行和更高的高速缓存带宽 提升流水线前端吞吐量 增强的分支预测器 ...原创 2019-01-13 08:12:57 · 2230 阅读 · 0 评论 -
Intel Haswell/Broadwell架构/微架构/流水线 (8)-Broadwell微架构
The Broadwell MicroarchitectureIntel Core™ M处理器基于Broadwell微架构。Broadwell微架构从Haswell演进而来同时还提供了多种增强。本节概述其增强特性:浮点乘法指令执行时延从前代Haswell微架构的5个周期下降为3个周期。这也适用于AVX/SSE与FP指令集。 gather指令的吞吐量获得了巨大的提升。 PCLMULQDQ...原创 2019-01-13 08:12:41 · 866 阅读 · 0 评论 -
Intel Haswell/Broadwell架构/微架构/流水线 (6)-Unlamination微指令离解过程
Unlamination某些微熔合后的指令不能作为单个微指令被分配(注:应该是在流水线allocate阶段),因此它们只能在微指令队列中分解为两条微指令。这个将“熔合的微指令分解为多条微指令”的过程被称为“离解过程”(unlamination)。如果被熔合的指令源(fused instruction source,下面马上会讲解哪些是指令源以及提供示例)超过3个,即若大于等于4个,就会发生...原创 2019-01-13 08:12:22 · 500 阅读 · 0 评论 -
Intel Haswell/Broadwell架构/微架构/流水线 (5)-高速缓存&存储器子系统
Cache and Memory Subsystem高速缓存层级结构与前代微架构类似,每个处理器核包括一级指令缓存,一级数据缓存,一个混和式二级缓存,核外的三级混和式缓存容量与特定的产品配置有关。三级缓存由多个缓存分片构成,每个分片的容量随产品配置不同,各个分片通过互联环路连接。关于高速缓存的详细信息可以通过CPUID的叶4获得。三级缓存位于核外子系统中,由所有的处理器核共享使用。在某些产品配...原创 2019-01-12 14:50:26 · 1201 阅读 · 2 评论 -
Intel Haswell/Broadwell架构/微架构/流水线 (4)-流水线执行引擎
Execution Engine下表列出了Haswell微架构的发射口以及对应的操作 Port 0 Port 1 Port2, 3 Port 4 Port 5 Port 6 Port 7 ALU, Shift ...原创 2019-01-12 14:50:13 · 822 阅读 · 0 评论 -
Intel Haswell/Broadwell架构/微架构/流水线 (3)-流水线乱序引擎
The Out-of-Order Engine乱序引擎的关键部件与重大增强概述如下:重命名器(Renamer):重命名器将微指令从微指令队列中移到调度器中,同时绑定对应的发射口与执行资源。Zero-idiom,one-idiom和zero-latency register MOV操作由重命名器来执行,这样可以节省调度器和执行核的资源,提升性能。注:zero-idiom操作,将某个寄存器...原创 2019-01-12 14:50:02 · 757 阅读 · 0 评论 -
Intel Haswell/Broadwell架构/微架构/流水线 (2)-流水线前端
The Front End除了继承了Sandy Bridge/Ivy Bridge微架构的前端特性,Haswell微架构对流水线前端做的额外增强如下:微指令缓存(uop cache,即decoded ICache)在两个逻辑处理器之间分区使用(即各用一半的缓存容量) 指令译码器按周期交替为每个逻辑处理器进行译码。如果某个兄弟逻辑处理器处于空闲状态(即无指令需要译码),则活跃逻辑处理器可以...原创 2019-01-12 14:49:50 · 657 阅读 · 0 评论 -
Intel Haswell/Broadwell架构/微架构/流水线 (1)-流水线概述
Intel Haswell/Haswell-E/Broadwell MicroarchitectureIntel Haswell微架构基于Sandy Bridge / Ivy Bridge微架构,继承了前代微架构的成功之处。下图是Haswell微架构的基本流水线功能框图。通常,在下述章节中介绍的内容也适用于Broadwell微架构。正对Broadwell微架构所做的增强在最后一节中概述。...原创 2019-01-12 14:49:40 · 3557 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (20) - IvyBridge微架构
Intel® Ivy Bridge Microarchitecture第三代Intel Core处理器是基于Ivy Bridge微架构的。上述的Sandy Bridge微架构的特性也都适用于Ivy Bridge微架构。本节概述与Sandy Bridge不同的特性,可能会影响到程序的编码与性能。Ivy Bridge微架构支持的新指令包括:半精度浮点值与其他类型的相互转换指令 基于硬件的...原创 2019-01-12 14:06:36 · 1656 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (19) - 系统代理
System Agent在Sandy Bridge微架构中实现的系统代理包括了如下的组件:一个总裁器,用于管理所有的访问请求,并将这些请求路由(即转发)到正确的位置上。访问请求可能来自于环域(ring domain)和I/O(PCIe* 和DMI)。 PCIe控制器,用于连接外部PCIe设备。PCIe控制器根据产品的分割规范(product segment specifics)可能具有不...原创 2019-01-12 14:06:23 · 423 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (18) - 数据预取
Data Prefetching使用软件预取指令,硬件预取机制,或者两者的任意组合,都可以将数据投机式地加载到L1D中。程序员可以使用4条SSE预取指令来实施软件控制的预取操作。这些指令给处理器提供一些“提示”,请求将数据行加载到指定的某级缓存中。注意:软件控制的预取是针对数据的,不要预取代码。接下来讲述Sandy Bridge提供的各种的硬件预取机制以及与前代微架构相比所作的增强点。...原创 2019-01-12 14:06:11 · 814 阅读 · 2 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (17) - 互联环路&LLC
Ring Interconnect and Last Level Cache片上系统设计提供了一个高带宽的双向环路总线,用于连接IA处理器核与核外的各子系统。在第二代Intel Core处理器2xxx系列(即基于Sandy Bridge微架构的处理器)上,核外子系统包括系统代理(system agent),图形单元,和最后级高速缓存LLC(即L3 Cache)。LLC由多个缓存分片构成。分...原创 2019-01-12 14:05:59 · 483 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (16) - L1数据缓存/存储转发&访存消歧&存储体冲突
Store Forwarding如果读存操作紧跟着写存操作,且要读取的数据包含在要写入的数据中,则数据可能可以从写操作直接转发给读操作。这个过程叫做“存储-读取转发”,简称为“存储转发”。这种技术可以节省读操作的时延周期数,因为读操作无需等待写操作完成后在从存储器中读取数据,而是直接从写操作中获取数据(注:从写存缓冲区中把数据转发给读操作)。利用存储转发机制,程序员可以快速的移动复杂的结构体,...原创 2019-01-12 14:05:48 · 685 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (15) - L1数据缓存/读&写&地址转换
L1 DCache (L1D)L1D指的是一级数据缓存,通过缓存内部的数据结构(即硬件逻辑),管理所有类型的读存与访存请求:允许投机式,乱序发射读存与写存请求 确保退役的读存与写存指令在退役时具有正确的数据 确保读存与写存操作遵循IA32与Intel 64指令集架构定义的访存顺序规则表:L1D的构件 Component Sandy Bridge ...原创 2019-01-10 08:24:18 · 620 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (14) - 读存操作&写存操作
Load and Store Operation Overview本节讲述读存与写存操作。Loads当指令从回写式类型的存储器中的某个地址读取数据时,处理器会从高速缓存和存储器中查找数据。下表描述的是访问查找顺序以及最佳情形时延。实际的时延可能随着缓存队列的占用率,LLC环路的占用率,存储器模块以及它们的性能参数发生变化。表:查找顺序和读存时延 Level ...原创 2019-01-10 08:24:05 · 373 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (13) - 缓存层级结构
Cache Hierarchy每个处理器核中,高速缓存的层级结构包括一级指令缓存LII,一级数据缓存LID,以及二级缓存。如果开启了Intel超线程技术,数据缓存有可能被两个逻辑处理器共享使用。二级缓存是混和式的,由指令与数据共享使用。物理处理器中所有的处理器核通过一个互联环路连接到共享的三级缓存,即最后级缓存LLC。将线性地址转换为物理地址的过程中,高速缓存会利用指令地址转换旁查缓冲区I...原创 2019-01-10 08:23:53 · 476 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (12) - 执行核
The Execution Core执行核的特点是1)超标量,2)乱序处理指令。通过高效处理最常用的操作,同时最小化潜在的时延,执行核优化了总体执行性能。相比起前代微架构,Sandy Bridge的乱序执行核在如下几个方面改进了执行单元的组织结构:降低了读口(即load端口)的停顿 降低了回写时的冲突与时延 节省电能 当非规格化输入以及下溢输出时,减少了SIMD浮点辅助(下面有解...原创 2019-01-09 16:51:48 · 616 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (11) - 乱序引擎/重命名器&调度器
Renamer从上图中可以看出,重命名器是连接“有序前端”与“调度器的数据流世界(即乱序引擎)”的桥梁。它每周期可以最多从微指令队列搬移4条微指令到乱序引擎。尽管重命名器最多可以搬移4条微指令(未熔合的,微熔合的,宏熔合的),这个带宽已经等价于发射口的带宽(每周期6条微指令)。在这个过程中,乱序核执行如下的步骤:将微指令中x86架构的源操作数/目的操作数重命名为微架构中的源/目的操作数 ...原创 2019-01-09 16:51:37 · 345 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (10) - 乱序引擎概述
The Out-of-Order Engine乱序引擎相较于前代微架构提供了更好的性能,同时也具有极佳的电力特征(excellent power chacteristics,即更好的能效)。乱序引擎侦测到依赖链,将其发送(到执行核)进行乱序执行,同时还维护正确的数据流。当某个依赖链等待某项资源时,例如正等待来自于二级缓存的数据行,乱序引擎会将另一个就绪依赖链送到执行核执行。这种方式可以提升处理...原创 2019-01-09 16:51:25 · 362 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (9) - 流水线前端/微指令队列&循环流侦测器LSD
Micro-op Queue and the Loop Stream Detector (LSD)微指令队列将流水线前端与乱序引擎解耦合(即隔离开)。它位于微指令生成单元与重命名单元之间(参看上图),主要功能是用于隐藏不同的微指令来源(即传统译码流水线,MSROM和微指令缓存)产生的“气泡现象(即带宽不均衡)”,确保每周期可以发送4条微指令给流水线后续阶段(即乱序引擎)。对某些指令类型,微...原创 2019-01-09 16:51:11 · 707 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (8) - 流水线前端/分支预测
Branch Prediction分支预测机制会预先推测分支目标,让处理器在分支指令实际计算出决断结果之前就开始执行分支路径上的指令。所有的分支都会利用分支预测单元BPU做预测。分支预测单元在预测分支目标时不但会基于分支的EIP,而且还会参考到达这个EIP的执行路径。BPU可以高效的预测如下的分支类型:条件分支 直接调用与跳转 间接调用与跳转 返回指令...原创 2019-01-08 16:37:44 · 341 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (7) - 流水线前端/译码后指令缓存
Decoded ICache译码后微指令缓存本质上是对传统的译码流水线的高速缓存加速器。通过缓存微指令,可以提供如下的优势:减少由于分支预测失败导致的延迟 增加发射微指令到乱序引擎的带宽 降低流水线前端的能耗译码后微指令缓存存储指令译码器生成的微指令。以后当这些微指令需要被执行时,可以直接从缓存中获取,而不再需要这些微指令的取指和译码阶段,从而节省前端的能耗,消除译码延迟。微指令缓存...原创 2019-01-08 16:37:26 · 459 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (6) - 流水线前端微熔合/宏熔合
Micro Fusion微熔合将来自于同一条x86指令的多条微指令熔合成单条复杂的微指令.这条复杂的微指令可以被分发到乱序执行核任意多次,就好象没有进行过微熔合一样(即乱序执行核并不能感知到微熔合机制的存在)。微熔合机制使得程序员可以使用“存储器到寄存器”这样的操作方式(这种操作在复杂指令集计算机中很常见),来编写程序而不需担心会损失前端译码带宽。微熔合可以整体提升指令从译码到退役的带宽,...原创 2019-01-08 16:37:13 · 356 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (5) - 流水线前端传统译码器
Legacy Decode Pipeline传统的译码流水线由下列部件/单元构成:指令地址转换旁查缓冲区ITLB,指令缓存,指令预译码器,指令译码单元(一个复杂译码器/三个简单译码器)。Instruction Cache和ITLB指令读取是通过ITLB查询然后在指令缓存中按照16字节对齐的方式读取指令流。指令缓存可以每周期发送16字节指令流到指令预译码器。下表比较了SandyBridg...原创 2019-01-07 13:25:41 · 495 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (4) - 流水线前端概述
The Front End本节讲述流水线前端的关键特征。下表列出了前端的主要部件,以及对应的功能和所面临的性能挑战。表:Intel Sandy Bridge微架构的前端部件 部件 功能 性能挑战 指令缓存 32K字节,存储指令字节流 对于“热代码”指令字节提供快速访问 ...原创 2019-01-07 13:25:23 · 386 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (3) - 流水线概述
Intel Sandy Bridge微架构的指令流水线主要由下列3部分构成:有序发射前端,负责取指(x86指令)并将其译码为微指令(也叫微操作)。前端给流水线中的后续阶段提供稳定的微指令流,这些微指令流来自于最可能执行到的程序路径。 乱序的超标量执行引擎,负责将微指令分发执行,每周期最多可分发6条微指令。Allocate/Rename单元将微指令重排列成“数据流”顺序;这样,一旦数据流需要的...原创 2019-01-07 13:25:11 · 563 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (2) - 流水线概述框图
Intel Sandy Bridge Microarchitecture Pipeline Overview下面这张图来自于Intel的优化手册,是Sandy Bridge微架构的流水线功能框图。下面这张图来自于https://www.realworldtech.com/sandy-bridge/10/,更详细的描述了流水线中的主要单元以及之间的相互关系。在介绍流水线的细节时,我们会经...原创 2019-01-07 13:24:32 · 631 阅读 · 0 评论 -
Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (1) - 特性概述
Intel Sandy Bridge/Ivy Bridge MicroarchitectureIntel Sandy Bridge微架构继承了Intel Core微架构与Nehalem微架构的成功之处,同时还提供了如下的创新特性:Intel 高级向量扩展(Intel AVX) 将128位的Intel SSE指令集扩展为256位的浮点指令集,相对于128位的代码,AVX具有两倍的性能优势...原创 2019-01-07 13:24:15 · 2818 阅读 · 0 评论 -
Intel® Nehalem/Westmere架构/微架构/流水线 (9) - 系统软件增强/能耗增强
Enhancements for System SoftwareIntel Nehalem微架构对硬件的增强,大部分同时让应用程序和系统软件收益,除此以外,还有一些增强主要服务于系统软件。锁原语(lock primitives):相比前几代微架构,使用Lock前缀的同步原语(例如XCHG,CMPXCHG8B)在Nehalem微架构上极大的降低了执行延迟。降低VMM成本:在前几代架构上,...原创 2019-01-06 18:55:35 · 712 阅读 · 0 评论 -
Intel® Nehalem/Westmere架构/微架构/流水线 (8) - 重复字符串指令增强
REP String EnhancementREP指令前缀与MOVS/STOS指令连用以及寄存器ECX的值做计数器,这种组合常常用于实现类似于memcpy()/memset()这样的库函数,被称为“REP字符串指令”。指令的每次迭代可以按固定的粒度拷贝/写入数据,常用的粒度是字节/单字/双字/四字长度。有两个主要因素决定REP字符串指令的性能特征:启动成本和数据传输吞吐量。Todo:什么是...原创 2019-01-06 18:53:47 · 290 阅读 · 1 评论