计算机系统结构(二)

计算机系统结构 (二)


前言


  • 内容来源:暨南大学邓玉辉教授讲授的《计算机系统结构》
  • 本系列文章是《计算机系统结构》课程的个人学习笔记,仅记录相关知识点和个人理解,内容不及邓老师课程万一
  • 使用教材:《计算机系统结构教程(第2版)》张晨曦、王志英著,清华大学出版社
  • 不会分享该课程的任何课程资源

2. CPU Architecture


2.1 CPU体系结构

  1. 冯·诺依曼体系结构
    • 控制器按照程序顺序,逐条把指令和数据从存储器中取出并加以执行,自动完成由程序所描述的处理工作
    • 控制器根据存放在存储器中的指令序列(程序)进行工作,并由一个程序计数器控制指令的执行
    • 控制器具有判断能力,能根据计算结果选择不同的工作流程
    • 存储和计算分离的存储程序结构(即冯·诺伊曼体系结构)实际是图灵机的一种通用物理实现方案
    • 同一套硬件(负责逻辑和计算的通用中央处理器)可以执行多种功能(存放在存储器中的程序)
    • 使得通用计算机的制造成为可能
    • 冯·诺依曼架构对应的编程模型是随机存取机模型。在随机存取机模型下,应用程序的执行状态和数据保存在一个处理器内的有限数量的寄存器、以及外部的存储器中(处理器中的寄存器仅仅保存应用程序执行的中间状态,所有的数据最终都要体现在存储器中)
    • image-20240419210657530
  2. 哈佛体系结构
    • 使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存以便实现并行处理
    • 独立的存储器,每个存储器独立编址、独立访问
    • 与两个存储器相对应的是系统的4条总线:程序的数据总线与地址总线数据的数据总线与地址总线
    • 分离的程序总线和数据总线允许在一个机器周期内同时获得指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,使数据的吞吐率提高了1倍
    • 程序和数据存储器在两个分开的物理空间中,因此取指令和读写操作数能完全重善
    • 中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度
    • image-20240419210707521

冯·诺依曼结构由于取指令和存取数据要从同一个存储空间存取,经由同一总线传输,因而它们无法重叠执行,只有一个完成后再进行下一个;而哈佛结构由于取指令和存取数据分别经由不同的存储空间和不同的总线,使得各条指令可以重叠执行,这样也就克服了数据流传输的瓶颈,提高了运算速度

2.2 CPU功耗问题与多核

  1. image-20240419233935200

  2. image-20240419211234109

    主频每增加1G功耗将上升25瓦,而在芯片功耗超过150瓦后,现有的风冷散热系统将无法满足散热的需要

  3. image-20240419213815251

  4. 片上多核处理器(Chip Multi-Processor, CMP)

    • 将多个计算内核集成在一个处理器芯片中,从而提高计算能力
    • 按计算内核的对等与否,CMP可分为同构多核和异构多核
    • CPU核心数据共享与同步
      • 总线共享Cache结构:每个CPU内核拥有共享的二级或三级Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信
      • 基于片上互连的结构:每个CPU核心具有独立的处理单元和Cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起
    • 给程序开发者带来挑战
  5. 板级多芯片(多路)多核

    • 一块主板上集成多个多核芯片
    • 通过横向扩展来增加计算单元数量的方法,可以克服多核技术在一个芯片内的集成度和功耗限制

2.3 CPU制程

  1. Dennard缩放比例定律(Dennard scaling):随着晶体管尺寸的缩小,其功率密度保持不变。

    • 晶体管面积的缩小使得其所消耗的电压以及电流会以差不多相同的比例缩小,即如果晶体管的大小减半,该晶体管的静态功耗将会降至四分之一(电压电流同时减半)
    • 芯片目标:在保证功耗不变的情况下尽可能提高性能
    • 根据Dennard scaling,可以通过提高芯片的时钟频率来提高性能,因为提高频率所带来的更多的动态功耗会和减小的静态功耗相抵消
    • 当芯片的频率提升S倍,尺寸缩小S倍,只要芯片的工作电压相应地降低,单位面积的功耗就会保持恒定
  2. 减小电容

    • 晶体管的开关速度限制了 CPU 的运算速度,根据电容器充电原理,开关导通速度和电容大小相关。电容越大,充电时间越长,开关导通速度越慢。因此,只有减小电容,才能提高运算速度。
    • 减小电容三种方式:增加介电层厚度,改变介电常数,和减小面积
      • 介电层厚度太大,会导致沟道内的电场不够强,不足以导通
      • 改变介电常数需要更换介电材料,相当长的时间里可供选择的介电材料非常有限
      • 因此,唯一可行的方法就是减小面积,也就是减小沟道长度和宽度
  3. 无法降低的工作电压

    • 阈值电压

      • 器件处于临界导通状态,器件的栅电压定义为阈值电压
      • 当阀值电压过低则无法实现利用栅极控制晶体管的通断
    • 漏电现象

      • 当晶体管的大小越做越小时,量子隧穿效应(指电子等微观粒子能够穿入或穿越位势垒的量子行为)慢慢产生,晶体管漏电现象开始出现

      • 漏电现象打破了登纳德缩放比例定律,使得晶体管在往更小工艺制作时的静态功耗不减反增。同时也带来了很大的热能转换,使得芯片的散热成为了急需解决的问题,

    • 以上原因导致阈值电压很难进一步降低,因此芯片的工作电压也无法再降低。从此,芯片的尺寸每缩小一半,与单位面积的功耗将提高一倍

    • 更糟糕的是,当工作电压接近阈值电压时,晶体管栅极到衬底之间的漏电功耗在总功耗中的占比也越来越大。新一代半导体工艺将面临芯片单位面积功耗提升的挑战,这就是芯片的“功耗墙”问题。

    • 从单核向多核的发展并没有从根本上解决问题。因为芯片仅仅是停止了高频单核的研发,但并未停止往相同面积的集成电路内加入更多的晶体管。

  4. 暗硅技术

    • 暗硅2011年在ISCA首次提出,作者发现,为了在现有的散热技术上保证芯片不至于过热,多核芯片中已经有一部分不能和其余部分同时使用,而且随着越来越多核数的集成,内部连接所导致的的功耗也正在逐渐超过核内运算所导致的功耗。

    • 例如:一个65纳米的4核CPU,假如额定功耗允许4个核同时全速工作;当工艺到32纳米,等面积的处理器能容下16核了,但是能够同时工作的还是只有四个核。而不能和其他部分同时工作的12个核就称为暗硅。

    • 实现“暗硅”的硬件机制大致分为三类

      • 增加低频率模块

        这里的频率指使用频率

      • 增加并行的硬件模块

        如果芯片的功耗预算不变,可以在芯片上再增加多个较低频率的内核

      • 定制化硬件

        通用处理器为了确保其通用性,会有大量的冗余

2.4 超线程/多核/多处理器

image-20240420000725881

2.5 Cache系统

  1. Inclusive Multilevel Cache

    Inclusive : in some processors, all data in the L1 cache must also be somewhere in the L2 cache. These caches are called inclusive cache.

    外层Cache包含内层Cache的所有数据,外部访问只访问最外层的Cache(L3)

    浪费空间但效率高

    image-20240420001925440

    (d)If block X has to be evicted from L1, then it is removed from L1 only.
    (e)If block Y has to be evicted from L2, it sends a back invalidation request to L1 and hence block Y is evicted from L1.

  2. Exclusive Multilevel Cache

    Exclusive: data is guaranteed to be in at most one of the L1 and L2 caches, never in both (like the AMD Athlon)

    外层Cache不包含内存Cache的数据,外部访问需要遍历所有层级Cache(L1/L2/L3)寻找记录

    节约空间但效率低

    image-20240420001937380

    (d)If block X has to be evicted from Ll, then it is removed from L1 and placed in L2

  3. Non-inclusive Non-exclusive (NINE)cache

    选择原则,空间与效率之间的平衡

    image-20240420002218779

  4. Memory hierarchy

    image-20240420003039163

  5. 无序共享

    • 多核出现后存储层次发生了分化,一部分放入核内,另一部分留在了核外被多个CPU 核共享
    • 如果两个CPU核运行重要性不同的程序,它们同时发出访问三级高速缓存请求,就会使三级高速缓存无法获知哪个请求更重要,应该先处理哪个,这种情况我们称之为无序共享.
    • 吵闹的邻居(noisy neighbor)

