首页> 中国专利> 一种支持同时多线程指令乱序发射的飞行记分牌处理方法

一种支持同时多线程指令乱序发射的飞行记分牌处理方法

摘要

本发明涉及一种支持同时多线程指令乱序发射的飞行记分牌处理方法,本方法设置了与空闲物理寄存器数量相同的飞行记分牌,并将飞行记分牌号与空闲的物理寄存器号绑定。在指令进行寄存器重命名时,飞行记分牌号与绑定的空闲物理寄存器号一起被分配给指令的目标寄存器;在指令提交时,当前分配的飞行记分牌号与当前分配的物理寄存器号解除绑定,该飞行记分牌号与指令新释放的空闲物理寄存器号重新绑定;在指令回退时,当前分配的飞行记分牌号与当前分配的物理寄存器号一起被回收,并恢复其目标寄存器上一次分配的飞行记分牌号和上一次分配的物理寄存器号。本发明解决了在多个线程同时执行且共享同一套物理寄存器情况下,指令的乱序发射问题。

著录项

  • 公开/公告号CN105528195A

    专利类型发明专利

  • 公开/公告日2016-04-27

    原文格式PDF

  • 申请/专利权人 上海高性能集成电路设计中心;

    申请/专利号CN201510883067.9

  • 发明设计人 尹飞;胡向东;李俊;

    申请日2015-12-03

  • 分类号G06F9/38;G06F9/30;

  • 代理机构上海泰能知识产权代理事务所;

  • 代理人宋缨

  • 地址 200120 上海市浦东新区张江高科园区毕升路399号

  • 入库时间 2023-12-18 15:50:38

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-12-15

    授权

    授权

  • 2016-05-25

    实质审查的生效 IPC(主分类):G06F9/38 申请日:20151203

    实质审查的生效

  • 2016-04-27

    公开

    公开

说明书

技术领域

本发明涉及多线程处理技术领域,特别是涉及一种支持同时多线程指令乱序发射的飞 行记分牌处理方法。

背景技术

同一个线程中的指令因访问相同的逻辑寄存器而产生了相关性。前后两条指令写同一 个逻辑寄存器,表示这两条指令之间存在写后写(WAW)相关;前一条指令读一个逻辑寄 存器,后一条指令写同一个逻辑寄存器,表示这两条指令之间存在读后写(WAR)相关; 前一条指令写一个逻辑寄存器,后一条指令读同一个逻辑寄存器,表示这两条指令之间存 在写后读(RAW)相关。为了提高指令执行的并行度,当前的微处理器都通过寄存器重命 名技术,将少量的逻辑寄存器动态映射到数量更多的物理寄存器上,在保留指令间的写后 读相关的同时,解除写后写相关和读后写相关,以便指令实现乱序发射,提高微处理器执 行效率。

超标量微处理器的指令流水线通常划分为:取指、译码、寄存器重命名、发射、读寄 存器文件、执行、提交几个流水线站台。为了描述方便,所有进入指令流水线但还没有提 交的指令称为飞行的指令。

专利《一种超标量微处理器中控制乱序发射的飞行记分牌装置》(代号: ZL200910057367.6)首次在指令流水线设计中引入了飞行记分牌的概念,通过设置与空闲 物理寄存器数量相同的飞行记分牌位,用位数更短的飞行记分牌号代替物理寄存器号表示 指令之间的写后读相关,实现指令乱序发射。对于目标寄存器有效的指令,在进入发射队 列时,则将其目标寄存器对应的飞行记分牌位设置为屏蔽状态,当该指令执行完成即将写 其目标寄存器时,将其对应的飞行记分牌位设置为非屏蔽状态。对于源寄存器有效的指令, 在准备发射时,检查其源寄存器对应的飞行记分牌是否处于屏蔽状态,只有处于非屏蔽状 态才表示其源寄存器中的值可读,该指令可以发射到执行部件执行。

随着集成电路工艺技术的发展,同时多线程技术(SMT:Simultaneousmultithreading) 应运而生。该技术充分利用程序的线程级并行,允许在一个时钟周期内发射并执行来自不 同线程的多条指令,通过提高处理器发射槽以及功能部件的利用率,来显著提高处理器的 执行效率,是当前微处理器结构设计的关键技术。

为了提高硬件资源的利用率,指令流水线在实现SMT技术时,制定了如下设计原则:

不同的线程具有各自独立的逻辑寄存器,但共享同一套物理寄存器;

来自不同线程的指令可同时发射到不同的执行部件;

一个线程发生转移预测失败或异常时,只回退该线程对应的处理器状态,其他线程继 续正常执行。

每个目标寄存器有效的指令在寄存器重命名时分配一个空闲的物理寄存器,在提交时 释放一个空闲的物理寄存器。在支持SMT技术之前,指令流水线上的所有指令都来自同 一个线程,指令提交的顺序与指令重命名的顺序相同,且都与指令在程序中的顺序相同, 因此如专利《一种超标量微处理器中控制乱序发射的飞行记分牌装置》所述,分配的飞行 记分牌号就是指令到达寄存器重命名站台的顺序号模上空闲物理寄存器数。假定空闲物理 寄存器数量为n,则飞行记分牌的数量也为n,飞行记分牌号从“0”开始分配,依次加“1”, 分配到“n-1”后,再从“0”开始循环分配。这种飞行记分牌分配方法之所以正确,其原 因在于:某条目标寄存器有效的指令i分配了飞行记分牌号Fi,后续第n条目标寄存器有 效的指令n+i允许进行寄存器重命名时,指令i已提交并释放了一个空闲物理寄存器,对 应的飞行记分牌号Fi已无意义,Fi可以释放并重新分配给新的指令使用。

支持SMT技术之后,不同线程的指令共享同一套物理寄存器,物理寄存器的数量比 支持SMT技术之前更多。如果按传统的记分牌处理方法,直接以物理寄存器号作为记分 牌号,则硬件开销更大。此时上述专利中的飞行记分牌处理方法不再适用,其原因在于: 来自不同线程的指令交错执行时,指令提交的顺序与指令寄存器重命名的顺序不同,某条 目标寄存器有效的指令i分配了飞行记分牌号Fi,后续第n条目标寄存器有效的指令n+i 允许进行寄存器重命名时,指令i可能还没有执行完成,对应的飞行记分牌号Fi还有意义, Fi不可以释放并重新分配给指令n+i使用。

发明内容

本发明所要解决的技术问题是提供一种支持同时多线程指令乱序发射的飞行记分牌 处理方法,能够在不同线程共享同一套物理寄存器的条件下,分配、回收和回退飞行记分 牌号,并通过飞行记分牌控制来自多个线程的指令并行、乱序发射,提高了微处理器的能 耗比。

本发明解决其技术问题所采用的技术方案是:提供一种支持同时多线程指令乱序发射 的飞行记分牌处理方法,在寄存器重命名站台设置寄存器映射表、线程控制列表和总空闲 列表;所述寄存器映射表以逻辑寄存器号为索引,条目数等于逻辑寄存器数;所述线程控 制列表为循环队列结构,条目数等于空闲物理寄存器数,采用头尾指针管理,设置满标志; 所述总空闲列表为循环队列结构,条目数等于空闲物理寄存器数,采用头尾指针管理,设 置满标志,包括以下步骤:

初始时,将所有的飞行记分牌号按任意顺序与所有的空闲物理寄存器号一一绑定;

指令进行寄存器重命名时,给指令的目标寄存器号分配一个空闲物理寄存器号和与之 绑定的飞行记分牌号;

指令提交时,该指令当前分配的飞行记分牌号与当前分配的物理寄存器号解除绑定, 与该指令上一次分配的物理寄存器号重新绑定;

在指令回退时,该指令当前分配的飞行记分牌号与当前分配的物理寄存器号一起被回 收,并恢复其目标寄存器上一次分配的飞行记分牌号和上一次分配的物理寄存器号。

所述寄存器映射表的每个列表条目包括:物理寄存器号,用于表示该条目对应的逻辑 寄存器最后一次进行寄存器重命名时,所分配的空闲物理寄存器号,每个列表条目需设置 初始映射的物理寄存器号;飞行记分牌有效位,用于表示本条目的飞行记分牌号是否有效, 该位为“0”表示无效,为“1”表示有效,初始时,该位为“0”;飞行记分牌号,用于表 示本条目的物理寄存器号绑定的飞行记分牌号,初始时,该位无意义。

