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

文档序号:9765798阅读:520来源:国知局
一种支持同时多线程指令乱序发射的飞行记分牌处理方法
【技术领域】
[0001]本发明涉及多线程处理技术领域,特别是涉及一种支持同时多线程指令乱序发射的飞行记分牌处理方法。
【背景技术】
[0002]同一个线程中的指令因访问相同的逻辑寄存器而产生了相关性。前后两条指令写同一个逻辑寄存器,表示这两条指令之间存在写后写(WAW)相关;前一条指令读一个逻辑寄存器,后一条指令写同一个逻辑寄存器,表示这两条指令之间存在读后写(WAR)相关;前一条指令写一个逻辑寄存器,后一条指令读同一个逻辑寄存器,表示这两条指令之间存在写后读(RAW)相关。为了提高指令执行的并行度,当前的微处理器都通过寄存器重命名技术,将少量的逻辑寄存器动态映射到数量更多的物理寄存器上,在保留指令间的写后读相关的同时,解除写后写相关和读后写相关,以便指令实现乱序发射,提高微处理器执行效率。
[0003]超标量微处理器的指令流水线通常划分为:取指、译码、寄存器重命名、发射、读寄存器文件、执行、提交几个流水线站台。为了描述方便,所有进入指令流水线但还没有提交的指令称为飞行的指令。
[0004]专利《一种超标量微处理器中控制乱序发射的飞行记分牌装置》(代号:ZL200910057367.6)首次在指令流水线设计中引入了飞行记分牌的概念,通过设置与空闲物理寄存器数量相同的飞行记分牌位,用位数更短的飞行记分牌号代替物理寄存器号表示指令之间的写后读相关,实现指令乱序发射。对于目标寄存器有效的指令,在进入发射队列时,则将其目标寄存器对应的飞行记分牌位设置为屏蔽状态,当该指令执行完成即将写其目标寄存器时,将其对应的飞行记分牌位设置为非屏蔽状态。对于源寄存器有效的指令,在准备发射时,检查其源寄存器对应的飞行记分牌是否处于屏蔽状态,只有处于非屏蔽状态才表示其源寄存器中的值可读,该指令可以发射到执行部件执行。
[0005]随着集成电路工艺技术的发展,同时多线程技术(SMT: Simultaneousmultithreading)应运而生。该技术充分利用程序的线程级并行,允许在一个时钟周期内发射并执行来自不同线程的多条指令,通过提高处理器发射槽以及功能部件的利用率,来显著提高处理器的执行效率,是当前微处理器结构设计的关键技术。
[0006]为了提高硬件资源的利用率,指令流水线在实现SMT技术时,制定了如下设计原则:
[0007]不同的线程具有各自独立的逻辑寄存器,但共享同一套物理寄存器;
[0008]来自不同线程的指令可同时发射到不同的执行部件;
[0009]—个线程发生转移预测失败或异常时,只回退该线程对应的处理器状态,其他线程继续正常执行。
[0010]每个目标寄存器有效的指令在寄存器重命名时分配一个空闲的物理寄存器,在提交时释放一个空闲的物理寄存器。在支持SMT技术之前,指令流水线上的所有指令都来自同一个线程,指令提交的顺序与指令重命名的顺序相同,且都与指令在程序中的顺序相同,因此如专利《一种超标量微处理器中控制乱序发射的飞行记分牌装置》所述,分配的飞行记分牌号就是指令到达寄存器重命名站台的顺序号模上空闲物理寄存器数。假定空闲物理寄存器数量为η,则飞行记分牌的数量也为η,飞行记分牌号从“O”开始分配,依次加“I”,分配到“η-Γ后,再从“O”开始循环分配。这种飞行记分牌分配方法之所以正确,其原因在于:某条目标寄存器有效的指令i分配了飞行记分牌号Fi,后续第η条目标寄存器有效的指令n+i允许进行寄存器重命名时,指令i已提交并释放了一个空闲物理寄存器,对应的飞行记分牌号Fi已无意义,Fi可以释放并重新分配给新的指令使用。
[0011 ] 支持SMT技术之后,不同线程的指令共享同一套物理寄存器,物理寄存器的数量比支持SMT技术之前更多。如果按传统的记分牌处理方法,直接以物理寄存器号作为记分牌号,则硬件开销更大。此时上述专利中的飞行记分牌处理方法不再适用,其原因在于:来自不同线程的指令交错执行时,指令提交的顺序与指令寄存器重命名的顺序不同,某条目标寄存器有效的指令i分配了飞行记分牌号Fi,后续第η条目标寄存器有效的指令n+i允许进行寄存器重命名时,指令i可能还没有执行完成,对应的飞行记分牌号Fi还有意义,Fi不可以释放并重新分配给指令n+i使用。

【发明内容】