2.6 CPU的设计与制造

image-20240420194628849

  1. CPU架构:例如ARM架构包含哈佛总线、32位RISC指令集、16位Thumb指令集(ARM指令集的一个子集)、带跳转预测的多级指令流水线、加载/存储并发执行的数据流水线等等。不同的架构的区别在于指令的扩展、指令执行的优化、特殊运算单元的加入等等

    • X86架构:1978年诞生, 一开始并不被重视,但Wintel组合几乎完全占领了90年代开始新兴的PC/笔记本和服务器市场。

      其它体系架构的CPU由于Windows的不兼容,一般只用于Unix。

    • ARM架构:随着移动设备的兴起,ARM架构通过对Apple iOS和安卓系统的良好支持,ARM在移动终端市场占主导地位(Apple用A系列/安卓用高通)。

    • 关键点是能耗比:例如,基于ARM的片上系统的发热率最大瞬间峰值大约是3瓦,Intel i7处理器则达到45瓦,约1/15。

  2. IP核(Intellectual Property Core):设计好的电路模块,实现一个预定义的电路功能,可以在不同的芯片中重复使用。

    • IP核一次设计多次使用
    • IP核的粒度可大可小,小到乘法器、除法器、浮点运算器等,大到一个完整的CPU
    • 任何IP核都要基于架构进行设计和制造。先有架构后有内核,同一个架构可以诞生不同的内核

3. 先行控制技术(标量处理机)


  • 只有标量数据表示和标量指令系统的处理机称为标量处理机。这是一种最通用,使用最普遍的处理机
  • 设计处理机的基本任务之一是缩短解释指令的时间,即提高处理机指令的执行速度
    • 提高处理机的工作主频(现在提高主频的速度已经明显减慢)
    • 采用更好的算法和设计更好的功能部件(RISC-CISC)
    • 多条指令并行执行:分为流水线、设置多个功能部件、超长指令字(在一个指令中设置多个独立的操作字段,每个字段可以分别独立地控制各个功能部件并行工作)
  • 先行控制的关键是缓冲技术和预处理技术,以及这两者的结合。通过对指令流和数据流的预处理和缓冲,能够尽量使指令分析器和指令执行部件独立工作,并始终处于忙碌状态。

3.1 指令的重叠执行方式

  1. 顺序执行方式

    image-20240420202347824

  2. 一次重叠执行方式

    image-20240420202402218

  3. 二次重叠执行方式

    image-20240420202415881

3.2 先行控制方式的原理

  1. 采用二次重叠执行方式必须解决两个问题

    1. 有独立的取指令部件、指令分析部件和指令执行部件

      把顺序执行方式中的一个集中的指令控制器分解成三个独立的控制器:存储控制器、指令控制器、运算控制器

    2. 访问主存储器的冲突问题

      取值、分析、执行都可能要访问存储器

  2. 解决访存冲突的方法

    1. 采用低位交叉存取方式

      在一个存储周期可以访问多个存储单元

      如果处理机同时执行的取指令和读操作数所访问的不是同一个存储体,则可以实现指令重叠执行;如果正好在同一存储体,则无法重叠执行
      这种方法不能根本解决冲突问题

    2. 独立的指令存储器和数据存储器

      由于程序和数据存储器在两个分开的物理空间中,因此取指和执行能完全重叠

      如果再规定,执行指令所需要的操作数和执行结果只写到通用寄存器,则取指令、分析指令和执行指令就可以同时进行

  3. 先行控制技术

    采用先行控制技术的关键是缓冲技术和预处理技术,通过对指令流和数据流的预处理和缓冲,能够尽量使得指令分析器和指令执行部件独立地工作,并始终处于忙碌状态

    • 缓冲技术通常用在工作速度不固定的两个功能部件之间,设置缓冲栈的目的是用来以平滑功能部件之间的工作速度
    • 预处理技术是把进入运算器的指令都处理成寄存器-寄存器指令,它与缓冲技术相结合,为进入运算器的指令准备好所需要的全部操作数

    先行控制和一次重叠执行方式有着根本的不同,先行控制在指令分析器中和指令执行部件中同时处理的是两条可能不相邻的指令。在处理机内部,同时可能有多条指令在重叠执行,因此其并行度更高。

