网站采集转载,怎么做网站模板,做照片有那些网站好,网站木马文件删除x86 架构处理器吧复杂的CISC指令转为简单的RISC微操作。这样做最大的优势是微操作可以乱序执行#xff0c;一条简单的相加指令--比如ADD#xff0c;EAX, EBX#xff0c;只产生一个微操作#xff0c;而很多复杂指令--比如ADD, EAX 可能会产生两个微操作#xff0c;一个将数… x86 架构处理器吧复杂的CISC指令转为简单的RISC微操作。这样做最大的优势是微操作可以乱序执行一条简单的相加指令--比如ADDEAX, EBX只产生一个微操作而很多复杂指令--比如ADD, EAX 可能会产生两个微操作一个将数据从内存读取到临时寄存器另一个则吧临时寄存器的内容与EAX相加。指令ADD[MEM1], EAX可能会产生三个微操作一个从内存读取数据另一个执行加法操作最有一个把结果存回内存。需要注意的是指令间的关系及其转化为微操作的方式在不同代系的CPU之间差别会非常大。 与CISC转化为RISC相反微操作也可以融合现代Intel CPU中两种融合类型 1 微融合 相同的机器指令转化而来的微操作微融合只能应用在两种类型内存写操作/读操作和修改操作。 2 宏融合 解码器可以把算术或者逻辑指令与后续的条件跳转指令融合为一个单独的计算加分支跳转微操作。 微融合和宏融合能够节省流水线从解码到退休的所有阶段的带宽。融合的操作在顺序重排缓冲区ROB中共享一个单独的条目当融合的微操作只用一个条目时ROB将会被扩容。这个单独的ROB条目代表两个操作这两个操作需要被两个不同的执行单元处理。融合ROB条目会被分发到两个不同的执行单元。 linux perf工具的用户可以通过如下命令互殴去负载程序微操作的发射执行和退休数量。 x86微架构上指令时延吞吐量端口使用方法和对应的微操作数量都可以在uops.info网站找到。 4.5 流水线槽位 一个流水线槽位代表处理一个微操作所需要的硬件资源可以在每个时钟周期执行4个微操作几乎所有现代x86 CPU流水线都是四发射的。途中6个连续时钟周期内只有一般的槽位呗利用了从微架构角度来看。执行此类代码的效率只有50% 流水线槽位时自顶向下微架构分析的核心指标之一例如前端绑定和后端绑定 指标由闲置流水线槽位的百分比表示。 4.6 核时钟周期和参考时钟周期 大部分CPU使用时钟信号同步他们的顺序操作时钟信号由外部发生器产生发生器每秒提供固定数量的脉冲时钟脉冲的频率决定了CPU执行指令的速率因此CPU时钟越快每秒执行的指令就越多。 频率 时钟计数/时间 现代的CPU都没有固定的运行频率使用动态频率调整技术Intel上称为时Turbo Boost。Skylake i7-6000处理器上的一个实验CPU的基础频率时3.4GHz 指标perf-cycles统计的时钟周期数量不受动态频率调整的影响外部时钟在设置的时候频率时100MHz, 如果我们通过时钟倍频器调整它则可以获得处理器的基础频率。Skylake i7-6000处理器的时钟倍频器倍数时34这意味着对于每一个外部的脉冲。CPU在基础频率上运行时可执行34个内部时钟周期。 4.7 缓存未命中 某层级的任何缓存未命中都会被更高层的缓存或者DRAM所承载意味着内存访问类型的时延会有明显的增加表3中给出了各种内存子系统组建的典型时延数据。缓存未命中非常影响性能当访问最后一层缓存LLC且发生未命中而直接访问主存DRAM的时候Intel内存时延价差工具MLC测量内存时延核带宽以及系统在增加家在动作时 他们如何变化为的工具。 内存子系统组件 时延 L1缓存 4个时钟周期 L2缓存 10-25个时钟周期 L3缓存 约40个时钟周期 主存 200多个时钟周期 指令和数据都可以发生缓存未命中。根据TMA分析方法指令缓存未命中呗归类为前端停滞数据缓存未命中呗归类为后端停滞。当获取指令时发生指令缓存未命中会被归类为前端问题。相应的。当请求数据时在数据缓存中并没有找到的话就是后端问题。 4.8 分支预测错误 现代CPU会试着去预测分支跳转指令的结果例如当处理器看到如下代码时。 dec eax jz .zero 其中指令jz时分支跳转指令为了提高性能会投机执行这个分支。如果预测错误然后CPU需要增加撤销它最近投机执行的所有工作通常会有10-20个时钟周期的损失。 perf stat -s branches, branch-missees -- a.exe