所述线程控制列表初始时,头指针和尾指针都指向条目0,满标志为“0”,所有条目 无效,每个列表条目包括:飞行逻辑寄存器号,用于表示飞行指令的目标逻辑寄存器号; 飞行物理寄存器号,用于表示本条目记录的飞行逻辑寄存器当前进行寄存器重命名时,所 分配的空闲物理寄存器号;飞行记分牌号,用于表示本条目记录的飞行逻辑寄存器当前进 行寄存器重命名时,所分配的空闲记分牌号;历史记分牌有效位,用于表示本条目记录的 历史记分牌号是否有效,该位为“0”表示无效,为“1”表示有效;历史记分牌号,用于 表示本条目记录的飞行逻辑寄存器上一次进行寄存器重命名时,所分配的飞行记分牌号; 历史物理寄存器号,用于表示本条目记录的飞行逻辑寄存器上一次进行重命名时,所分配 的物理寄存器号。

所述总空闲列表初始时,头指针和尾指针都指向条目0,满标志为“1”,所有条目都 有效,每个列表条目包括:空闲物理寄存器号,用于表示当前处于空闲状态可分配给目标 寄存器使用的物理寄存器号,初始时,各条目依次存放所有的空闲物理寄存器号;空闲记 分牌号,用于表示与本条目的空闲物理寄存器号绑定的空闲记分牌号,初始时,各条目依 次存放所有的空闲记分牌号。

指令进行寄存器重命名包括以下步骤:

(1)从总空闲列表中获得空闲物理寄存器号和空闲记分牌号分配给目标寄存器,并 分别作为飞行物理寄存器号和飞行记分牌号写入对应线程的控制列表队尾;

(2)将目标寄存器作为飞行逻辑寄存器号写入对应线程的控制列表队尾;

(3)以目标寄存器为索引查询对应线程的寄存器映射表,获得目标寄存器上一次映 射的物理寄存器号、飞行记分牌有效位和飞行记分牌号,分别作为历史物理寄存器号、历 史记分牌有效位和历史记分牌号写入对应线程的控制列表队尾;

(4)用空闲记分牌号查询对应线程的寄存器映射表,进行内容相联匹配,找到飞行 记分牌号等于空闲记分牌号的条目,置条目中的飞行记分牌有效位为“0”;

(5)以目标寄存器为索引查询对应线程的寄存器映射表,将空闲物理寄存器号和空 闲记分牌号分别作为物理寄存器号和飞行记分牌号写入对应的条目,置飞行记分牌有效位 为“1”;

(6)将空闲物理寄存器号、空闲记分牌号、以及控制列表尾指针与指令一起送发射 站台;

(7)总空闲列表的头指针循环加“1”,对应线程的控制列表队尾指针循环加“1”。

指令提交时包括以下步骤:从对应线程的线程控制列表中读出历史物理寄存器号和飞 行记分牌号,并作为空闲物理寄存器号和空闲记分牌号写入到总空闲列表队尾,总空闲列 表尾指针循环加“1”。

指令回退时包括以下步骤:

(1)从对应线程的控制列表回退头指针所指条目中,读出飞行逻辑寄存器号、飞行 物理寄存器号、飞行记分牌号、历史物理寄存器号、历史记分牌有效位和历史记分牌号, 对应线程的控制列表的回退头指针循环减“1”,当前尾指针循环减“1”;

(2)以飞行逻辑寄存器号为索引查询对应线程的寄存器映射表,将历史物理寄存器 号、历史记分牌有效位和历史记分牌号分别作为物理寄存器号、飞行记分牌有效位和飞行 记分牌号写入对应线程的寄存器映射表;

(3)将飞行物理寄存器号和飞行记分牌号分别作为空闲物理寄存器号和空闲记分牌 号写入总空闲列表队尾,总空闲列表队尾指针循环加“1”。

有益效果

由于采用了上述的技术方案,本发明与现有技术相比,具有以下的优点和积极效果:

本发明可以实现:如果同一线程内的指令存在寄存器写后读相关,则控制后一条指令 在前一条指令更改其目标寄存器后发射,确保读到更新后的值;如果同一线程内的指令不 存在寄存器写后读相关,或不同线程间的指令,则可以任意乱序发射,以获得最大的发射 效率。本发明中的飞行记分牌号总是与空闲的物理寄存器号绑定,在指令进行寄存器重命 名时,飞行记分牌号与绑定的空闲物理寄存器号一起被分配给指令的目标寄存器;在指令 提交时,当前分配的飞行记分牌号与当前分配的物理寄存器号解除绑定,该飞行记分牌号 与指令新释放的空闲物理寄存器号重新绑定;在指令回退时,当前分配的飞行记分牌号与 当前分配的物理寄存器号一起被回收,并恢复其目标寄存器上一次分配的飞行记分牌号和 上一次分配的物理寄存器号。本发明利用较少的硬件资源,解决了在多个线程同时执行且 共享同一套物理寄存器情况下,指令的乱序发射问题,提高了微处理器的能耗比。

附图说明

图1是本发明中描述的各类列表在指令流水线上的位置示意图;

图2是本发明中各类列表在实施例下的初始状态示意图;

图3是本发明中各类列表在实施例下经过寄存器重命名后的状态示意图;

图4是本发明中各类列表在实施例下经过指令提交后的状态示意图;

图5是本发明中各类列表在实施例下经过指令异常后的状态示意图。

具体实施方式

下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而 不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人 员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定 的范围。

本发明设置的飞行记分牌数量仍然等于空闲物理寄存器数量,假定数量为n。初始时, 先将飞行记分牌号按任意顺序与所有空闲物理寄存器号一一绑定。寄存器重命名时,给一 条指令的目标寄存器(Rd)分配一个空闲物理寄存器号(Pdc),同时分配一个与该空闲物 理寄存器号(Pdc)绑定的飞行记分牌号(Fdci)。指令提交时,目标寄存器(Rd)上一次 分配的物理寄存器(Pdh)转换为空闲的物理寄存器,当前分配的物理寄存器(Pdc)转换 为软件可见的逻辑寄存器,当前分配的飞行记分牌号(Fdci)与当前分配的物理寄存器(Pdc) 解除绑定,与新释放的空闲物理寄存器(Pdh)重新绑定。在指令回退时,当前分配的飞 行记分牌号(Fdci)与当前分配的物理寄存器号(Pdc)被一起回收,恢复其目标寄存器(Rd) 上一次分配的飞行记分牌号(Fdhi)和上一次分配的物理寄存器号(Pdh)。

专利《一种超标量微处理器中控制乱序发射的飞行记分牌装置》中的飞行记分牌号本 质是空闲物理寄存器在空闲列表中的位置,总是按“0、1、2……(n-1)、0、……”的顺 序循环分配。而本发明中的飞行记分牌号本质是与空闲物理寄存器自身建立绑定关系,与 空闲物理寄存器在空闲列表中的位置无关,真正分配的飞行记分牌号与进行寄存器重命名 的指令流密切相关。因此,本发明需设置相应的硬件结构,记录飞行记分牌号与空闲物理 寄存器间的绑定关系。

下面描述完整的寄存器重命名和飞行记分牌控制的技术方案,如图1所示,首先在寄 存器重命名站台设置的如下几个列表:

(1)某线程的寄存器映射表:每个线程独立设置一个表,该表是以逻辑寄存器号为 索引的二维表,条目数等于逻辑寄存器数,每个列表条目包括:

a)物理寄存器号:表示该条目对应的逻辑寄存器最后一次进行寄存器重命名时, 所分配的空闲物理寄存器号,每个列表条目需设置初始映射的物理寄存器号;

b)飞行记分牌有效位:表示本条目的飞行记分牌号是否有效,该位为“0”表示 无效,为“1”表示有效。初始时,该位为“0”;

c)飞行记分牌号:表示与本条目的物理寄存器号绑定的飞行记分牌号。初始时, 该域无意义。

(2)某线程的控制列表:每个线程独立设置一个表,用于记录本线程飞行指令的相 关信息。该表为循环队列结构,条目数等于空闲物理寄存器数,采用头尾指针 管理,设置满标志。初始时,头指针和尾指针都指向条目0,满标志为“0”, 所有条目无效。每个列表条目包括:

a)飞行逻辑寄存器号:表示飞行指令的目标寄存器号;

b)飞行物理寄存器号:表示本条目记录的飞行逻辑寄存器当前进行寄存器重命名 时,所分配的空闲物理寄存器号;

c)飞行记分牌号:表示本条目记录的飞行逻辑寄存器当前进行寄存器重命名时, 所分配的飞行记分牌号;

