CN104714779B - 指令处理方法及装置 - Google Patents
指令处理方法及装置 Download PDFInfo
- Publication number
- CN104714779B CN104714779B CN201310687451.2A CN201310687451A CN104714779B CN 104714779 B CN104714779 B CN 104714779B CN 201310687451 A CN201310687451 A CN 201310687451A CN 104714779 B CN104714779 B CN 104714779B
- Authority
- CN
- China
- Prior art keywords
- instruction
- jump
- queue
- stream
- instruction queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Advance Control (AREA)
Abstract
本发明实施例提供一种指令处理方法及装置。本发明提供的指令处理方法,包括:填写指令队列,写入所述指令队列的为循环指令流,所述循环指令流为程序指令流中的循环体;将所述指令队列中的循环指令流按照循环顺序发送给终端设备,以使终端设备按照所述循环顺序执行所述指令队列中的循环指令流,所述循环顺序为所述循环指令流中指令循环执行的顺序。本发明实施例提供的指令处理方法,解决了现有技术中采用Loop Cache技术的取指方式,需要为每个硬件线程提供Register File和BAR,导致取指操作的功耗进一步增大的问题,在一定程度上增加了取指操作的带宽,并且降低了取指操作的功耗。
Description
技术领域
本发明实施例涉及通信技术,尤其涉及一种指令处理方法及装置。
背景技术
随着计算机和智能终端设备的普及,多线程处理器广泛应用于各种终端设备中,例如ORACLE公司最新推出的SPARC T5型号的处理器中每个内核包含8个硬件线程。
多线程处理器中的所有硬件线程通常共享一个高速缓冲存储器(Cache),该处理器的每个硬件线程取指时都要访问该Cache,然而,该Cache只有一个读端口,即在同一时刻只能给一个硬件线程分配指令,并且多线程处理器取指时频繁访问Cache和存储器,导致程序运行的过程中取指操作的带宽较小,并且消耗大量功耗。目前的循环高速缓冲存储器(Loop Cache)技术可以识别向后的跳转(Backward Branch),并将跳转后的若干条指令存入寄存器文件(Register File)中,并把跳转后第一条指令的虚拟地址(Virtual Address,简称为:VA)存入基地址寄存器(Base Address Register,简称为:BAR)中;在程序运行时,根据个人计算机(Personal Computer,简称为:PC)与基地址之差产生Index函数值,如果在Loop Cache存储范围内就直接从Loop Cache中取指,即不需要访问Cache。
现有技术中采用Loop Cache技术的取指方式,可以在一定程度上增加取指带宽,但是该技术需要为每个硬件线程提供Register File和BAR,导致取指操作的功耗进一步增大。
发明内容
本发明实施例提供一种指令处理方法及装置,以解决现有技术中采用Loop Cache技术的取指方式,需要为每个硬件线程提供Register File和BAR,导致取指操作的功耗进一步增大的问题。
第一方面,本发明实施例提供一种指令处理方法,包括:
填写指令队列,写入所述指令队列的为循环指令流,所述循环指令流为程序指令流中的循环体;
将所述指令队列中的循环指令流按照循环顺序发送给终端设备,以使终端设备按照所述循环顺序执行所述指令队列中的循环指令流,所述循环顺序为所述循环指令流中指令循环执行的顺序。
在第一方面的第一种可能实现方式中,所述循环指令流包括第一跳转指令和第二跳转指令及其之间的指令流;所述填写指令队列,包括:
根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列之前,还包括:
接收用户输入的程序运行指令;
所述根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写,包括:
根据所述程序运行指令从高速缓冲存储器Cache中取指;
将取出的所述第一跳转指令以及之后取出的指令流写入所述指令队列,将取出的所述第二跳转指令写入所述指令队列并停止取指操作。
根据第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述将取出的所述第一跳转指令以及之后取出的指令写入所述指令队列之前,还包括:
将所述第一跳转指令的跳转地址记录到所述指令队列的头地址寄存器中;
所述将所述指令队列中的循环指令流按照循环顺序发送给终端设备,包括:
将所述指令队列中的循环指令流按照顺序从所述指令队列的起始发送给所述终端设备;
发送所述第二跳转指令时,若所述第二跳转指令的跳转地址与所述指令队列的头地址相等,则重新从所述指令队列的起始发送所述循环指令流。
根据第一方面的第三种可能的实现方式,在第四种可能的实现方式中,还包括:发送所述第二跳转指令时,若所述第二跳转指令的跳转地址与所述指令队列的头地址不等,则删除所述指令队列中的指令流,并且重新填写所述指令队列。
根据第一方面的第一种到第四种可能的实现方式种任意一种,在第五种可能的实现方式中,若所述第一跳转指令与所述第二跳转指之间的指令流数目超过所述指令队列的容量,则所述根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写,还包括:
根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,所述指令队列被填满后从头开始重新填写,所述指令队列的头地址被更新。
根据第一方面、第一方面的第一种到第五种可能的实现方式种任意一种,在第六种可能的实现方式中,所述循环指令流中的指令数目小于8个。
根据第一方面的第一种到第三种可能的实现方式种任意一种,在第七种可能的实现方式中,所述指令队列的数目为至少两个;则所述根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写,包括:
根据所述指令流的顺序从所述第一跳转指令开始填写第一指令队列,写入所述第二跳转指令后停止对所述第一指令队列的填写;
若所述第二跳转指令的跳转地址与所述第一跳转指令的跳转地址不等,则将所述第二跳转指令的跳转地址记录到第二指令队列的头地址寄存器中;
根据所述指令流的顺序从所述第二跳转指令开始填写所述第二指令队列,写入第三跳转指令后停止对所述第二指令队列的填写;
若所述第三跳转指令的跳转地址与所述第一跳转指令的跳转地址相等,则停止对所述指令队列的填写。
根据第一方面的第七种可能的实现方式,在第八种可能的实现方式中,所述将所述指令队列中的循环指令流按照循环顺序发送给终端设备,包括:
将所述第一指令队列和所述第二指令队列中的循环指令流按照循环顺序发送给所述终端设备,以使终端设备按照所述循环顺序执行所述第一指令队列和所述第二指令队列中的循环指令流。
第二方面,本发明实施例提供一种指令处理装置,包括:
填写模块,用于填写指令队列,写入所述指令队列的为循环指令流,所述循环指令流为程序指令流中的循环体;
发送模块,用于将所述填写模块写入所述指令队列中的循环指令流按照循环顺序发送给终端设备,以使终端设备按照所述循环顺序执行所述指令队列中的循环指令流,所述循环顺序为所述循环指令流中指令循环执行的顺序。
在第二方面的第一种可能实现方式中,所述循环指令流包括第一跳转指令和第二跳转指令及其之间的指令流;所述填写模块,具体用于根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写。
根据第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括:接收模块,用于在所述填写模块根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列之前,接收用户输入的程序运行指令;
所述填写模块,包括:
取指单元,用于根据所述接收模块接收的程序运行指令从高速缓冲存储器Cache中取指;
填写单元,用于将取出的所述第一跳转指令以及之后取出的指令流写入所述指令队列,将取出的所述第二跳转指令写入所述指令队列并停止取指操作。
根据第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述填写模块还包括:记录单元,用于在所述填写单元将取出的所述第一跳转指令以及之后取出的指令写入所述指令队列之前,将所述第一跳转指令的跳转地址记录到所述指令队列的头地址寄存器中;
所述发送模块,具体用于将所述指令队列中的循环指令流按照顺序从所述指令队列的起始发送给所述终端设备;在发送所述第二跳转指令时,若所述第二跳转指令的跳转地址与所述指令队列的头地址相等,则重新从所述指令队列的起始发送所述循环指令流;若所述第二跳转指令的跳转地址与所述指令队列的头地址不等,则删除所述指令队列中的指令流,并且重新填写所述指令队列。
根据第二方面的第一种到第三种可能的实现方式种任意一种,在第四种可能的实现方式中,若所述第一跳转指令与所述第二跳转指之间的指令流数目超过所述指令队列的容量,则所述填写模块,还用于根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,所述指令队列被填满后从头开始重新填写,所述指令队列的头地址被更新。
根据第二方面、第二方面的第一种到第四种可能的实现方式种任意一种,在第五种可能的实现方式中,所述循环指令流中的指令数目小于8个。
根据第二方面的第一种到第三种可能的实现方式种任意一种,在第六种可能的实现方式中,所述指令队列的数目为至少两个;则填写模块,具体用于根据所述指令流的顺序从所述第一跳转指令开始填写第一指令队列,写入所述第二跳转指令后停止对所述第一指令队列的填写;若所述第二跳转指令的跳转地址与所述第一跳转指令的跳转地址不等,则将所述第二跳转指令的跳转地址记录到第二指令队列的头地址寄存器中;根据所述指令流的顺序从所述第二跳转指令开始填写所述第二指令队列,写入第三跳转指令后停止对所述第二指令队列的填写;若所述第三跳转指令的跳转地址与所述第一跳转指令的跳转地址相等,则停止对所述指令队列的填写。
根据第二方面的第六种可能的实现方式,在第七种可能的实现方式中,所述发送模块,具体用于将所述第一指令队列和所述第二指令队列中的循环指令流按照循环顺序发送给所述终端设备,以使终端设备按照所述循环顺序执行所述第一指令队列和所述第二指令队列中的循环指令流。
本实施例所提供的指令处理方法及装置,通过在多线程处理器的指令队列中填写循环指令流,并将该指令队列中已写入的循环指令流按其循环顺序发送给终端设备,实现了终端设备在进行一次取指操作后即可循环执行该指令队列中的指令流,使得取指操作次数的大大降低,解决了现有技术中采用Loop Cache技术的取指方式,需要为每个硬件线程提供Register File和BAR,导致取指操作的功耗进一步增大的问题,在一定程度上增加了取指操作的带宽,并且降低了取指操作的功耗。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一所提供的一种指令处理方法的流程图;
图2为本发明实施例二所提供的一种指令处理方法的流程图;
图3为本发明实施例所提供的一种指令处理方法中指令队列的结构示意图;
图4为本发明实施例三所提供的一种指令处理装置的结构示意图;
图5为本发明实施例四所提供的一种指令处理装置的结构示意图;
图6为本发明实施例五所提供的一种终端设备的结构示意图;
图7为本发明实施例六所提供的一种终端设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
图1为本发明实施例一所提供的一种指令处理方法的流程图。本实施例的方法适用于使用多线程处理器运行程序的情况,该方法可由终端设备或指令处理装置执行,该指令处理装置通常以硬件和/或软件的方法来实现,并集成在终端设备中。如图1所示,本实施例的方法可以包括:
S110,填写指令队列,写入该指令队列的为循环指令流,所述循环指令流为程序指令流中的循环体。
终端设备的程序为执行指令语句的序列,该指令通常存放在Cache中,在运行程序时,可以从存放指令的Cache中进行取指操作,目前经常使用的多线程处理器中,多个硬件线程通常共享一个Cache,并且该Cache只有一个读端口,因此,同一时刻只能给一个硬件线程分配指令,使得程序运行中取指操作的带宽较小,进一步地,多线程处理器取指时频繁访问Cache和存储器,增加了终端设备功率功耗;然而,处理器中每个硬件线程的指令队列是独享的,因此,本实施例所提供的方法中,硬件线程在取指后可以将取得的指令流存放到与其对应的指令队列中,通常写入该指令队列的指令流为循环指令流,该循环指令流具体为程序指令流中的循环体,使得指令队列中的指令流可以循环执行,即在硬件线程对该循环指令流进行一次取指操作,并将该循环指令流写入该指令队列后,不需要再次取指即可以按其循环方式执行,与现有技术中对执行的指令均需要从Cache中取指相比,减少了取指操作的次数,相应地增加了取指操作的带宽。
S120,将该指令队列中的循环指令流按照循环顺序发送给终端设备,以使终端设备按照该循环顺序执行该指令队列中的循环指令流,该循环顺序为该循环指令流中指令循环执行的顺序。
目前为了增加取指操作的带宽,通常使用Loop Cache技术的取指方式,但是该方式需要为每个硬件线程提供Register File和BAR,导致取指操作的功耗增大;在本实施例中,指令队列中以存放循环指令流,该指令队列可以将该指令流以其循环的方式发送给终端设备,具体可以发送给终端设备的译码执行模块,使得该终端设备对该循环指令流进行解码并按其循环顺序执行,通常地,指令流的循环顺序为该循环指令流中指令循环执行的顺序,即该循环指令流中的指令语句数目是一定的,但是,该些指令语句可以循环执行,并且具有一定的循环方式;因此,本实施例提供的方法进一步降低了取指操作的功耗。
本实施例在具体实现中,该循环指令流通常为两条跳转指令及其之间的指令流,即指令队列中的第一条指令为第一跳转指令,最后一条指令为第二跳转指令,相应地,S110具体为:根据该指令流的顺序从该第一跳转指令开始填写所述指令队列,写入该第二跳转指令后停止对指令队列的填写;通常地,两条跳转指令之间的指令流为循环指令流的概率相对较大,本实施例的方法通过将两条跳转指令之间的指令流作为循环指令流进行取指并执行,若该两条跳转指令之间的指令流为循环指令流时,终端设备则按其循环顺序循环执行该指令流,若该两条跳转指令之间的指令流不是循环指令流,当终端设备执行到第二跳转指令时则跳转该指令队列进行其他指令的取指操作。
本实施例所提供的指令处理方法,通过在多线程处理器的指令队列中填写循环指令流,并将该指令队列中已写入的循环指令流按其循环顺序发送给终端设备,实现了终端设备在进行一次取指操作后即可循环执行该指令队列中的指令流,使得取指操作次数的大大降低,解决了现有技术中采用Loop Cache技术的取指方式,需要为每个硬件线程提供Register File和BAR,导致取指操作的功耗进一步增大的问题,在一定程度上增加了取指操作的带宽,并且降低了取指操作的功耗。
实施例二
图2为本发明实施例二所提供的一种指令处理方法的流程图。如图2所示,本实施例的方法可以包括:
S200,接收用户输入的程序运行指令。
终端设备对程序中指令的操作,通常是根据用户发出对该程序的执行指令,启动该程序的运行。
S210,根据该程序运行指令从Cache中取指。
终端设备在启动程序后,可以执行该程序中的指令流,因此,硬件线程从存储指令的Cache中取出指令,本实施例中的从Cache中取指的操作与现有技术中硬件线程的取指操作类似,现有技术中直接执行取出的指令,执行每个动作都需要取出相应的指令,本实施例中对Cache中取出的循环指令流的处理与现有技术不同,以达到对循环指令流仅取指一次的效果。
S220,将第一跳转指令的跳转地址记录到指令队列的头地址寄存器中。
在本实施例的取指操作中,若判断出取出的指令为第一跳转指令,则将该第一跳转指令的跳转地址记录到该硬件线程对应的指令队列的头地址寄存器中。
S230,将取出的该第一跳转指令以及之后取出的指令流写入该指令队列,将取出的该第二跳转指令写入该指令队列并停止取指操作。
在本实施例中,将两条跳转指令之间的指令流作为循环指令流写入指令队列中,具体地,将已记录跳转地址的第一跳转指令以及在该指令后取出的指令流写入指令队列中,直到取出第二跳转地址,在写入该第二跳转地址后,即认为该两条跳转指令之间的指令流为一个循环指令流,则停止取指操作和对该指令队列的填写操作。
S240,将该指令队列中的循环指令流按照顺序从该指令队列的起始发送给终端设备。
在本实施例中,指令队列中已写入一个起始和结尾都为跳转指令的指令流,向终端设备发送从起始开始发送该指令流,使得终端设备可以根据接收的指令流按照顺执行。
S250,发送该第二跳转指令时,判断该第二跳转指令的跳转地址与该指令队列的头地址是否相等;若是,则执行S260,若否,则执行S270。
S260,重新从该指令队列的起始发送该循环指令流。
S270,删除该指令队列中的指令流,并且重新填写该指令队列。
通常地,跳转指令的跳转地址会将程序的待执行顺序跳转到下一跳指令中,在本实施例中以两条跳转指令及其之间的指令流作为写入指令队列中的循环指令流,当第二跳转指令的跳转地址指向该指令队列的头地址时,该指令队列中的指令流即为循环指令流;因此,本实施例提供的方法可以判定第二跳转指令的跳转地址与该指令队列的头地址是否相等,如果相等则可知该指令队列中的指令流为循环指令流,进而重新从该指令队列的起始发送该循环指令流,即实现了循环指令流只需进行一次取指,写入指令队列后即可重复使用;如果不相等则可知该指令队列中的指令流不是循环指令流,则可以删除写入该指令队列的指令流,重新从Cache中取指,并且在执行到下一条跳转指令时重新开始填写指令队列,并重复上述发送并执行指令的操作。
需要说明的是,两条跳转指令及其之间的指令数目通常小于8个,因此本实施所提供指令队列的容量可以写入8条指令;在具体实现中,该指令队列的第一条指令为第一跳转指令的跳转地址所指向的指令,该指令队列中存放的最后一条指令是第二条跳指令,当该两条跳转指令及其之间的指令没有填满该指令队列时,不再从Cache中取指。
本实施例所提供的指令处理方法,通过在多线程处理器的指令队列中填写循环指令流,并将该指令队列中已写入的循环指令流按其循环顺序发送给终端设备,实现了终端设备在进行一次取指操作后即可循环执行该指令队列中的指令流,使得取指操作次数的大大降低,解决了现有技术中采用Loop Cache技术的取指方式,需要为每个硬件线程提供Register File和BAR,导致取指操作的功耗进一步增大的问题,在一定程度上增加了取指操作的带宽,并且降低了取指操作的功耗。另外,本实施例提供的方法,在指令队列的头地址中记录了第一跳转指令的跳转地址,在发送并执行该指令队列中的指令流时,通过判断第二跳转指令的跳转地址与该指令队列的头地址相同以确定该指令流为循环指令流,并按其循环顺序重复发送并执行。
可选地,当第一跳转指令与第二跳转指令及其之间的指令流数目超过该指令队列的容量时,填写指令队列的具体方式为:根据该指令流的顺序从该第一跳转指令开始填写该指令队列,该指令队列被填满后从头开始重新填写,该指令队列的头地址被更新;在本实施例中,在通过判断第二跳转指令的跳转地址与该指令队列的头地址以实现循环执行该指令流时,用于判断的比较值,即指令队列的头地址以被更新,因此,会使得判断结果不准确。
进一步地,针对上述第一跳转指令与第二跳转指及其之间的指令流数目超过该指令队列的容量时,造成判断循环指令流结果不准的问题,本实施例提供的方法通常在多线程处理器中使用,每个硬件线程都有独立的指令队列,因此有可能存在一些空闲的指令独立,进而一个硬件线程在填写其指令队列时,如果遇到较长的循环指令流可以借用临近空闲硬件线程的指令队列来填写指令循环指令流。图3为本发明实施例所提供的一种指令处理方法中指令队列的结构示意图,如图3所示,本实施例中指令队列的数目可以为两个;则填写指令队列的具体方式为:根据指令流的顺序从第一跳转指令开始填写第一指令队列,写入第二跳转指令后停止对该第一指令队列的填写;若该第二跳转指令的跳转地址与第一跳转指令的跳转地址不等,则将该第二跳转指令的跳转地址记录到第二指令队列的头地址寄存器中;继续根据指令流的顺序从该第二跳转指令开始填写该第二指令队列,写入第三跳转指令后停止对该第二指令队列的填写;若该第三跳转指令的跳转地址与该第一跳转指令的跳转地址相等,则停止对该指令队列的填写;相应地,发送并执行该两个指令队列中的指令流的具体方法为:将该第一指令队列和该第二指令队列中的循环指令流按照循环顺序发送给该终端设备,以使终端设备按照该循环顺序执行该第一指令队列和该第二指令队列中的循环指令流。
在本实施例中,第一跳转指令和第三跳转指令及其之间的指令流为一循环指令流,具体将一个硬件线程的指令流写入到了两个指令队列中,在循环指令流的指令语句过多的时候也能准确的对该循环指令流进行取指以及按其循环顺序重复执行的操作,扩展了上述实施例的使用范围,进一步地增加了取指操作的带宽,并且降低了取指操作的功耗。
实施例三
图4为本发明实施例三所提供的一种指令处理装置的结构示意图。如图4所示,本实施例提供的指令处理装置,具体包括:填写模块11和发送模块12。
其中,填写模块11,用于填写指令队列,写入该指令队列的为循环指令流,该循环指令流为程序指令流中的循环体。
发送模块12,用于将该填写模块11写入该指令队列中的循环指令流按照循环顺序发送给终端设备,以使终端设备按照该循环顺序执行该指令队列中的循环指令流,该循环顺序为该循环指令流中指令循环执行的顺序。
本实施例在具体实现时,该循环指令流可以包括第一跳转指令和第二跳转指令及其之间的指令流;相应地,该填写模块11,具体用于根据指令流的顺序从该第一跳转指令开始填写该指令队列,写入该第二跳转指令后停止对该指令队列的填写。
本发明实施例提供的指令处理装置用于执行本发明实施例一提供的指令处理方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
实施例四
图5为本发明实施例四所提供的一种指令处理装置的结构示意图。如图5所示,本实施例提供的指令处理装置在图4所示装置结构的基础上,还包括:接收模块13,用于在该填写模块11根据该指令流的顺序从该第一跳转指令开始填写该指令队列之前,接收用户输入的程序运行指令。
相应地,该填写模块11包括:取指单元14,用于根据该接收模块13接收的程序运行指令从高速缓冲存储器Cache中取指;填写单元15,用于将取出的该第一跳转指令以及之后取出的指令流写入该指令队列,将取出的该第二跳转指令写入该指令队列并停止取指操作。
进一步地,本实施例提供的指令处理装置中,填写模块11还包括记录单元16,用于在该填写单元15将取出的该第一跳转指令以及之后取出的指令写入该指令队列之前,将该第一跳转指令的跳转地址记录到该指令队列的头地址寄存器中;相应地,该发送模块12,具体用于将该指令队列中的循环指令流按照顺序从该指令队列的起始发送给该终端设备;在发送该第二跳转指令时,若该第二跳转指令的跳转地址与该指令队列的头地址相等,则重新从该指令队列的起始发送该循环指令流;若该第二跳转指令的跳转地址与该指令队列的头地址不等,则删除该指令队列中的指令流,并且重新填写该指令队列。
需要说明的是,两条跳转指令及其之间的指令数目通常小于8个,因此本实施所提供指令队列的容量可以写入8条指令;在具体实现中,该指令队列的第一条指令为第一跳转指令的跳转地址所指向的指令,该指令队列中存放的最后一条指令是第二条跳指令,当该两条跳转指令及其之间的指令没有填满该指令队列时,不再从Cache中取指。
本发明实施例提供的指令处理装置用于执行本发明实施例二提供的指令处理方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
可选地,在本实施例中,若该第一跳转指令与该第二跳转指之间的指令流数目超过该指令队列的容量,则该填写模块11,还用于根据该指令流的顺序从该第一跳转指令开始填写该指令队列,该指令队列被填满后从头开始重新填写,该指令队列的头地址被更新;因此,在本实施例中,在通过判断第二跳转指令的跳转地址与该指令队列的头地址以实现循环执行该指令流时,用于判断的比较值,即指令队列的头地址以被更新,进而会使得判断结果不准确。
进一步地,在多线程处理器中,每个硬件线程都有独立的指令队列,因此有可能存在一些空闲的指令独立,进而一个硬件线程在填写其指令队列时,如果遇到较长的循环指令流可以借用临近空闲硬件线程的指令队列来填写指令循环指令流;本实施例提供的指令处理装置中指令队列的数目可以为两个;则填写模块11,具体用于根据该指令流的顺序从该第一跳转指令开始填写第一指令队列,写入该第二跳转指令后停止对该第一指令队列的填写;若该第二跳转指令的跳转地址与该第一跳转指令的跳转地址不等,则将该第二跳转指令的跳转地址记录到第二指令队列的头地址寄存器中;根据该指令流的顺序从该第二跳转指令开始填写该第二指令队列,写入第三跳转指令后停止对该第二指令队列的填写;若该第三跳转指令的跳转地址与该第一跳转指令的跳转地址相等,则停止对该指令队列的填写。
相应地,本实施例中的发送模块12,具体用于将该第一指令队列和该第二指令队列中的循环指令流按照循环顺序发送给该终端设备,以使终端设备按照该循环顺序执行该第一指令队列和该第二指令队列中的循环指令流。
实施例五
图6为本发明实施例五所提供的一种终端设备的结构示意图。如图6所示,本实施例提供的终端设备,具体包括:处理器21和发送器22。
其中,处理器21,用于填写指令队列,写入该指令队列的为循环指令流,该循环指令流为程序指令流中的循环体。
发送器22,用于将该处理器21写入该指令队列中的循环指令流按照循环顺序发送给终端设备,以使终端设备按照该循环顺序执行该指令队列中的循环指令流,该循环顺序为该循环指令流中指令循环执行的顺序。
本实施例在具体实现时,该循环指令流可以包括第一跳转指令和第二跳转指令及其之间的指令流;相应地,该处理器21,具体用于根据指令流的顺序从该第一跳转指令开始填写该指令队列,写入该第二跳转指令后停止对该指令队列的填写。
本发明实施例提供的终端设备用于执行本发明实施例一提供的指令处理方法,具备相应的实体装置,其实现原理和技术效果类似,此处不再赘述。
实施例六
图7为本发明实施例六所提供的一种终端设备的结构示意图。如图7所示,本实施例提供的终端设备在图6所示设备结构的基础上,还包括:接收器23,用于在该处理器21根据该指令流的顺序从该第一跳转指令开始填写该指令队列之前,接收用户输入的程序运行指令。
相应地,该处理器21具体用于根据该接收器23接收的程序运行指令从高速缓冲存储器Cache中取指;并将取出的该第一跳转指令以及之后取出的指令流写入该指令队列,将取出的该第二跳转指令写入该指令队列并停止取指操作。
进一步地,本实施例提供的终端设备中,处理器21还用于在将取出的该第一跳转指令以及之后取出的指令写入该指令队列之前,将该第一跳转指令的跳转地址记录到该指令队列的头地址寄存器中;相应地,该发送器22具体用于将该指令队列中的循环指令流按照顺序从该指令队列的起始发送给该终端设备;在发送该第二跳转指令时,若该第二跳转指令的跳转地址与该指令队列的头地址相等,则重新从该指令队列的起始发送该循环指令流;若该第二跳转指令的跳转地址与该指令队列的头地址不等,则删除该指令队列中的指令流,并且重新填写该指令队列。
需要说明的是,两条跳转指令及其之间的指令数目通常小于8个,因此本实施所提供指令队列的容量可以写入8条指令;在具体实现中,该指令队列的第一条指令为第一跳转指令的跳转地址所指向的指令,该指令队列中存放的最后一条指令是第二条跳指令,当该两条跳转指令及其之间的指令没有填满该指令队列时,不再从Cache中取指。
本发明实施例提供的终端设备用于执行本发明实施例二提供的指令处理方法,具备相应的实体装置,其实现原理和技术效果类似,此处不再赘述。
可选地,在本实施例中,若该第一跳转指令与该第二跳转指及其之间的指令流数目超过该指令队列的容量,则该处理器21,还用于根据该指令流的顺序从该第一跳转指令开始填写该指令队列,该指令队列被填满后从头开始重新填写,该指令队列的头地址被更新;因此,在本实施例中,在通过判断第二跳转指令的跳转地址与该指令队列的头地址以实现循环执行该指令流时,用于判断的比较值,即指令队列的头地址以被更新,进而会使得判断结果不准确。
进一步地,在多线程处理器中,每个硬件线程都有独立的指令队列,因此有可能存在一些空闲的指令独立,进而一个硬件线程在填写其指令队列时,如果遇到较长的循环指令流可以借用临近空闲硬件线程的指令队列来填写指令循环指令流;本实施例提供的终端设备中指令队列的数目可以为两个;则处理器21,具体用于根据该指令流的顺序从该第一跳转指令开始填写第一指令队列,写入该第二跳转指令后停止对该第一指令队列的填写;若该第二跳转指令的跳转地址与该第一跳转指令的跳转地址不等,则将该第二跳转指令的跳转地址记录到第二指令队列的头地址寄存器中;根据该指令流的顺序从该第二跳转指令开始填写该第二指令队列,写入第三跳转指令后停止对该第二指令队列的填写;若该第三跳转指令的跳转地址与该第一跳转指令的跳转地址相等,则停止对该指令队列的填写。
相应地,本实施例中的发送器22,具体用于将该第一指令队列和该第二指令队列中的循环指令流按照循环顺序发送给该终端设备,以使终端设备按照该循环顺序执行该第一指令队列和该第二指令队列中的循环指令流。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (15)
1.一种指令处理方法,其特征在于,包括:
填写指令队列,写入所述指令队列的为循环指令流,所述循环指令流为程序指令流中的循环体;
将所述指令队列中的循环指令流按照循环顺序发送给终端设备,以使终端设备按照所述循环顺序执行所述指令队列中的循环指令流,所述循环顺序为所述循环指令流中指令循环执行的顺序;
所述循环指令流包括第一跳转指令和第二跳转指令及其之间的指令流;所述填写指令队列,包括:
根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写。
2.根据权利要求1所述的方法,其特征在于,所述根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列之前,还包括:
接收用户输入的程序运行指令;
所述根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写,包括:
根据所述程序运行指令从高速缓冲存储器Cache中取指;
将取出的所述第一跳转指令以及之后取出的指令流写入所述指令队列,将取出的所述第二跳转指令写入所述指令队列并停止取指操作。
3.根据权利要求2所述的方法,其特征在于,所述将取出的所述第一跳转指令以及之后取出的指令写入所述指令队列之前,还包括:
将所述第一跳转指令的跳转地址记录到所述指令队列的头地址寄存器中;
所述将所述指令队列中的循环指令流按照循环顺序发送给终端设备,包括:
将所述指令队列中的循环指令流按照顺序从所述指令队列的起始发送给所述终端设备;
发送所述第二跳转指令时,若所述第二跳转指令的跳转地址与所述指令队列的头地址相等,则重新从所述指令队列的起始发送所述循环指令流。
4.根据权利要求3所述的方法,其特征在于,还包括:发送所述第二跳转指令时,若所述第二跳转指令的跳转地址与所述指令队列的头地址不等,则删除所述指令队列中的指令流,并且重新填写所述指令队列。
5.根据权利要求1~4中任一所述的方法,其特征在于,若所述第一跳转指令与所述第二跳转指令之间的指令流数目超过所述指令队列的容量,则所述根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写,还包括:
根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,所述指令队列被填满后从头开始重新填写,所述指令队列的头地址被更新。
6.根据权利要求1~4中任一所述的方法,其特征在于,所述循环指令流中的指令数目小于8个。
7.根据权利要求1~4中任一所述的方法,其特征在于,所述指令队列的数目为至少两个;则所述根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写,包括:
根据所述指令流的顺序从所述第一跳转指令开始填写第一指令队列,写入所述第二跳转指令后停止对所述第一指令队列的填写;
若所述第二跳转指令的跳转地址与所述第一跳转指令的跳转地址不等,则将所述第二跳转指令的跳转地址记录到第二指令队列的头地址寄存器中;
根据所述指令流的顺序从所述第二跳转指令开始填写所述第二指令队列,写入第三跳转指令后停止对所述第二指令队列的填写;
若所述第三跳转指令的跳转地址与所述第一跳转指令的跳转地址相等,则停止对所述指令队列的填写。
8.根据权利要求7所述的方法,其特征在于,所述将所述指令队列中的循环指令流按照循环顺序发送给终端设备,包括:
将所述第一指令队列和所述第二指令队列中的循环指令流按照循环顺序发送给所述终端设备,以使终端设备按照所述循环顺序执行所述第一指令队列和所述第二指令队列中的循环指令流。
9.一种指令处理装置,其特征在于,包括:
填写模块,用于填写指令队列,写入所述指令队列的为循环指令流,所述循环指令流为程序指令流中的循环体;
发送模块,用于将所述填写模块写入所述指令队列中的循环指令流按照循环顺序发送给终端设备,以使终端设备按照所述循环顺序执行所述指令队列中的循环指令流,所述循环顺序为所述循环指令流中指令循环执行的顺序;
所述循环指令流包括第一跳转指令和第二跳转指令及其之间的指令流;所述填写模块,具体用于根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,写入所述第二跳转指令后停止对所述指令队列的填写。
10.根据权利要求9所述的装置,其特征在于,还包括:接收模块,用于在所述填写模块根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列之前,接收用户输入的程序运行指令;
所述填写模块,包括:
取指单元,用于根据所述接收模块接收的程序运行指令从高速缓冲存储器Cache中取指;
填写单元,用于将取出的所述第一跳转指令以及之后取出的指令流写入所述指令队列,将取出的所述第二跳转指令写入所述指令队列并停止取指操作。
11.根据权利要求10所述的装置,其特征在于,所述填写模块还包括:记录单元,用于在所述填写单元将取出的所述第一跳转指令以及之后取出的指令写入所述指令队列之前,将所述第一跳转指令的跳转地址记录到所述指令队列的头地址寄存器中;
所述发送模块,具体用于将所述指令队列中的循环指令流按照顺序从所述指令队列的起始发送给所述终端设备;在发送所述第二跳转指令时,若所述第二跳转指令的跳转地址与所述指令队列的头地址相等,则重新从所述指令队列的起始发送所述循环指令流;若所述第二跳转指令的跳转地址与所述指令队列的头地址不等,则删除所述指令队列中的指令流,并且重新填写所述指令队列。
12.根据权利要求9~11中任一所述的装置,其特征在于,若所述第一跳转指令与所述第二跳转指令之间的指令流数目超过所述指令队列的容量,则所述填写模块,还用于根据所述指令流的顺序从所述第一跳转指令开始填写所述指令队列,所述指令队列被填满后从头开始重新填写,所述指令队列的头地址被更新。
13.根据权利要求9~11中任一所述的装置,其特征在于,所述循环指令流中的指令数目小于8个。
14.根据权利要求9~11中任一所述的装置,其特征在于,所述指令队列的数目为至少两个;则所述填写模块,具体用于根据所述指令流的顺序从所述第一跳转指令开始填写第一指令队列,写入所述第二跳转指令后停止对所述第一指令队列的填写;若所述第二跳转指令的跳转地址与所述第一跳转指令的跳转地址不等,则将所述第二跳转指令的跳转地址记录到第二指令队列的头地址寄存器中;根据所述指令流的顺序从所述第二跳转指令开始填写所述第二指令队列,写入第三跳转指令后停止对所述第二指令队列的填写;若所述第三跳转指令的跳转地址与所述第一跳转指令的跳转地址相等,则停止对所述指令队列的填写。
15.根据权利要求14所述的装置,其特征在于,所述发送模块,具体用于将所述第一指令队列和所述第二指令队列中的循环指令流按照循环顺序发送给所述终端设备,以使终端设备按照所述循环顺序执行所述第一指令队列和所述第二指令队列中的循环指令流。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310687451.2A CN104714779B (zh) | 2013-12-12 | 2013-12-12 | 指令处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310687451.2A CN104714779B (zh) | 2013-12-12 | 2013-12-12 | 指令处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104714779A CN104714779A (zh) | 2015-06-17 |
CN104714779B true CN104714779B (zh) | 2017-10-27 |
Family
ID=53414158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310687451.2A Active CN104714779B (zh) | 2013-12-12 | 2013-12-12 | 指令处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104714779B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109032665B (zh) * | 2017-06-09 | 2021-01-26 | 龙芯中科技术股份有限公司 | 微处理器中指令输出处理方法及装置 |
CN112698715B (zh) * | 2020-12-17 | 2023-07-04 | 北京科银京成技术有限公司 | 一种执行控制方法、装置、嵌入式系统、设备及介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968293A (zh) * | 2012-11-28 | 2013-03-13 | 中国人民解放军国防科学技术大学 | 基于指令队列的程序循环代码动态检测及执行方法 |
-
2013
- 2013-12-12 CN CN201310687451.2A patent/CN104714779B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968293A (zh) * | 2012-11-28 | 2013-03-13 | 中国人民解放军国防科学技术大学 | 基于指令队列的程序循环代码动态检测及执行方法 |
Non-Patent Citations (2)
Title |
---|
Reducing Design Complexity of the Load/Store Queue;Il Park, et.al.;《Proceedings of the 36th annual IEEE/ACM International Symposium on Microarchitecture》;20031205;正文第412页Increasing the load/store queue capacity * |
基于循环指令检测的低功耗设计;艾飞虎等;《第十六届计算机工程与工艺年会受第二届微处理器技术论坛论文集》;20120817;正文第204页1 引言、第206-207页3 指令缓冲队列的改进设计与实现 * |
Also Published As
Publication number | Publication date |
---|---|
CN104714779A (zh) | 2015-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102141905B (zh) | 一种处理器体系结构 | |
CN104750460B (zh) | 超线程微处理器中经线程优先级提供服务质量 | |
CN108496161A (zh) | 数据缓存装置及控制方法、数据处理芯片、数据处理系统 | |
CN106648461A (zh) | 一种内存管理装置和方法 | |
US7225446B2 (en) | Context preservation | |
CN108549574A (zh) | 线程调度管理方法、装置、计算机设备和存储介质 | |
CN103049396A (zh) | 数据的刷写方法及装置 | |
CN106462392B (zh) | 用于高速缓冲存储器存取模式选择的方法和设备 | |
CN102650946A (zh) | 在手持终端加载显示图形界面的方法 | |
CN106201670B (zh) | 一种基于Labview的CAN总线数据处理方法 | |
CN110362348A (zh) | 一种队列存取数据的方法、装置及电子设备 | |
CN104714779B (zh) | 指令处理方法及装置 | |
CN105389134B (zh) | 一种闪存接口控制方法及装置 | |
CN105242904B (zh) | 用于处理器指令缓冲与循环缓冲的装置及其操作方法 | |
CN115562838A (zh) | 资源调度方法、装置、计算机设备及存储介质 | |
US9804903B2 (en) | Data processing apparatus for pipeline execution acceleration and method thereof | |
CN104536780A (zh) | 一种电子游戏资源高效加载方法及系统 | |
CN101504567A (zh) | 一种cpu、cpu指令系统及降低cpu功耗的方法 | |
CN103257892B (zh) | 一种基于宏组合的多任务调度方法及系统 | |
CN105404591B (zh) | 处理器系统及其存储器控制方法 | |
CN108958903A (zh) | 嵌入式多核中央处理器任务调度方法与装置 | |
CN106407020A (zh) | 一种移动终端的数据库处理方法及其移动终端 | |
CN109491925A (zh) | 存储设备及其数据写入方法、存储装置 | |
CN102521042A (zh) | 基于哈佛结构dsp的快速正文切换方法 | |
CN109144844A (zh) | 追踪方法、装置、设备和机器可读介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |