超标量处理器

一、引言

处理器(central process unit,简称CPU)是手机的核心部件,其主要功能是取指令并译码执行。CPU主要包括控制器和运算器两个部件,它对在手机中的所有硬件资源(如存储器,输入输出单元)进行控制调配,执行运算。在系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作,因此,它的性能高低直接影响着用户的体验。

得益于半导体工艺的进步,架构的演进,CPU的性能不断地提升。然而,应用程序(APP)的不断发展对处理器性能有了更高的要求,要使得APP运行的稳定、流畅,软件工作者要深入理解处理器的微架构,理解指令的执行过程,做出一些更精细化的改善和优化。

二、超标量处理器简介

目前,手机处理器大部分是超标量处理器(superscalar processor)。想要理解超标量处理器,得先明白流水线技术。流水线技术是将一条指令分解为多个步骤(周期),并且每一个周期时间相同。

超标量处理器

超标量处理器的流水线中,允许多条指令同时存在。这样一条指令不用等待它前面的指令执行完毕,就有可能可以进入处理器的后面得到执行,这种方式提升了处指令并行性(ILP: instruction level parallelism),进而提升性能。如上图所示,当处理器没有使用流水线的时候,它的时间周期是D,在使用了n级流水线之后,一条指令的平均执行周期变成了D/n+S,其中s表示为流水线中间的延迟。

如今,处理器的微架构已经趋于成熟,指令所经过的部件和被处理的过程相似。一个典型的超标量乱序处理器的组织结构如下图所示:

超标量处理器

该处理器它包含了取指令(fetch),译码(decode),寄存器重命名(rename),发射(issue),执行(execute),写回(write back),和提交阶段(commit)。

三、处理器流水线介绍

前一小节介绍了超标量处理器的组织结构,本小节将跟踪指令的具体执行过程,介绍处理器在每一个阶段的行为。

1.分支预测/取指令

在取指令阶段,除了需要从I-Cache中取出指令之外,同时还要决定下个周期指令的地址。而分支指令的结果只有在执行阶段才可以得出,因此,有必要对分支指令的行为进行预测,需要预测的内容包含了跳转方向和跳转地址。

a.跳转方向

分支指令可能是发生跳转和不发生跳转,有些分支指令是无条件执行的,它的方向总是发生跳转,其余分支指令则需要进行预测。

对于分支指令方向的预测,主要有以下4种方式:

首先,本文给大家介绍一个简单的分支预测

超标量处理器

该方法直接使用上次分支的结果,相比于静态分支预测在一些情况下可以获得比较好的结果。如下图,在10000次的for循环语句中,只有两次预测失败了,预测失败率仅有2/10000=0.002%。

超标量处理器

但是在一些情况下,预测的结果是不准确的,如指令的方向不停的发生跳转,那么分支预测的预测失败率可能接近100%.

i. 基于两位饱和数的分支预测

超标量处理器

两位饱和数的预测方式在特定情况下有较好的预测结果,但其有一个极限值,因次后来处理器都放弃了这一做法。

ii. 基于局部历史的分支预测

超标量处理器

通过将它的每次跳转或者不跳转的结果记录于BHR寄存器中作为历史状态,然后通过PC值索引该表作为参考。如果一条分支指令的执行结果很有规律,那么可以较好地预测正确率。

iii. 基于全局历史的分支预测

超标量处理器

与BHR相似,GHR寄存器记录了最近所有的分支指令的执行结果并作为预测。

i.竞争的分支预测

基于BHR和GHR,在不同场景的应用中,各有优缺点。竞争的分支预设计了一种自适应的算法根据不同的场景自动的选择其中一种预测正确率较高的方法。

超标量处理器

当处理器预测了分支指令会跳转之后,需要对目标地址进行预测:

b. 目标地址

i. 直接跳转:在指令中直接以立即数的形式给出了一个相对PC的偏移值。目标地址是固定的,分支预测器可以准确的找到地址;

ii. 间接跳转:分支指令的目标地址在通用寄存器中,处理器通过获取寄存器中的值,然后根据该值进行跳转。对于一些跳转地址有规律情形,如call指令调用固定地址的函数,return函数返回至函数调用的下一条指令,预测的结果比较准确。其余一些不规律情形,预测它的跳转地址则比较困难。

  1. 译码