d)历史记分牌有效位:表示本条目记录的历史记分牌号是否有效,该位为“0” 表示无效,为“1”表示有效;

e)历史记分牌号:表示本条目记录的飞行逻辑寄存器上一次进行寄存器重命名 时,所分配的飞行记分牌号;

f)历史物理寄存器号;表示本条目记录的飞行逻辑寄存器上一次进行重命名时, 所分配的物理寄存器号,也就是该指令提交后即将释放的空闲物理寄存器号。

(3)总空闲列表:所有线程共享一个表,用于记录空闲物理寄存器信息。该表为循 环队列结构,条目数等于空闲物理寄存器数,采用头尾指针管理,设置满标志。 初始时,头指针和尾指针都指向条目0,满标志为“1”,所有条目都有效。每 个列表条目包括:

a)空闲物理寄存器号:表示当前处于空闲状态,可分配给目标寄存器使用的物理 寄存器号。初始时,各条目依次存放所有的空闲物理寄存器号;

b)空闲记分牌号;表示与本条目的空闲物理寄存器号绑定的空闲记分牌号。初始 时,各条目依次存放所有的空闲记分牌号。

在指令发射站台设置n位的飞行记分牌屏蔽位,该位为“0”表示允许发射,否则表示 不允许发射。

指令进入寄存器重命名站台时,如果指令的源寄存器(Rs)有效,则以逻辑寄存器号 (Rs)为索引访问对应线程的寄存器映射表,获得物理寄存器号(Ps)、飞行记分牌有效 位(Fsiv)和飞行记分牌号(Fsi),与指令一起进入发射站台。

如果指令的目标寄存器(Rd)有效,则执行如下操作:

(1)从总空闲列表中获得空闲物理寄存器号(Pdc)和空闲记分牌号(Fdci),分配 给Rd,并分别作为飞行物理寄存器号和飞行记分牌号写入对应线程的控制列 表队尾;

(2)将Rd作为飞行逻辑寄存器号写入对应线程的控制列表队尾;

(3)以Rd为索引查询对应线程的寄存器映射表,获得Rd上一次寄存器重命名分 配的物理寄存器号、飞行记分牌有效位和飞行记分牌号,分别作为历史物理 寄存器号(Pdh)、历史记分牌有效位(Fdhiv)和历史记分牌号(Fdhi)写入 对应线程的控制列表队尾;

(4)用Fdci查询对应线程的寄存器映射表,进行内容相联匹配(CAM),找到飞行 记分牌号等于Fdci的条目,置条目中的飞行记分牌有效位为“0”;

(5)以Rd为索引查询对应线程的寄存器映射表,将Pdc和Fdci分别作为物理寄存 器号和飞行记分牌号写入对应的条目,并置飞行记分牌有效位为“1”;

(6)将Pdc、Fdci、以及控制列表尾指针与指令一起送发射站台;

(7)总空闲列表的头指针循环加“1”,对应线程的控制列表队尾指针循环加“1”。

由此可见,一条源寄存器有效的指令经过寄存器重命名后,将携带源物理寄存器号 (Ps)、源飞行记分牌有效位(Fsiv)和源飞行记分牌号(Fsi)。如果指令有多个源寄存器, 则有多套上述信息。一条目标寄存器有效的指令经过寄存器重命名后,将携带目标物理寄 存器号(Pdc)和目标飞行记分牌号(Fdci)。此外,指令经过寄存器重命名后,还携带本 指令进行寄存器重命名操作前的控制列表尾指针。

指令进入发射站台时,如果指令的目标寄存器有效,则设置飞行记分牌屏蔽位的第Fdci 位为“1”。

指令在发射队列中等待发射时,如果携带的源飞行记分牌有效位(Fsiv)为“1”,则检 查飞行记分牌屏蔽位的第Fsi位:如果该位为“0”,则表示源物理寄存器(Pdc)中的值可 读,否则表示不可读,指令还需要在发射队列中继续等待;如果携带的源飞行记分牌有效 位(Fsiv)为“0”,则不需要检查飞行记分牌屏蔽位,源物理寄存器(Pdc)中的值可读。

指令发射到执行部件后,在即将把执行结果写入目标物理寄存器(Pdc)时,置飞行记 分牌屏蔽位的第(Fdci)位为“0”,表示该物理寄存器(Pdc)中的值可读。

指令提交时,如果目标寄存器有效,则从对应线程的控制列表中读出历史物理寄存器 号(Pdh)和飞行记分牌号(Fdci),作为空闲物理寄存器号和空闲记分牌号写入总空闲列 表队尾,总空闲列表尾指针循环加“1”。如果同时有多个线程提交指令,则需要并行读多 个线程的控制列表,并将读出的多个Pdh和Fdc写入总空闲列表中,写入的先后顺序没有 要求。

发生转移预测失败时,需要回退转移指令之后的指令对上述各种列表状态的修改。发 生异常时,需要回退异常指令自身及之后的指令对上述各种列表状态的修改。当该指令发 生转移预测失败或异常时,将对应线程的控制列表当前尾指针循环减“1”后作为回退头 指针,将转移预测失败或异常指令携带的控制列表尾指针作为回退尾指针,从头到尾依次 进行如下操作:

(1)从对应线程的控制列表回退头指针所指条目中,读出飞行逻辑寄存器号(Rd)、 飞行物理寄存器号(Pdc)、飞行记分牌号(Fdci)、历史物理寄存器号(Pdh)、 历史记分牌有效位(Fdhiv)和历史记分牌号(Fdhi),对应线程的控制列表的 回退头指针循环减“1”,当前尾指针循环减“1”;

(2)以Rd为索引查询对应线程的寄存器映射表,将Pdh、Fdhiv和Fdhi分别作为 物理寄存器号、飞行记分牌有效位和飞行记分牌号写入对应线程的寄存器映 射表;

(3)将Pdc和Fdci分别作为空闲物理寄存器号和空闲记分牌号写入总空闲列表队 尾,总空闲列表队尾指针循环加“1”;

(4)置发射站台中飞行记分牌屏蔽位的第Fdci位为“0”。

当出现多个线程同时发生转移预测失败或异常时,需要并行读取多个线程的控制列 表,并同时对总空闲列表进行写操作,写入的先后顺序没有要求。

下面以整数指令为例进一步说明本发明。

假定微处理器支持两个同时多线程技术,每个线程可以使用42个整数逻辑寄存器, 记为R0、R1、……、R41,其中R0到R40可以作为源寄存器和目标寄存器,R41值为全 “0”,只能作为源寄存器。两个线程共同使用的物理寄存器为146个,记为P0、P1、……、 P145。初始时,将P0、P1、……、P40分配给线程0的逻辑寄存器R0、R1、……、R40, 将P41、P42、……、P81分配给线程1的逻辑寄存器R0、R1、……、R40。剩余64个的 空闲物理寄存器,分别为P82、P83、……、P145。

在上述条件下,每个线程的重命名映射表条目为42个,每个线程的控制列表条目为 64个,总空闲列表条目为64个,飞行记分牌屏蔽位为64位,飞行记分牌号用6位来表示。 如果用传统的记分牌技术,记分牌屏蔽位需设置146位,记分牌号需要用8位来表示。更 短的飞行记分牌位和飞行记分牌号,在具体物理实现时,意味着更短的访问延迟和更少的 硬件资源开销。

各类列表的初始状态如图2所示。

线程0的寄存器映射表中,物理寄存器号分别为P0、P1、……、P41,飞行记分牌有 效位为“0”,飞行记分牌号无意义。线程1的寄存器映射表中,物理寄存器号分别为P42、 P43、……、P81,飞行记分牌有效位为“0”,飞行记分牌号无意义。

线程0的控制列表为空,头指针和尾指针都指向条目0,满标志为“0”。线程1的控 制列表与线程0相同。

总空闲列表中,头指针和尾指针都指向条目0,满标志为“1”。条目中的空闲物理寄 存器号分别为:P82、P83、……、P145,空闲记分牌号分别为:F0、F1、……、F63。

假定线程0的一个指令组先到达寄存器重命名站台,指令组内容如下:

Inst0:R8+R9-》R1,表示读源寄存器R8和R9,结果写入R1;

Inst1:R1+R9-》R0,表示读源寄存器R1和R9,结果写入R0;

Inst2:R0+R8-》R1,表示读源寄存器R0和R8,结果写入R1;

Inst3:R0-》mem,表示读源寄存器R0,结果写入主存,该指令目标寄存器无效;

指令Inst0在寄存器重命名站台的操作步骤如下:

(1)以源寄存器(R8)为索引查询线程0的重命名映射表,读出该指令真正要访问 的物理寄存器号(P8),由于所访问条目中的飞行记分牌有效位为“0”,表 明该指令发射时,P8中的值可读;用源寄存器(R9)索引线程0的重命名映 射表,读出该指令真正要访问的物理寄存器号(P9),由于所访问条目中的 飞行记分牌有效位为“0”,表明该指令发射时,P9中的值可读;

(2)从总空闲列表中获得空闲物理寄存器号(P82)和空闲记分牌号(F0),分配给 目标寄存器(R1);将P82和F0分别作为飞行物理寄存器号和飞行记分牌号 写入线程0的控制列表队尾(条目0);

(3)将R1作为飞行逻辑寄存器号写入对应线程的控制列表队尾(条目0);

(4)以R1为索引查询线程0的重命名映射表,读出R1上一次分配的物理寄存器 (P1),将P1作为历史物理寄存器号写入线程0的控制列表队尾(条目0), 由于P1对应的飞行记分牌有效位为“0”,因此置线程0的控制列表队尾(条 目0)中的历史记分牌有效位为“0”;

(5)用F0查询线程0的寄存器映射表,进行内容相联匹配(CAM),没有找到飞 行记分牌号等于F0的条目;

(6)以R1为索引查询线程0的寄存器映射表,将P82和F0分别作为物理寄存器 号和飞行记分牌号写入对应的条目,并置飞行记分牌有效位为“1”;

(7)R8、R9、P82、F0以及线程0的尾指针(“0”)与指令一起送发射站台;

(8)总空闲列表的头指针循环加“1”,对应线程的控制列表队尾指针循环加“1”。

指令Inst0经过寄存器重命名站台后,演变为P8+P9-》P82,表示读源寄存器P8和 P9,结果写入目标寄存器P82,该指令进入发射站台后,设置飞行记分牌屏蔽位的第F0 位为“1”,该指令的源寄存器P8和P9中的值都已准备好,不需要查询飞行记分牌屏蔽位, 在其他条件都满足的情况下可直接发射到执行部件。

后续指令类似指令Inst0依次进行上述操作。

指令Inst1经过寄存器重命名站台后,演变为P82+P9-》P83,表示读源寄存器P82 和P9,结果写入目标寄存器P83,该指令进入发射站台后,设置飞行记分牌屏蔽位的第F1 位为“1”,该指令的源寄存器P9中的值都已准备好,但源寄存器P82需要查询飞行记分 牌屏蔽位的第F0位,需等指令Inst0即将写P82时,才能允许指令Inst1发射到执行部件。

指令Inst2经过寄存器重命名站台后,演变为P83+P8-》P84,表示读源寄存器P83 和P8,结果写入目标寄存器P84,该指令进入发射站台后,设置飞行记分牌屏蔽位的第F2 位为“1”,该指令的源寄存器P8中的值都已准备好,但源寄存器P83需要查询飞行记分 牌屏蔽位的第F1位,需等指令Inst1即将写P83时,才能允许指令Inst2发射到执行部件。

指令Inst3经过寄存器重命名站台后,演变为P83-》mem,表示读源寄存器P83,结 果写入主存中。由于该指令的目标寄存器无效,因此不分配空闲物理寄存器,该指令进入 发射站台后,不设置飞行记分牌屏蔽位。该指令的源寄存器P83需要查询飞行记分牌屏蔽 位的第F1位,需等指令Inst1即将写P83时,才能允许指令Inst3发射到执行部件。

假定后续是线程1的一个指令组到达寄存器重命名站台,指令组内容如下:

Inst4:R8+R9-》R1;

Inst5:R1+R9-》R0;

Inst6:R0+R8-》R1;

Inst7:R0+R1-》R2:

上述指令类似指令Inst0依次进行上述操作,分别访问和修改线程1的寄存器映射表 和线程1的控制列表。

指令Inst4经过寄存器重命名站台后,演变为P49+P50-》P85,表示读源寄存器P49 和P50,结果写入目标寄存器P85,该指令进入发射站台后,设置飞行记分牌屏蔽位的第 F3位为“1”,该指令的所有源寄存器P49和P50中的值都已准备好,不需要查询飞行记分 牌屏蔽位,在其他条件都满足的情况下可直接发射到执行部件。