[0012]本发明所要解决的技术问题是提供一种支持同时多线程指令乱序发射的飞行记分牌处理方法,能够在不同线程共享同一套物理寄存器的条件下,分配、回收和回退飞行记分牌号,并通过飞行记分牌控制来自多个线程的指令并行、乱序发射,提高了微处理器的能耗比。
[0013]本发明解决其技术问题所采用的技术方案是:提供一种支持同时多线程指令乱序发射的飞行记分牌处理方法,在寄存器重命名站台设置寄存器映射表、线程控制列表和总空闲列表;所述寄存器映射表以逻辑寄存器号为索引,条目数等于逻辑寄存器数;所述线程控制列表为循环队列结构,条目数等于空闲物理寄存器数,采用头尾指针管理,设置满标志;所述总空闲列表为循环队列结构,条目数等于空闲物理寄存器数,采用头尾指针管理,设置满标志,包括以下步骤:
[0014]初始时,将所有的飞行记分牌号按任意顺序与所有的空闲物理寄存器号一一绑定;
[0015]指令进行寄存器重命名时,给指令的目标寄存器号分配一个空闲物理寄存器号和与之绑定的飞行记分牌号;
[0016]指令提交时,该指令当前分配的飞行记分牌号与当前分配的物理寄存器号解除绑定,与该指令上一次分配的物理寄存器号重新绑定;
[0017]在指令回退时,该指令当前分配的飞行记分牌号与当前分配的物理寄存器号一起被回收,并恢复其目标寄存器上一次分配的飞行记分牌号和上一次分配的物理寄存器号。
[0018]所述寄存器映射表的每个列表条目包括:物理寄存器号,用于表示该条目对应的逻辑寄存器最后一次进行寄存器重命名时,所分配的空闲物理寄存器号,每个列表条目需设置初始映射的物理寄存器号;飞行记分牌有效位,用于表示本条目的飞行记分牌号是否有效,该位为“O”表示无效,为“I”表示有效,初始时,该位为“O” ;飞行记分牌号,用于表示本条目的物理寄存器号绑定的飞行记分牌号,初始时,该位无意义。
[0019]所述线程控制列表初始时,头指针和尾指针都指向条目O,满标志为“O”,所有条目无效,每个列表条目包括:飞行逻辑寄存器号,用于表示飞行指令的目标逻辑寄存器号;飞行物理寄存器号,用于表示本条目记录的飞行逻辑寄存器当前进行寄存器重命名时,所分配的空闲物理寄存器号;飞行记分牌号,用于表示本条目记录的飞行逻辑寄存器当前进行寄存器重命名时,所分配的空闲记分牌号;历史记分牌有效位,用于表示本条目记录的历史记分牌号是否有效,该位为“O”表示无效,为“I”表示有效;历史记分牌号,用于表示本条目记录的飞行逻辑寄存器上一次进行寄存器重命名时,所分配的飞行记分牌号;历史物理寄存器号,用于表示本条目记录的飞行逻辑寄存器上一次进行重命名时,所分配的物理寄存器号。
[0020]所述总空闲列表初始时,头指针和尾指针都指向条目O,满标志为“I”,所有条目都有效,每个列表条目包括:空闲物理寄存器号,用于表示当前处于空闲状态可分配给目标寄存器使用的物理寄存器号,初始时,各条目依次存放所有的空闲物理寄存器号;空闲记分牌号,用于表示与本条目的空闲物理寄存器号绑定的空闲记分牌号,初始时,各条目依次存放所有的空闲记分牌号。
[0021]指令进行寄存器重命名包括以下步骤:
[0022](I)从总空闲列表中获得空闲物理寄存器号和空闲记分牌号分配给目标寄存器,并分别作为飞行物理寄存器号和飞行记分牌号写入对应线程的控制列表队尾;
[0023](2)将目标寄存器作为飞行逻辑寄存器号写入对应线程的控制列表队尾;
[0024](3)以目标寄存器为索引查询对应线程的寄存器映射表,获得目标寄存器上一次映射的物理寄存器号、飞行记分牌有效位和飞行记分牌号,分别作为历史物理寄存器号、历史记分牌有效位和历史记分牌号写入对应线程的控制列表队尾;
[0025](4)用空闲记分牌号查询对应线程的寄存器映射表,进行内容相联匹配,找到飞行记分牌号等于空闲记分牌号的条目,置条目中的飞行记分牌有效位为“O” ;
[0026](5)以目标寄存器为索引查询对应线程的寄存器映射表,将空闲物理寄存器号和空闲记分牌号分别作为物理寄存器号和飞行记分牌号写入对应的条目,置飞行记分牌有效位为“I”;
[0027](6)将空闲物理寄存器号、空闲记分牌号、以及控制列表尾指针与指令一起送发射站台;
[0028](7)总空闲列表的头指针循环加“I”,对应线程的控制列表队尾指针循环加“I”。
[0029]指令提交时包括以下步骤:从对应线程的线程控制列表中读出历史物理寄存器号和飞行记分牌号,并作为空闲物理寄存器号和空闲记分牌号写入到总空闲列表队尾,总空闲列表尾指针循环加“I”。
[0030]指令回退时包括以下步骤:
[0031](I)从对应线程的控制列表回退头指针所指条目中,读出飞行逻辑寄存器号、飞行物理寄存器号、飞行记分牌号、历史物理寄存器号、历史记分牌有效位和历史记分牌号,对应线程的控制列表的回退头指针循环减“I”,当前尾指针循环减“I” ;
[0032](2)以飞行逻辑寄存器号为索引查询对应线程的寄存器映射表,将历史物理寄存器号、历史记分牌有效位和历史记分牌号分别作为物理寄存器号、飞行记分牌有效位和飞行记分牌号写入对应线程的寄存器
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1