指令解码阶段的任务是将指令中携带的信息提取出来,这时候指令就变成了微操作(uop),处理器的后续阶段将使用这些信息继续执行。对于CICS指令集,指令的长度是不固定的,寻址方式也比较复杂,这增加了译码的难度。目前,在手机处理器中主要用的ARM系列处理器,其指令的长度格式是格式固定的,如在32位处理器中:

超标量处理器
  1. 寄存器重命名

接下来,在超标量乱序处理器中,指令将进入寄存器重命名阶段。首先,本文介绍关于相关性的概念。在处理器执行过程中,指令之间存在一定的相关性,所谓的相关性是指一条指令的执行依赖于另一条指令的执行结果,指令之间的执行顺序不能够改变,这制约了指令发射阶段的选择范围。具体的依赖关系有如下三种:

先写后写(write after write):表示两条指令都将结果写到同一个寄存器;

先读后写(write after read):一条指令的目的寄存器和它前面某一条指令的源寄存器一样;

先写后读(read after write):一条指令的源寄存器来自于它前面某条指令的计算结果;

在采用乱序执行的处理器中,寄存器重命名通过映射表将逻辑寄存器(指令中表示的寄存器)映射到物理寄存器(处理器中参与运算的寄存器)解决了WAR 和WAW依赖关系,不存在依赖关系的指令可以同时执行,提高了ILP(instruction level parallesim)。如下图:

超标量处理器

只有第二条指令的源寄存器r0依赖于第一条指令计算的结果,寄存器重命名之后,其余指令之间并无依赖关系。

  1. 发射

将符合一定条件的指令从发射队列中选出来,并送到FU(function unit)中去执行。满足发射条件是指指令的操作数准备好了,FU数量充足。然而,对于访存(load/store)指令,只有在执行阶段指令的地址被计算得出,它们之间的依赖关系才可以知道。处理器有一定的做法,来加速这种执行方式。对于存储指令加速的如下的三种方式,当出现违例(memory vialotion)时,在流水线的后续阶段会进行消歧处理。

  1. 完全的顺序处理

  2. 部分的乱序指行,如下图

超标量处理器
  1. 完全的乱序指令

  2. 执行

指令在执行单元获得执行,典型的执行单元有ALU,AGU,BPU。

  1. 写回

将FU计算的结果写到物理寄存器堆,并通过旁路网络将这个计算结果送到需要的地方,唤醒依赖于这条指令计算结果的指令。如:

add r0, r1, r2 (1)

add r4, r0, r3 (2)

当第一条指令的结果r0计算完成,它会通知第二条指令r0的值已近准备好,那么这条指令才有可能变成准备好的状态并获得发射执行。

  1. 提交

程序的指令流顺序进入处理器,乱序执行,并按照指令进入ROB(Reorder Buffer,重排序缓存)的顺序进行提交这保证了程序执行正确性。保留提交信息的关键部件是ROB,它的结构如下图:

超标量处理器

当一条指令到达流水线的这个阶段时,ROB会将这条指令标记为complete状态,但是并不意味着可以提交了,比如异常,分支预测失败等,一条已经完成状态的指令可能从流水线中抹掉。所以,在一条指令没有退休(retire)之前,他的状态都是推测的(speculative),

ROB本质上是一个FIFO器件,存储了一条指令的相关信息。如这条指令的类型、结果、目的寄存器、和异常的类型等。ROB的容量决定了流水线中最多可以同时执行的指令的个数。每一个ROB的表项可以包括的内容如下:

(1)complete, 表示一条指令是否已经执行完毕;

(2)Areg: 在原始程序中指定的目的寄存器,它以逻辑寄存器的形式给出;

(3)Preg:指令的Areg经过寄存器重命名之后,对应的物理寄存器编号;

(4)Opreg: 指令的Areg被重命名为新的Preg之前,对应的旧的Preg, 当指令发生异常(exception), 而进行状态恢复的时候,会使用这个值;

(5)PC:指令对应的PC值,当一条指令发生中断或者异常的时,需要重新保存这个值;

(6)Exception,如果指令发生了异常,会将这个异常的类型记录,当指令要退休的时候,会对这个异常进行处理;

(7)Type:指令的类型会被记录到这里,当指令退休的时候,不同类型的指令会有不同的动作,例如store指令要写入D-cache。

处理器的执行过程中,错误的分支预测也需要处理,这个执行过程如下:

(1) 回滚:将在错误路径上的后续指令从流水线中”冲刷”;

(2) 重新取指:”正确的路径上取出合适的指令执行;

超标量处理器

四、处理器性能建模

超标量处理器

处理器的执行过程中,理想状况下,处理器运行在稳定的状态,没有停顿和”汽泡”。然而总会有各种缺失(miss)事件导致性能的下降。根据区间模型理论,处理器的CPI(cycles per instruction)可以根据硬件PMU参数的值和参考硬件手册中缺失事件的代价,并通过公式进行拟合。这些拟合的结果可以作为应用负载的特性给处理器的调度作为参考。

五、影响处理器发展的三堵墙

  1. 功耗墙

功耗是影响处理器性能发挥的重要因素,尤其在是嵌入式设备如手机领域,手机通过电池供电,电池容量有限,所以处理器功耗不能过高。

超标量处理器

Post-Dennardian(处理器供电电压不变),系统增加S倍,但是因为供电电压不变,电容减少了S倍,所以总功耗增大了S^2倍。为了保持总功耗不变,chip利用率将减小为以前的1/S^2。

  1. 访存墙

处理器的性能在发展过程中有大量的提升,然而内存受限于工艺,价格,带宽和延迟等发展缓慢。处理器运算速度和内存访问速度不匹配。

超标量处理器
  1. 编译墙

不同处理器有不同的指令集,需要通过二进制翻译技术将一种处理器上的二进制程序翻译到另一种处理器上的可执行程序,这可以扩大了硬件、软件的适用范围,提高了兼容性。

超标量处理器

六、总结

超标量处理器是手机平台的核心,处理器的微架构在不断地变化和演进中,软件工程师如何利用硬件特性,写出高质量、高性能的代码成为了一个难点和痛点。

本文详细介绍了超标量处理器的微架构,跟踪了一条指令在处理器每一阶段的具体执行过程,让读者深刻理解了硬件行为。同时,结合性能采样分析工具如perf, vtune, simpleperf,读者可以获取程序的热点(hotspot)或者性能瓶颈。然后,软件工作人员可以通过读取硬件数据PMU(Performance Monitor Unit),深刻理解处理器的性能瓶颈,对代码做出针对性的调整、优化。这可以充分发挥具体处理器的性能,进而提升整个手机应用的体验。此外,深刻理解处理器执行方式,通过建模的方式,可以获悉软件应用的负载大小,这为操作系统的调度提供了进一步的思考。

处理器,特别是在手机平台上的处理器,它的性能发挥受限于存储墙,功耗墙,如何克服这些不利因素,提高未来手机的整体体验,读者可以进一步思考。

参考:

[1]. 姚永斌.超标量处理器设计.北京:清华大学出版,2014

[2] Taylor M B. Is dark silicon useful?: harnessing the four horsemen of the coming dark silicon apocalypse[C]//Proceedings of the 49th Annual Design Automation Conference. ACM, 2012: 1131-1136

[3]. https://baike.baidu.com/item/%E7%94%B5%E8%84%91cpu/15892789?fr=aladdin

超标量处理器
长按关注内核工匠微信

Linux 内核黑科技 | 技术文章 | 精选教程

