一种面向标量和向量指令混合执行的发射方法及装置
技术领域
本发明涉及微处理器流水线执行领域,具体涉及一种面向标量和向量指令混合执行的发射方法及装置。
背景技术
微处理器可执行的指令有向量指令和标量指令之分,标量指令只完成一条数据的操作,例如d=a*(b+c);向量指令能够完成几组数据的操作,例如D=A*(B+C),其中A、B、C、D是长度为N的向量,A=(a 1 ,a 2 ,…,a N ),B=(b 1 ,b 2 ,…,b N ),C=(c 1 ,c 2 ,…,c N ),D=(d 1 ,d 2 ,…,d N ),向量指令能够处理大批量重复且互相没有关联的数据操作。两种指令可以使用不同的部件执行来达到高性能的目的,同时有些向量指令不适宜使用专用的功能部件执行,需要和标量共用功能部件,而当向量需要拆分时,会导致微处理器流水线性能的瓶颈。
需要拆分的向量类型主要有存储类向量指令、受向量控制寄存器(或者向量断言寄存器)控制的向量指令、设备访问类型向量指令等。向量存储指令的各个元素访问主存的地址可能是不连续的、分散的,存储单元对于这样的指令难以处理,这类的指令拆分成微指令,便能够使得存储单元能够像处理标量指令一样处理向量指令。向量控制寄存器(或者向量断言寄存器)指示向量的各个元素是否有效,有效的元素才会进行操作,拆分这类的指令能够减少功能部件的逻辑,使得功能单元处理这类指令更高效。访问设备类型的指令会产生副作用,产生的副作用对于处理器正确执行有至关重要的影响,设备访问类向量指令必须精确执行。为了保证指令执行的准确性,通常的实现方式是在指令译码时,将这类指令拆分为多个微指令,经过重命名后, 送至功能部件流水线执行,这种实现方式保证了指令执行的正确性,但是需要占用过多的流水线资源,例如消耗更多寄存器文件,同时译码逻辑将更加复杂,译码拆分的微指令将占用许多的发射资源,造成流水线的阻塞。访问设备指令的另外一种实现方式是采用向量的方式实现,这种类型的向量指令需要在发射的时候拆分成微指令精确执行。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种面向标量和向量指令混合执行的发射方法及装置,本发明面向标量和向量指令混合执行的高效发射逻辑设计,能够对标量和可拆分向量指令进行发射管理,减少发射部件的开销,同时能够保证发射部件的高效运转。
为了解决上述技术问题,本发明采用的技术方案为:
一种面向标量和向量指令混合执行的发射方法,实施步骤包括:
1)接收标量指令和向量指令并存储在共用的发射队列中;
2)从发射队列中选取一条具备发射条件的待发射指令,判断待发射指令的类型,如果待发射指令为可拆分的向量指令,则将向量指令拆分成向量微指令并存储到单独的向量缓冲部件中;对发射队列中具备发射条件的标量指令、向量缓冲部件中的向量微指令仲裁发射;
3)将发射完毕的指令从发射队列或向量缓冲部件中删除。
优选地,步骤2)的详细步骤包括:
2.1)从发射队列中选取一条具备发射条件的待发射指令;
2.2)判断待发射指令是否是可拆分的向量指令,如果不是可拆分的向量指令则跳转执行步骤2.3);否则,跳转执行步骤2.5);
2.3)判断向量缓冲部件中是否有向量微指令需要发射,如果有则在指令队列中继续等待,跳转执行步骤2.1);否则,跳转执行步骤2.4);
2.4)判定待发射指令为标量指令,将标量指令送入功能部件的流水线,标量指令发射到功能部件流水线后如果重启,则跳转执行步骤2.1)重新发射,如果没有重启则标量指令执行完成后从发射队列中清除,标量指令执行完毕;跳转执行步骤2.1);
2.5)将可拆分的向量指令拆分成向量微指令并存储在向量缓冲部件中;
2.6)判断是否遇到取消发射信号,如果拆分成向量微指令并存储在向量缓冲部件中后如果遇到取消发射信号,则将向量缓冲部件中的向量微指令作废掉,跳转执行步骤2.1)将待发射指令在指令队列中重新排序等待发射;否则,跳转执行下一步;
2.7)将向量缓冲部件中的向量微指令送入功能部件的流水线,在向量微指令的执行过程中如果遇到重启则跳转执行步骤2.7)将该向量微指令在向量缓冲部件中重新等待发射;重复上述过程直至最后一条向量微指令送入功能部件的流水线时跳转执行步骤2.8);
2.8)判定待发射指令执行完成,将待发射指令的向量微指令从向量缓冲部件中删除。
优选地,步骤2.1)从发射队列中选取一条具备发射条件的待发射指令时具体是指根据乱序发射机制选择具备发射条件的所有未发射指令中最老的指令作为待发射指令。
优选地,步骤2.1)从发射队列中选取一条具备发射条件的待发射指令时具体是指判断发射队列中最老的指令是否具备发射条件,如果具备发射条件则将最老的指令作为待发射指令。
优选地,步骤2.7)将向量缓冲部件中的向量微指令送入功能部件的流水线时,如果向量缓冲部件某一拍的向量微指令具备发射条件,则阻塞发射队列的发射标量指令、且在当前向量指令的向量微指令未全部发送完毕之前阻塞向量缓冲部件接收其他向量指令;如果向量缓冲部件某一拍的向量微指令由于自身的原因不能发射,那么这一拍不阻塞发射队列的发射标量指令,则将发射队列中最老的一条具备发射条件的标量指令送入功能部件的流水线,所述发射队列中具备指针a和指针b两套指针,指针a记录的是所有准备好了未发射的指令间的新老关系,指针b只记录未发射标量指令间的新老关系。
一种面向标量和向量指令混合执行的发射装置,包括:
指令队列,用于接收标量指令和向量指令并存储;
向量缓冲部件,用于从发射队列中选取一条具备发射条件的待发射指令,判断待发射指令的类型,如果待发射指令为可拆分的向量指令,则将向量指令拆分成向量微指令并存储到单独的向量缓冲部件中;
仲裁部件,用于对发射队列中具备发射条件的标量指令、向量缓冲部件中的向量微指令仲裁发射,并将发射完毕的指令从发射队列或向量缓冲部件中删除。
和现有技术相比,本发明具有下述优点:
1.本发明能够实现拆分向量和标量的高效混合发射,实现功能部件的完全利用,不会由于拆分操作导致流水线空转一拍,可以实现功能部件的完全流水。
2.本发明能够实现拆分向量和标量的高效混合发射,向量指令可以像标量指令一样送到发射队列中,一条向量指令也只占用发射队列的一项,发射队列有多少项就可以接收多条向量指令,不会由于拆分一条向量指令占用多个发射队列的项,导致译码/寄存器重命名/分派部件向发射队列的阻塞。
3.本发明能够实现拆分向量和标量的高效混合发射,可以节约面积和功耗,发明使用了一个专门的向量缓冲部件来管理拆分的微向量指令,发射队列不必为每一项留出较大的存储空间来存储可能的拆分微指令。
附图说明
图1为本发明实施例方法的基本流程示意图。
图2为本发明实施例方法步骤2)的详细流程示意图。
图3为本发明实施例装置的结构原理示意图。
图4为本发明实施例向量缓冲部件的结构原理示意图。
具体实施方式
实施例一:
如图1所示,本实施例面向标量和向量指令混合执行的发射方法的实施步骤包括:
1)接收标量指令和向量指令并存储在共用的发射队列中;
2)从发射队列中选取一条具备发射条件的待发射指令,判断待发射指令的类型,如果待发射指令为可拆分的向量指令,则将向量指令拆分成向量微指令并存储到单独的向量缓冲部件中;对发射队列中具备发射条件的标量指令、向量缓冲部件中的向量微指令仲裁发射;
3)将发射完毕的指令从发射队列或向量缓冲部件中删除。
进入发射队列的指令可能来自译码部件/寄存器重命名部件/分派部件等部件,指令在进入发射队列时分为两种情况,一种是指令的源操作数准备好了,具备发射条件,或者指令无源操作数,可以发射;另外一种情况是指令的源操作数未准备好,需要等待功能部件总线的结果或者微体系结构寄存器文件的结果,指令等到源操作数准备好了才具备发射的条件。
如图2所示,步骤2)的详细步骤包括:
2.1)从发射队列中选取一条具备发射条件的待发射指令;
2.2)判断待发射指令是否是可拆分的向量指令,如果不是可拆分的向量指令则跳转执行步骤2.3);否则,跳转执行步骤2.5);
2.3)判断向量缓冲部件中是否有向量微指令需要发射,如果有则在指令队列中继续等待,跳转执行步骤2.1);否则,跳转执行步骤2.4);
2.4)判定待发射指令为标量指令,将标量指令送入功能部件的流水线,标量指令发射到功能部件流水线后如果重启,则跳转执行步骤2.1)重新发射,如果没有重启则标量指令执行完成后从发射队列中清除,标量指令执行完毕;跳转执行步骤2.1);
2.5)将可拆分的向量指令拆分成向量微指令并存储在向量缓冲部件中;
2.6)判断是否遇到取消发射信号,如果拆分成向量微指令并存储在向量缓冲部件中后如果遇到取消发射信号,则将向量缓冲部件中的向量微指令作废掉,跳转执行步骤2.1)将待发射指令在指令队列中重新排序等待发射;否则,跳转执行下一步;
2.7)将向量缓冲部件中的向量微指令送入功能部件的流水线,在向量微指令的执行过程中如果遇到重启则跳转执行步骤2.7)将该向量微指令在向量缓冲部件中重新等待发射;重复上述过程直至最后一条向量微指令送入功能部件的流水线时跳转执行步骤2.8);
2.8)判定待发射指令执行完成,将待发射指令的向量微指令从向量缓冲部件中删除。
本实施例中,步骤2.1)具体是采用乱序发射机制,从发射队列中选取一条具备发射条件的待发射指令时具体是指根据乱序发射机制选择具备发射条件的所有未发射指令中最老的指令作为待发射指令。乱序发射的机制可以不按照指令的顺序发射指令,一般会选取准备好了未发射指令中最老的指令发射。准备好了未发射的最老指令的选取方式不限定,一般使用指针方式来实现,头指针所指指令就是准备好了未发射的最老指令。本实施例中,步骤2.1)从发射队列中选取一条具备发射条件的待发射指令时具体是指判断发射队列中最老的指令是否具备发射条件,如果具备发射条件则将最老的指令作为待发射指令。
发射指令是需要拆分的向量指令,则进入向量缓冲装置中根据指令的信息进行拆分,拆分动作会将一条向量指令拆分成若干个微指令,微指令存放在向量缓冲装置中。指令拆分的这一拍可以发射指令到功能部件中去,这拍可以根据实际情况采取不同的策略进行发射。分为两种策略,第一种策略是直接发射一个拆分的微指令到功能部件,前提是时序比较充裕;第二种策略发射一个准备好了未发射的最老标量指令,这是由于时序上不能满足拆分和发射,只能发射标量,因为向量缓冲装置已经被占领,不能让其它可拆分向量覆盖。本实施例中,步骤2.7)将向量缓冲部件中的向量微指令送入功能部件的流水线时,如果向量缓冲部件某一拍的向量微指令具备发射条件,则阻塞发射队列的发射标量指令、且在当前向量指令的向量微指令未全部发送完毕之前阻塞向量缓冲部件接收其他向量指令;如果向量缓冲部件某一拍的向量微指令由于自身的原因不能发射,那么这一拍不阻塞发射队列的发射标量指令,则将发射队列中最老的一条具备发射条件的标量指令送入功能部件的流水线,所述发射队列中具备指针a和指针b两套指针(参见图3),指针a记录的是所有准备好了未发射的指令间的新老关系,指针b只记录未发射标量指令间的新老关系,这套逻辑在向量微指令不能发射的时间段里让指令队列可以继续发射指令到功能部件中。
如图3所示,本实施例面向标量和向量指令混合执行的发射装置包括:
指令队列,用于接收标量指令和向量指令并存储;
向量缓冲部件,用于从发射队列中选取一条具备发射条件的待发射指令,判断待发射指令的类型,如果待发射指令为可拆分的向量指令,则将向量指令拆分成向量微指令并存储到单独的向量缓冲部件中;
仲裁部件,用于对发射队列中具备发射条件的标量指令、向量缓冲部件中的向量微指令仲裁发射,并将发射完毕的指令从发射队列或向量缓冲部件中删除。
发射队列和一个向量缓冲部件组成两级发射装置,标量由发射队列发射,可拆分向量由发射队列和向量缓冲部件共同管理发射。标量或向量指令在译码段进行译码后会将译码的信息随流水线进行传递,指令顺序进入发射队列后可以根据译码的信息知道指令的类型,根据指令原操作数是否准备好了判断是否准备发射,乱序发射机制的会选取准备好发射指令中最老的指令进行发射,如果这一拍可以发射的指令是可拆分向量指令,则指令进入向量缓冲部件根据指令信息进行拆分。指令拆分的这一拍,指令发射有两种方式,一般情况下发射的这一拍时序比较紧张,这里进行了拆分操作,同时发射拆分微指令可能时序上满足不了,所以这一拍并不会发射拆分的向量微指令,但可以直接发射准备好了未发射的最老标量指令,下一拍再发射拆分好了的向量微指令;另外一种方式是直接发射刚刚拆分好的微指令,这样做的前提是这一拍时序不紧张,可同时完成拆分、发射动作。向量微指令发射的优先级大于标量指令。拆分的微指令在发射到最后一个微指令时,需要将其它微指令的信息发送到功能部件的流水线中,等到最后一个微指令从功能部件执行完毕时,将整个向量队列清空,同时将这个向量从指令队列中清除,向量缓冲部件可以接受新的拆分向量。
如图4所示,向量缓冲部件包括发射逻辑、微指令队列和指令信息模块三个模块,向量缓冲部件从指令队列接收可拆分向量指令,然后拆分成向量微指令存储在微指令队列,向量微指令接受指令队列中对应向量指令控制信息的控制,例如指令可能受到其它部件的影响导致指令需要重新发射或者作废。向量缓冲部件被占用后也送出向量缓冲部件控制信息给指令队列,一是控制指令队列不再向向量缓冲发射指令,以免指令被覆盖,二是控制向量微指令与标量指令发射的优先级,实现向量微指令发射的优先级比标量高。向量缓冲部件的发射逻辑用于向功能部件发射向量微指令,向量微指令执行后会产生一些微指令信息由缓冲装置中的指令信息模块保存,向量微指令执行到最后一个的时候将前面微指令得到的指令信息在需要的时候发送到功能部件。向量微指令在功能部件中执行过程中会受到功能部件流水线的控制,例如重启等,向量缓冲部件接收功能部件流水线的控制信号,这些信号会影响微指令的发射逻辑。向量缓冲部件发射逻辑可以是乱序发射,也可以是顺序发射。
实施例二:
本实施例与实施例一基本相同,其主要不同点为步骤2.1)中的发射机制不同。本实施例中具体采用顺序发射的机制,顺序发射是按照指令的顺序进行发射,最老指令准备好了才可以发射,具体地:步骤2.1)从发射队列中选取一条具备发射条件的待发射指令时具体是指判断发射队列中最老的指令是否具备发射条件,如果具备发射条件则将最老的指令作为待发射指令。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。