指令Inst5经过寄存器重命名站台后,演变为P85+P50-》P86,表示读源寄存器P85 和P50,结果写入目标寄存器P86,该指令进入发射站台后,设置飞行记分牌屏蔽位的第 F4位为“1”,该指令的源寄存器P50中的值都已准备好,但源寄存器P85需要查询飞行记 分牌屏蔽位的第F3位,需等指令Inst4即将写P85时,才能允许指令Inst5发射到执行部 件。

指令Inst6经过寄存器重命名站台后,演变为P86+P49-》P87,表示读源寄存器P86 和P49,结果写入目标寄存器P87,该指令进入发射站台后,设置飞行记分牌屏蔽位的第 F5位为“1”,该指令的源寄存器P49中的值都已准备好,但源寄存器P86需要查询飞行记 分牌屏蔽位的第F4位,需等指令Inst5即将写P86时,才能允许指令Inst6发射到执行部 件。

指令Inst7经过寄存器重命名站台后,演变为P86+P87-》P88,表示读源寄存器P86 和源寄存器P87,结果写入目标寄存器P88,该指令进入发射站台后,设置飞行记分牌屏 蔽位的第F6位为“1”,该指令的源寄存器P86和P87都需要查询飞行记分牌屏蔽位的第 F4和第F5位,需等指令Inst4即将写或已写P86,且指令Inst5即将写或已写P87时,才 能允许指令Inst6发射到执行部件。

当指令7经过寄存器重命名站台后,各表状态如图3所示。

假定线程1的指令Inst4~Inst6先提交,则相关的操作依次如下:

(1)Inst4:P49+P50-》P85提交;从线程1的控制列表中头指针(条目0)中, 读出历史物理寄存器号P42和飞行记分牌号F3,写入总空闲列表队尾(条目 0),线程1的控制列表中头指针循环加“1”,总空闲列表队尾指针循环加“1”;

(2)Inst5:P85+P50-》P86提交;从线程1的控制列表中头指针(条目1)中, 读出历史物理寄存器号P41和飞行记分牌号F4,写入总空闲列表队尾(条目 1),线程1的控制列表中头指针循环加“1”,总空闲列表队尾指针循环加“1”;

(3)Inst6:P86+P49-》P87提交;从线程1的控制列表中头指针(条目2)中, 读出历史物理寄存器号P85和飞行记分牌号F5,写入到总空闲列表队尾(条 目2),线程1的控制列表中头指针循环加“1”,总空闲列表队尾指针循环加 “1”;

线程1的指令Inst4~Inst6提交后,各表的状态如图4所示。

假定线程0的指令Inst1发生异常,此时指令Inst0还未提交,需继续执行,指令Inst1~ Inst3都需要回退。线程0的回退头指针指向条目2,回退尾指针指向条目1。

指令Inst3的目标寄存器无效,各表不需要任何回退操作;

回退指令Inst2的操作如下:

(1)从线程0的控制列表回退头指针所指条目(条目2)中,读出飞行逻辑寄存器 号R1、飞行物理寄存器号P84、飞行记分牌号F2、历史物理寄存器号P82、 历史记分牌有效位“1”和历史记分牌号F0,线程0的控制列表的回退头指 针循环减“1”,当前尾指针循环减“1”;

(2)以R1为索引查询线程0的寄存器映射表,将P1写入物理寄存器号域,将F0 写入飞行记分牌号域,置飞行记分牌有效位为“1”;

(3)将P84和F2写入总空闲列表队尾(条目3),总空闲列表队尾指针循环加“1”;

(4)置发射站台中飞行记分牌屏蔽位的第F2位为“0”。

回退指令Inst1的操作如下:

(5)从线程0的控制列表回退头指针所指条目(条目1)中,读出飞行逻辑寄存器 号R0、飞行物理寄存器号P83、飞行记分牌号F1、历史物理寄存器号P0、 历史记分牌有效位“0”,线程0的控制列表的回退头指针循环减“1”,当前 尾指针循环减“1”;

(6)以R0为索引查询线程0的寄存器映射表,将P0写入物理寄存器号域,置飞行 记分牌有效位为“0”;

(7)将P83和F1写入总空闲列表队尾(条目4),总空闲列表队尾指针循环加“1”;

(8)置发射站台中飞行记分牌屏蔽位的第F1位为“0”。

指令Inst1回退结束后各表的状态如图5所示。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号