Original: https://blog.csdn.net/feelabclihu/article/details/126434317
Author: 内核工匠
Title: 超标量处理器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/623720/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 用普通摄像头测量距离

    近年来,由于无人机、无人车等技术的不断成熟,需要用到实时测距的场所也越来越多,如定位,避障,测速等,相比于其他测距方法,单目测距是利用一个摄像头进行视频拍摄,在图像中找到待测物体。…

    人工智能 2023年5月26日
    0124
  • 用python制作几款简单又好玩的小游戏,找回童年的记忆

    今天给大家带来几个Python小游戏,找回童年的同时学习编程! 一、接金币 普通难度:❤ 玩法介绍:吃金币,控制左右键,有手就行。 源码分享 import os import cf…

    人工智能 2023年7月29日
    094
  • 【语音算法】wav2vec系列原理和使用

    文章目录 前言 1. wav2vec 2. vq-wav2vec 3. wav2vec2.0 * 3.1 encoder 3.2 context 3.3 wav2vec2.0的使用…

    人工智能 2023年5月27日
    073
  • K近邻(KNN)

    算法原理 KNN是监督学习的一种,K近邻法假设给定一个训练数据集,其中的实例类别已定。分类时对新的实例,根据其K个最近邻的训练实例的类别,通过多数表决等方式进行预测。K值的选择、距…

    人工智能 2023年7月2日
    070
  • 信号处理之最大似然估计(自学整理)

    信号处理之最大似然估计(自学整理) 最大似然估计 基本思想:在对被估计的未知量(或参数)没有任何先验知识的情况下,利用已知的若干观测值估计该参数。 因此,在使用最大似然估计方法时,…

    人工智能 2023年5月25日
    0112
  • 【手把手教你】搭建神经网络(回归)

    大家好,我是羽峰,今天要和大家分享是 回归 (regression) 问题,希望通过今天的讲解,各位对回归问题能有个更好的认识。 目录 1.认识回归 2. Auto MPG 数据集…

    人工智能 2023年6月17日
    068
  • 基于零参考深度曲线估计的暗光图像增强

    天下事以难而废者十之一,以惰而废者十之九。——《严氏家训·议兵篇》 摘要: 本文提出了一种新的基于零参考深度曲线估计(Zero-DCE)的方法,该方法将光照增强描述为一种基于深度网…

    人工智能 2023年6月20日
    069
  • 机器学习笔记 – 生成对抗网络 (GAN)概述和入门示例

    一、生成对抗网络 (GAN) 1、原理简述 生成对抗网络 (GAN) 是一类功能强大的神经网络,用于无监督学习。它是由 Ian J. Goodfellow 在 2014 年开发和引…

    人工智能 2023年5月23日
    086
  • Robomaster基于传统算法的视觉识别教程

    文章目录 前言 一、装甲板的分析 二、预处理 * 降低曝光度 ROI区域 三、颜色提取 * 提取目标颜色 阈值化与膨胀 四、灯条轮廓提取 五、灯柱筛选 六、灯柱匹配 其他 总结 前…

    人工智能 2023年6月18日
    073
  • 无线降噪耳机对比测评,入耳式降噪耳机排行榜10强

    如今,我们经常听音乐,所以耳机在日常生活中很常见。随着蓝牙耳机的普及,人们的耳机已经从有线耳机变成了蓝牙耳机。更便携的无线耳机,让我们不再只想着在室内听音乐,现在走在街上总能看到很…

    人工智能 2023年5月27日
    0130
  • 现在能聊天的机器人都有哪些?

    聊天机器人,是一个用来模拟人类对话或聊天的程序。 互联网时代,让人人都能够通过电脑和世界各地的人互联,移动互联网时代则让手机成为了每个人的标配,而AI时代,聊天机器人已成为了新一代…

    人工智能 2023年6月1日
    076
  • 基于keras的残差网络实现——以fashion mnist数据集分类为例

    基于keras的残差网络实现——以fashion mnist数据集分类为例 前言 残差网络 * 残差块 残差网络 fashion-mnist数据集 代码实现 结果展示 * 模型结构…

    人工智能 2023年7月1日
    077
  • 【深度学习】CNN算法

    一.定义: 卷积神经网络(CNN),是一类包含卷积计算且具有深度结构前馈神经网络,是深度学习(deep learning)的代表算法之一。 卷积神经网络具有表征能力,能够按其阶层结…

    人工智能 2023年6月17日
    076
  • OpenCV-眼睛控制鼠标

    找来了一篇好玩的 大伙可以试试啊 如何用眼睛来控制鼠标?一种基于单一前向视角的机器学习眼睛姿态估计方法。在此项目中,每次单击鼠标时,我们都会编写代码来裁剪你们的眼睛图像。使用这些数…

    人工智能 2023年6月29日
    074
  • 标准正态变换(SPSS统计描述分析)

    题目:对 CCSS_Sample中的总指数、现状指数和预期指数进行标准正态变换,对变换后的变量进行统计描述。数据文件:CCSS_Sample.csv 本篇文章小玥各位学习SPSS软…

    人工智能 2023年7月16日
    0126
  • 二次量子化与量子计算化学

    技术背景 二次量子化是量子化学(Quantum Chemistry)/量子计算化学(Quantum Computational Chemistry)中常用的一个模型,可以用于计算电…

    人工智能 2023年6月4日
    0132
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球