3.3 处理机结构

  1. image-20240420213034637

    缓冲栈由一个缓冲寄存器堆和独立的控制逻辑构成

  2. 先行缓冲栈

    • image-20240420213624591
    • 作用:把后续的指令先行取出来,只要指令缓冲栈没有充满,就自动发出取指令的请求
    • 程序计数器
      • 先行程序计数器PC1,用来指示到主存储器中取指令
      • 现行程序计数器PC,记录指令分析器正在分析的指令地址
    • 主要问题
      • 各类指令“分析”和“执行”的时间相差很大
      • 数据相关
      • 转移或转子程序指令

3.4 指令执行时序

  1. 分析指令和执行指令时间不相等

    image-20240421000617483

    如果每次取指令都能在先行指令缓冲栈中得到,则取指令的时间就可以忽略不计。因此,可以将取指令和分析指令合并。

  2. 连续执行n条指令的时间

    image-20240421004921832

3.5 先行缓冲栈

image-20240420213034637

  1. 先行指令缓冲栈

    处于主存储器与指令分析器之间,用来平滑主存储器取指令和指令分析器使用指令之间的速度差异

    image-20240421013558704

  2. 先行操作栈

    处于指令分析器和运算控制器之间,使指令分析器和运算器能够各自独立工作,采用先进先出方式工作,由指令寄存器堆和控制逻辑组成

  3. 先行读数栈

    处于主存储器与运算器之间,平滑运算器与主存储器的工作

    每个缓冲寄存器由地址寄存器、操作数寄存器和标志三部分组成,也能把地址寄存器和操作数寄存器合为一个

    当收到从指令分析器中送来的有效地址时,就向主存申请读操作数

    读出的操作数存放在操作数寄存器中或覆盖掉地址寄存器中的地址

  4. 后行写数栈

    每个后行缓冲寄存器由地址寄存器、数据寄存器和标志三部分组成

    指令分析器遇到向主存写结果的指令时,把形成的有效地址送入后行写数栈的地址寄存器中,并用该地址寄存器的编号替换指令的目的地址部分,形成RR*指令送入先行操作栈。

    当运算器执行这条RR*型写数指令时,只要把写到主存的数据送到后行写数栈的数据寄存器中即可。

  5. 执行情况

    image-20240421102627325

  6. 缓冲深度的设计方法

    • 以静态分析为主,通过模拟来确定缓冲深度

    • 两种极端情况:假设缓冲深度为DI

      • 先行指令缓冲栈已经充满

        image-20240421102930459

      • 先行指令缓冲栈原来为空

        image-20240421102941851

    • 由于指令分析器出来的指令要送到指令执行部件执行,因此指令的流出速度由指令在执行部件中的执行速度来决定

    • 在一般程序中,执行时间短的指令所占的比例要远大于执行时间长的指令

    • 还有一些吸收型指令在分析器中就直接执行完成,不需要送到运算器中,如转移指令。因此,指令分析器分析指令的速度要大于运算器执行指令的速度。所以,一般采用前一种方法来计算缓冲深度

    • image-20240421130700635

  7. 先行指令缓冲栈的工作时间关系

    image-20240421130624761

4. 指令系统


  • 在机器上直接运行的程序是由指令组成的,指令系统是软件与硬件之间的一个主要分界面,也是他们之间互相沟通的一座桥梁
  • 硬件设计人员采用各种手段实现指令系统,而软件设计人员则使用这些指令系统编制系统软件和应用软件,用这些软件来填补指令系统与人们习惯的使用方式之间的语义差距
  • 指令系统设计必须由软件设计人员和硬件设计人员共同来完成
  • 指令系统发展相当缓慢,需要用软件来填补的东西也就越来越多

4.1 指令格式的优化设计

  1. 主要目标:节省程序的存储空间、指令格式尽量规整、便于译码

  2. 指令的组成

    image-20240421131039121

    image-20240421131100521

  3. 操作码的优化表示(目的:节省程序存储空间)

    1. 固定长度

      1. 定长定域
      2. 规整、译码简单
      3. 浪费信息量
    2. Huffman编码

      image-20240421131311596

      image-20240421131442651

      主要缺点:

      • 操作码长度很不规整,硬件译码困难
      • 与地址码共同组成固定长的指令比较困难
    3. 拓展编码:由固定长操作码与Huffman编码法相结合形成

      image-20240421190801574

      image-20240421190813933

4.2 指令系统的优化设计

image-20240421191101370

4.3 RISC指令系统

  1. 精简指令系统计算机(RISC)是80年代提出的一种新的计算机体系结构设计思想,目前运行中的许多处理机都采用了RISC体系结构

  2. 主要特点:只保留功能简单的指令,功能较复杂的指令用软件实现,提高流水线效率

  3. 20%与80%规律:在CISC中,大约20%的指令占据了80%的处理机执行时间

  4. VLSI技术的发展引起的问题

    • VLSI工艺要求规整性

      RISC处理机的控制逻辑比较简单,所需要的大量通用的寄存器是非常规整的,正好适应了VLSI工艺的要求。由于VISI的集成度迅速提高,使得生产单芯片处理机成为可能。

    • 主存与控存的速度相当

      • 控制存储器用来存放实现全部指令系统的所有微程序,它是一种只读型存储器。一旦微程序固化,机器运行时则只读不写。控制存储器在CPU内,是CPU的组成部分,用于存储微程序的,CPU从控存中不断取微指令来执行所有的计算机程序。主存在CPU外,用于执行程序。
      • 70年代以前,计算机用磁芯做主存储器,用半导体做控制存储器(ROM)。ROM比主存储器更便宜而且更快,两者的速度差5-10倍。因此,可以将微程序存储在ROM中,CISC使用微程序是合理的
      • 70年代后,用DRAM做主存储器,使得主存与控存的速度相当,从而使得许多简单指令没有必要用微程序来实现。复杂指令用微程序实现与用得简单指令组成的子程序实现没有多大区别
  5. 软硬件的功能分配问题

    复杂的指令使指令的执行周期大大加长

    CISC处理机的指令平均执行周期都在4以上,在CISC中,增强了指令系统功能,简化了软件,但是硬件复杂了

  6. RISC的定义与特点

    1. 卡内基梅隆大学论述
      1. 大多数指令在单周期内完成:指令系统中的大多数指令只执行一个简单的和基本的功能,这些指令可以比较快地在单个周期内执行完成,并减少指令的译码和解释所需要的开销
      2. LOAD/STORE结构:因为访问存储器指令需要的时间比较长,因此在指令系统中要尽量减少这类指令,只保留不可再少的LOAD和STORE两种访问存储器的指令
      3. 硬布线控制逻辑:硬布线控制逻辑可以使大多数指令在单周期内执行完成,减少了微程序技术中的指令解释开销
      4. 减少指令和寻址方式的种类:这一特点也可以简化控制部件的结构加快指令的执行速度
      5. 固定的指令格式:该特点可以使指令的译码逻辑电路简化,从而也使控制部件的速度加快
      6. 注重编译的优化:这个定义有一定的局限性,不太完整,而且随着计算机技术的不断发展,RISC思想也在发展中。例如,一些新出现的RISC处理机的控制部件,除了采用硬布线逻辑之外,也采用了微程序技术。有些RISC处理机的指令种类并不太少,或者说,并不比CISc处理机的指令种类少
    2. IEEE的Michael Slater描述
      1. 为提高流水线效率, 应具有下述特征
        1. 简单而统一格式的指令译码
        2. 大部分指令可以单周期执行完成
        3. 只有LOAD和STORE指令可以访问存储器
        4. 简单的寻址方式
        5. 采用延迟转移技术
        6. 采用LOAD延迟技术
      2. 为使编译器便于生成优化代码,应具有
        1. 三地址指令格式
        2. 较多的寄存器
        3. 对称的指令格式
  7. 减少CPI是RISC思想的精华

    image-20240421194353305

  8. RISC设计思想也可以用于CISC中

    image-20240421194548022

    CISC厂商发现CISC指令可以采用两级译码的方法转换成RISC

    首先,CPU对运行的CISC指令先进行一种“预译码”转换,生成一种内部微指令,也叫微操作(uOP)。

    微指令是CPU内部使用的,对软件不可见。微指令采用RISC思想,执行过程使用流水线架构。这样一个CPU既可以执行CISC指令,又可以达到RISC架构相同的性能

  9. RISC的关键技术

    1. 延时转移技术

      • 为了使指令流水线不断流,在转移指令之后插入一条没有数据相关和控制相关的有效指令,而转移指令被延迟执行,这种技术称为延迟转移技术
      • 采用指令延迟转移技术时,指令序列的调整由编译器自动进行,用户不必干预
      • 读采用延迟转移的程序,必须十分小心
      • image-20240421194939458
      • 限制条件
        • 被移动指令在移动过程中与所经过的指令之间没有数据相关
        • 被移动指令不破坏条件码,至少不影响后面指令使用条件码
        • 如果找不到符合上述条件的指令,必须在条件转移指令后面插入空操作
        • 如果指令的执行过程分为多个流水段,则要插入多条指令
        • 插入1条指令成功的概率比较大,插入2条或2条以上指令成功的概率明显下降
      • 缺点:采用指令延时技术,经常找不到可以用来调整的指令
    2. 指令取消技术

      1. 向后转移(适用于循环程序)

        实现方法:循环体的第一条指令安放在两个位置,分别在循环体的前面和后面
        如果转移成功,则执行循环体后面的指令,然后返回到循环体开始;否则取消循环体后面的指令

        image-20240421195522221

      2. 向前转移(IF THEN)

        实现方法:如果转移不成功,执行转移指令之后的下条指令,否则取消下条指令

        image-20240421195629229

    3. 重叠寄存器窗口技术(Overlapping Register Window)

      • RISC的指令系统比较简单,CISC中的一条复杂指令,在RISC中通常要用一段子程序来实现。因此,RISC程序中的CALL和RETURN指令要比CISC程序中的多
      • 在执行CAIL指令时,必须把硬件现场(主要包括程序计数器和处理机状态字)和程序本身的软件现场(主要指在子程序中要使用的通用寄存器等)保存到主存储器中。另外,还要把执行子程序所需要的参数从主程序传送过去。在执行RETURN指令时,要做相反的工作,最后把运算结果传送回主程序。因此,执行CAIL和RETURN指令时,访问存储器的信息量非常大。据统计,在PASCAL语言和C语言中分别有15%和12%的CALL和RETURN操作,而它们访问存储器的信息量却占整个访存信息量的44%和45%
      • 实现方法:在处理机中设置一个数量比较大的寄存器堆,并把它划分成很多个窗口。每个过程使用其中相邻的3个窗口和1个公共的窗口,而在这些窗口中有一个窗口是与前一个过程共用,还有一个窗口是与下一个过程共用的。
        与前一过程共用的窗口可以用来存放前一过程传送给本过程的参数,同时也存放本过程传送给前一过程的计算结果。同样,与下一过程共用窗口可以用来存放本过程传送给下一过程的参数和存放下一过程传送给本过程的计算结果。

      • 目前重叠寄存器窗口技术已经成为RISC的一种基本技术。

      • 效果:可以减少大量的访存操作另外,要在主存中开辟一个堆栈,当调用层数超过规定层数(寄存器溢出)时,把益出部分的寄存器中内容压入堆栈。

      • image-20240421200055102

        image-20240421200120386

    4. 指令流调整技术

      目标:通过变量重新命名消除数据相关,提高流水线效率

      image-20240421200314517

      image-20240421200319217

    5. 以硬件为主固件为辅

      微程序:一条机器指令的功能,通常用许多条微指令组成的序列来实现,这个微指令的序列叫微程序.例如:加法指令的执行可分为:取指计算地址,取操作数和加法运算四步。这四步可以认为是微程序。因此,一条指令可以由一段微程序构成。

      硬联逻辑:由门、触发器等逻辑电路组成

      • 固件(指令系统用微程序实现)的主要缺点是:执行速度低。一条机器指令通常要多条微指令解释执行
      • 固件的主要优点是:便于实现复杂指令,便于修改指令系统。增加了机器的灵活性
      • 但是RISC要求指令能在单周期内完成,用微程序是不可能做到的。因此,以硬联逻辑为主来实现指令系统。对于少数复杂的指令,目前的许多处理机也用微程序技术实现。因此,目前商用的RISC处理机都是以硬件为主固件为辅
    6. RISC优化编译技术

      1. RISC对编译器带来的方便
        • 指令系统比较简单、对称、均匀,指令选择工作简单
        • 选择寻址方式的工作简单
        • 因为采用LOAD/STORE方式,省去了是否生成访问存储器指令的选择工作
        • 由于大多数指令在一个周期内执行完成,为编译器调整指令序列提供了极大的方便。
      2. RISC对编译器造成的困难
        • 必须精心安排每一个寄存器的用法,以便充分发挥每一个通用寄存器的效率,尽量减少访问主存储器的次数
        • 做数据和控制相关性分析,要调整指令的执行序列,并与硬件相配合实现指令延迟技术和指令取消技术等
        • 要设计复杂的子程序库,RISC的子程序库通常要比CISC的子程序库大得多

4.4 VLIW指令系统

VLIW (Very Long Instruction Word, 超长指令字)是一种非常长的指令组合,它把许多条指令连在一起,使得一条指令中包含有多个能够同时执行的操作,增加了运算的速度。
TRACE28/300处理机的一条超长指令中最多有28条可以同时执行的指令。
算法和编译技术是关键。

  1. VLSI指令系统是一种显式指令级并行指令系统,在一条VLIW指令中包含有多个相同或不同的操作字段(每个操作字段的功能相当于一般处理机中的一条指令)。每个操作字段能够分别独立控制各自的功能部件同时工作。因此,处理器能在一个长指令字中赋予编译程序控制所有功能单元的能力,使得编译程序能够精确地调度在何处执行每个操作、每个寄存器存储器读和每个转移操作。

  2. 二维程序结构,指令级并行度高

  3. 提出VLIW指令系统的主要目的是要开发程序中的指令级并行性(Instruction Level Parallelism)

    1. 指令级并行
      1. 超标量(Superscalar)处理机:依靠设置多条指令流水线并通过同时发射多条指令来提高处理机的运算速度
      2. 超流水线(Superpipelining)处理机:通过分时使用同一条指令流水线的不同部分来提高处理机的运算速
      3. VLIW处理机
    2. 不同的并行级别
      • 超长指令字(VLIW)是指令级并行
      • 超线程(yper-Threading)是线程级并行
      • 多内核则是芯片级并行
  4. 主要特点

    1. 采用显式并行指令计算(EPIC:Explicitly Parallel Instruction Computing)方式

      在VIW处理机上运行的程序是一个二维指令矩阵,每一行上的所有作组成一条超长指令,他们之间没有数据相关、控制相关和功能部件冲突,这些指令可以在VLIW处理机上同时执行

      超标量处理机和超流水线处理机通常采用隐式并行指令方式。程序是一维线性的指令序列,每条指令中一般只包含一个操作

    2. 指令级并行度高

      超标量处理机和超流水线处理机的指令级并行度一般为2左右,通常不超过4,目前多数VLIW处理机的指令级并行度在4至8之间,有的已经达到几十
      由于在VLIW中通过并行编译器来开发程序中的指令级并行性,可以在一个循环、一个函数、甚至整个程序中寻找指令级并行性,而且,可以采用软件流水、循环展开等指令级并行度很高的方法充分开发程序中的多种并行性,

    3. 硬件结构规整、简单

      VIW处理机主要由很规则的寄存器、存储器、运算部件和数据通路等组成,不规则的控制器很简单,而且,不需要复杂的指令并行调度窗口及多发射机制等

    4. 编译器的实现难度大

      VLIW并行编译器主要依靠指令级并行算法、数据相关性分析算法、寄存器分配算法及并行编译技术等来显式开发程序中的指令级并行性从而提高处理机的运行速度。要研制指令级并行度高的编译器难度很大。