CN103377033B - 运算核心及其指令管理方法 - Google Patents
运算核心及其指令管理方法 Download PDFInfo
- Publication number
- CN103377033B CN103377033B CN201210107215.4A CN201210107215A CN103377033B CN 103377033 B CN103377033 B CN 103377033B CN 201210107215 A CN201210107215 A CN 201210107215A CN 103377033 B CN103377033 B CN 103377033B
- Authority
- CN
- China
- Prior art keywords
- instruction
- response
- arithmetic core
- arithmetic
- block
- 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
- Multi Processors (AREA)
- Executing Machine-Instructions (AREA)
Abstract
一种运算核心及其指令管理方法,所述运算核心的指令管理方法包括:接收并储存指令块的指令,所述指令块为预送的;运行所述存储的指令块的指令。本发明的技术方案有效的减少了运算核心的指令脱靶和等待延迟,提高了运算核心的计算效率。
Description
技术领域
本发明涉及指令管理技术领域,尤其是一种运算核心的指令管理方法和运算核心。
背景技术
在通用处理器中,通常采用分级的指令存储结构,也就是,指令存储在不同级别的存储介质中。运算核心(处理器的组成器件,每个运算核心可以看成是一个小的处理器)在执行时从本地存储器中获得指令,由于运算核心本地的存储器容量有限,容易产生取指失败的情况,也就是说,若运算核心中未存储将要执行的指令,运算核心需要从上一级指令存储器获得指令后才能继续执行,取指失败也称为指令脱靶。在采用分级的指令存储结构情况下,从上一级指令存储器中获得指令会耗费大量的时间,若频繁的发生取指失败,会增加指令传输的耗时,降低运算核心的工作效率。
多核、众核处理器中,单硅片上集成多个运算核心。由于运算核心数量多,每个运算核心内的指令存储器容量小,对共享的上一级指令存储器的取指竞争冲突会增多,运算核心间的取指竞争问题逐渐凸显出来。尤其当单硅片上的运算核心数增加到几十、几百个时,传统的取指处理方式使运算核心取指延迟的情况明显增加。同时,取指竞争还会导致通信网络拥塞,这会成为制约运算核心的性能和适应面的瓶颈。
目前处理器中比较常用的指令处理技术包括SIMD(SingleInstructionMultipleData,单指令多数据流)技术和SPMD(SingleProgrameMultipleData,单程序多数据流)技术。
多核处理器中采用的SIMD、SPMD等技术统一指令需求,这在一定程度上能够降低指令需求。
在多核处理器中采用SIMD技术,主要是指多个运算核心(或运算核心内的多条流水线)共享同一个指令发射站台,同步执行相同的指令,但运算核心处理的数据各不相同。
在多核处理器中采用SPMD技术,主要是指每个运算核心执行相同的程序代码,每个运算核心执行的程序相同,但处理的数据各不相同。
SIMD技术的优势是要求每个运算核心共享指令发射单元,每条指令都同步执行,这防止了取指竞争,能够减轻多核心聚集的取指操作对通信网络的拥塞。
SPMD技术的优势是放宽了对运算核心间的同步要求,将各运算核心间的同步粒度提高到独立的程序级,在程序范围内各运算核心能够自主执行。
以上这些技术从减少取指操作源头、减少程序代码种类的角度,都能在一定程度上降低取指冲突和减小取指延迟。
但是SIMD技术要求每个运算核心的每条指令都要同步执行,运算核心的资源通常难以得到充分利用,无法发挥所有运算核心的计算能力,限制了该技术的适用范围。
多核、众核处理器中,随着运算核心数量增长,运算核心内的存储器容量小,如果SPMD程序量大于运算核心内的存储器容量,取指脱靶还是会导致频繁的取指操作,引起取指操作冲突加剧,通信网络拥塞严重,运算核心的取指等待时间较长,对发挥运算核心的计算效率有较大影响。因此,在多核、众核处理器中,运算核心内的存储器容量限制了SPMD技术的适用范围。
公开号为CN1466716A的中国专利中的方法只可以为一个处理器提供指令预取服务,不适于多核、众核处理器的处理器结构。另一方面,该专利中用于预取指令的方法,对每个计算核心需要额外的辅助处理器,用于执行程序的简化版本,硬件开销较大。
如何有效减少运算核心的指令脱靶和等待延迟,提高运算核心的计算效率成为目前亟待解决的问题之一。
发明内容
本发明解决的问题是如何有效减少运算核心的指令脱靶和等待延迟,提高运算核心的计算效率。
为解决上述问题,本发明提供了一种运算核心的指令管理方法,包括:
接收并储存指令块的指令,所述指令块为预送的;
运行所述存储的指令块的指令。
为解决上述问题,本发明还提供了一种运算核心,包括:
指令存储单元,用以接收并储存指令块的指令,所述指令块为预送的;
运算单元,用以运行所述指令存储单元储存的指令。
与现有技术相比,本发明具有以下优点:
采用软硬件相结合的方法,软件根据程序的执行轨迹,将指令代码划分为一系列指令块序列,软件保证每个运算核心指令的指令块轨迹一致。硬件按照软件划分出来的指令块序列信息,将运算核心所需指令送入运算核心的指令存储器中。由于程序指令轨迹提前可知,可以在运算核心真正执行指令之前,将指令主动提前载入运算核心的存储器中。
将程序切分为小的指令块,将指令块中的指令预送至运算核心,运算核心可在执行前获得指令。这使得指令的预送与计算核心执行相对独立,各运算核心可以在不影响正在执行的指令同时接受其他预送的指令,降低运算核心取指等待的时间,提高运算核心的运算效率。
各运算核心不再主动发出取指请求,能够消除运算核心取指竞争,还能够减少对通信网络的占用,有利于进一步提高运算核心的运算效率。
指令组织成容量可变的指令块,每个运算核心执行的指令超块轨迹相同,但允许每个运算核心在指令块内的执行轨迹各不相同。也就是说,各运算核心的执行速度不同,基于各运算核心对所述预送查询请求做出的响应发送该指令块中的指令,可以平衡各运算核心之间的执行速度的差异。这使得各运算核心执行速度差异在可控范围内,但是未强制各运算核心同步执行指令。这种以预送指令为手段的控制方式是一种松散的同步机制,即通过发送预送查询请求,基于运算核心的响应控制指令的预先发送的节奏,平衡执行速度快的运算核心与执行速度慢的运算核心之间的速度差异。也就是说,使执行最快的运算核心不会超过执行最慢的核心太多,若执行快的运算核心将要执行的指令会覆盖执行慢的运算核心的正在执行的指令块时,执行慢的运算核心发出指令冲突响应,暂停向所有运算核心发送指令的工作。本发明的技术方案允许各运算核心的速度存在一定差异,指令预送过程中对运算核心的干扰少,因此适用的范围更广。
以多播、广播的指令预送方式,对多核、众核结构尤其适用,能够减少运算核心间的取指竞争,以及减少指令传输对通信网络的拥塞时间,提高片上通信网络利用效率。
本发明的技术方案是一种基于松散同步的指令预送机制,解决了单核、多核、众核处理器中计算核心取指延迟长的问题和多核、众核处理器中的取指竞争问题,提高了处理器的运算效率。
附图说明
图1是本发明实施例提供的运算核心的指令管理方法的流程图;
图2是本发明实施例提供的运算核心;
图3是本发明实施例提供的指令存储器与运算核心存储指令块的存储地址映射关系的示意图;
图4是本发明实施例提供的运算核心接收的预送的指令在指令存储单元中存储的一示意图;
图5是本发明实施例提供的运算核心接收的预送的指令在指令存储单元中存储的另一示意图;
图6是本发明实施例提供的程序和指令块的示意图;
图7是本发明实施例提供的指令块中的指令的示意图;
图8是本发明实施例提供的指令管理系统。
具体实施方式
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式的限制。
图1是本发明实施例提供的运算核心的指令管理方法的流程图,下面结合图1详细说明。
所述运算核心的指令管理方法包括:
步骤S1,接收并储存指令块的指令,所述指令块为预送的;
步骤S2,运行所述存储的指令块的指令。
所述运算核心的指令管理方法还包括:
在执行步骤S1前,执行步骤S0,获取预送查询请求,所述预送查询请求包含预送的指令的信息及所述预送的指令所属的指令块的信息;设置指令信息表,所述指令信息表包括正在执行的预送的指令的信息,已经存储的还未执行的预送的指令的信息。
所述步骤S1中,接收所述指令块的指令包括:基于所述指令信息表和所述预送查询请求,对所述预送查询请求做出响应,基于所述响应接收预送的指令,并更新所述指令信息表;所述储存指令块的指令包括:以指令块的形式存储所述指令,并执行所述指令。
具体实施中,所述步骤S0中,运算核心在接收指令块的过程中可以发出停止响应,并在发出所述停止响应后,停止接收预送的指令块。所述运算核心在发出停止响应后,可以再次发送重新接收响应,并在发出所述重新接收响应后,重新接收预送的指令块。
运算核心内部出现异常时,发出停止响应,停止接收预送的指令块,例如,运算核心的存储空间已满,不能存储新的指令块时;预送的指令块与运算核心当前正在执行的指令块冲突时等。运算核心内部出现异常时,发出停止响应,若异常排除,运算核心还可以再次发送重新接收响应,重新接收预送的指令块,例如,删除已执行过的指令块,运算核心的存储空间可以继续接收新的指令块时;当前存储的指令块可以被后续预送的指令块覆盖时。
所述步骤S0中,在向运算核心发送指令块之前,将程序按照执行顺序划分成指令块,划分完成之后,得到指令块的执行顺序,也称为指令块执行轨迹。按照指令块的执行轨迹,向所有的运算核心(所述运算核心可以为一个也可以为多个)发送指令块。在发送指令块前,将所述指令块划分成若干指令组,每组包含预定数目的指令。发送指令块时,每次向运算核心发送一组指令块的指令。
运算核心每次接收约定粒度的指令(也就是每组中包含的预定数目的指令),所述约定粒度为每次预送的指令的数量(也就是每组中包含的指令的数目,即预定数目)。
所述步骤S0中,将指令块的指令发送至运算核心之前,向运算核心发送预送查询请求。运算核心每次按照所述约定粒度接收预送的指令前获取所述预送查询请求。所述预送查询请求包含预送的指令的信息及所述预送的指令所属的指令块的信息。
运算核心设置指令信息表,所述指令信息表包括正在执行的预送的指令的信息,已经存储的还未执行的预送的指令的信息。运算核心根据正在执行的指令,已经存储但还未执行的指令设置所述指令信息表,并根据指令的变化而更新。
运算核心基于所述指令信息表和所述预送查询请求,对所述预送查询请求做出响应,基于所述响应接收预送的指令,并更新所述指令信息表。运算核心基于接收的预送的指令,正在执行的指令更新所述指令信息表。
所述运算核心对所述预送查询请求做出的响应可以包括:指令接收响应、指令放弃响应和指令冲突响应。各运算核心基于自身的指令信息表和预送查询请求对所述预送查询请求做出响应,若预送的指令覆盖所述运算核心正在执行的指令和/或覆盖已经存储但还未执行的指令,则该运算核心做出指令冲突响应;若预送的指令为所述运算核心需要的指令,则该运算核心做出指令接收响应;若预送的指令在所述运算核心中已经存储,则该运算核心做出指令放弃响应。
所述运算核心对所述预送查询请求做出的响应还可以包括:即时接收响应、延迟接收响应。若预送的指令为所述运算核心需要的指令且该运算核心具有足够的存储空间存储所述预送的指令,则该运算核心做出即时接收响应;若预送的指令为所述运算核心需要的指令但该运算核心没有足够的存储空间存储所述预送的指令,则该运算核心做出延迟接收响应。
所述运算核心发出所述延迟接收响应后,经过延迟时间,再发出即时接收响应。所述运算核心发出指令冲突响应后,在冲突解除后,再次做出响应。所述冲突包括所述预送的指令覆盖所述运算核心正在执行的指令和/或覆盖已经存储但还未执行的指令。
指令块的指令是按照约定粒度向发出指令接收响应或即时接收响应的运算核心发送的。相应的,发出指令接收响应或即时接收响应的运算核心每次接收约定粒度的指令,所述约定粒度为每次预送的指令的数量。
运算核心基于预送查询请求中预送的指令所属的指令块的信息将接收到的指令以指令块的形式存储。所述运算核心接收到所述预送的指令后,以指令块的形式存储所述预送的指令,也可以看成是将接收到的预送的指令还原成指令块存储。
运算核心接收的指令块的指令覆盖所述运算核心中已经存储并已经运行的指令块的指令,或者接收的指令块的指令存储在所述运算核心的空闲存储区。运算核心存储新接收到的指令块的指令时,不能覆盖正在执行的指令块,也不能覆盖已经存储但还未执行的指令块。
所述步骤S2中,运算核心按照指令块的执行顺序(指令块中指令的执行顺序)执行所述指令块(指令块中的指令)。具体的,运算核心按照所述指令的执行顺序执行所述指令,并保存所述指令的执行顺序。在执行指令块的过程中,若运算核心执行构成循环执行的指令块,在执行完构成循环执行的指令块后,运算核心发出跳出循环响应。
所述运算核心还可以发送自行取指请求和模式切换请求,运算核心可以配合发送自行取指请求和模式切换请求。也就是说,运算核心暂时停止接受预送的指令块的指令,由运算核心自行向指令存储器取指,并在自行取指结束之后,重新接受预送的指令块的指令时,所述运算核心先发出自行取指请求,并在自行取指结束后,发出模式切换请求,重新进入预送模式后,重新接收该运算核心需接收但还未接收的预送的指令块的指令。
运算核心在拒绝接受所述预送的指令时,发出自行取指请求,具体的可以是,运算核心终止接受预送的指令块的指令,由运算核心自行向指令存储器取指,则发出自行取指请求且仅发送自行取指请求。
图2是本发明实施例提供的运算核心,所述运算核心包括:
指令存储单元21,用以接收并储存指令块的指令,所述指令块为预送的;
运算单元22,用以运行指令存储单元21储存的指令块;运算单元22与指令存储单元21相连,从指令存储单元21处获取指令后执行;
所述运算核心还包括:
设置单元23,用以基于所述指令存储单元21存储的指令和所述运算单元22执行的指令设置或更新指令信息表,所述指令信息表包括正在执行的预送的指令的信息,已经存储的还未执行的预送的指令的信息;
指令传输处理单元24,用以获取预送查询请求,所述预送查询请求包含预送的指令的信息及所述预送的指令所属的指令块的信息,基于所述预送查询请求和所述指令信息表,对所述预送查询请求做出所述响应;指令传输处理单元24与设置单元23相连,从设置单元23获取指令信息表,指令传输处理单元24与指令存储单元21相连,将所述响应发送至指令存储单元21。
所述指令存储单元21每次接收约定粒度的指令,所述约定粒度为每次预送的指令的数量。所述指令传输处理单元24在所述指令存储单元每次按照所述约定粒度接收预送的指令前获取所述预送查询请求。所述指令存储单元21以指令块的形式存储所述指令。
所述指令存储单元21接收的指令块的指令覆盖所述指令存储单元21中已经存储并已经运行的指令块的指令,或者所述指令存储单元21接收的指令块的指令存储在所述指令存储单元21的空闲存储区。也就是说,指令存储单元21存储新接收到的指令块的指令时,不能覆盖正在执行的指令块,也不能覆盖已经存储但还未执行的指令块。
所述运算单元22按照所述指令的执行顺序执行所述指令,所述指令存储单元21保存所述指令的执行顺序。
所述指令存储单元21还用以发出停止响应,所述指令存储单元21发出所述停止响应后,停止接收预送的指令块。所述指令存储单元21还用以在发出停止响应后,再次发送重新接收响应,所述指令存储单元21发出所述重新接收响应后,重新接收预送的指令块。
运算核心内部出现异常时,指令存储单元21还用以发出停止响应,停止接收预送的指令块,例如,指令存储单元21的存储空间已满,不能存储新的指令块时;预送的指令块与运算单元22当前正在执行的指令块冲突时等。运算核心内部出现异常时,指令存储单元21发出停止响应,若异常排除,指令存储单元21还可以再次发送重新接收响应,重新接收预送的指令块,例如,删除已执行过的指令块,指令存储单元21的存储空间可以继续接收新的指令块时;当前存储的指令块可以被后续预送的指令块覆盖时。
具体来讲,将指令块拆分成若干指令,每次向运算核心发送约定粒度的指令。每次发送约定粒度的指令之前,都会发送所述预送查询请求。所述预送查询请求包含预送的指令在指令存储器中的存储地址,以及预送的指令所属的指令块的第一条指令在指令存储单元21中的存储地址。
在具体实施的过程中,预送的指令块的指令存储在外部的指令存储器中,运算核心接收的指令块存放在指令存储单元21中,该指令块在指令存储单元21中的存储地址与预送的指令块存储在指令存储器中的存储地址具有映射关系。
运算核心每次接受约定粒度的指令,预送的指令在指令存储单元21中以指令块的形式存储,具体的依据预送的指令所属的指令块在指令存储单元21中的存储地址与预送的指令块存储在指令存储器中的存储地址具有映射关系,将接收到的预送的指令在指令存储单元21中与指令存储器中的存储地址对应的存储地址以指令块的形式存储。
所述指令传输处理单元24对所述预送查询请求做出的响应包括:指令接收响应、指令放弃响应和指令冲突响应。若预送的指令覆盖所述运算单元22正在执行的指令和/或覆盖所述指令存储单元已经存储但所述运算单元22还未执行的预送的指令,则所述指令传输处理单元做出指令冲突响应;若预送的指令为所述运算核心需要的指令,则所述指令传输处理单元做出指令接收响应;若预送的指令在所述指令存储单元中已经存储,则所述指令传输处理单元做出指令放弃响应。
所述指令传输处理单元24对所述预送查询请求做出的响应还包括:即时接收响应、延迟接收响应。若预送的指令为所述运算核心需要的指令且该运算核心的指令存储单元具有足够的存储空间存储所述预送的指令,则该运算核心的指令传输处理单元做出即时接收响应;若预送的指令为所述运算核心需要的指令但该运算核心的指令存储单元没有足够的存储空间存储所述预送的指令,则该运算核心的指令传输处理单元做出延迟接收响应。
所述指令传输处理单元24发出所述延迟接收响应后,经过延迟时间,再发出即时接收响应。所述指令传输处理单元24发出指令冲突响应后,在冲突解除后,再次做出响应。所述冲突包括所述预送的指令覆盖所述运算单元22正在执行的指令和/或覆盖已经存储但还未执行的指令。
指令传输处理单元24发出所述延迟接收响应后,经过一段时间(称为延迟时间)在冲突解除后,再次做出响应。冲突包括所述预送的指令覆盖所述运算核心正在执行的指令和/或覆盖已经存储但还未执行的指令,运算核心中存储指令块的指令的存储空间不足等。新的响应可以是即时接收响应、延迟接收响应或指令冲突响应、指令放弃响应中的一种。
指令块中的指令在指令存储器和指令存储单元21中的存储方式有多种,比较常用的是以Cache管理的形式保存,一个Cache行可以包括几十甚至上百条指令,也可以只包括一条指令。本实施例中,指令以直接Cache映射的形式保存在指令存储器和指令存储单元21中。在直接Cache映射的管理形式中,指令存储单元21中不存在没有空间保存预送指令的问题,因此不会有延迟接收响应产生。
运算单元22在执行完构成循环执行的指令块后,指令传输处理单元24发出跳出循环响应。在指令存储单元21暂停接受预送的指令时,指令传输处理单元24先发出自行取指请求;指令传输处理单元24在发出所述自行取指请求后,在指令存储单元21重新接受预送的指令时,指令传输处理单元24再次发出模式切换请求。在指令存储单元21拒绝接受所述预送的指令时,指令传输处理单元24仅发出自行取指请求。
图3是本发明实施例提供的指令存储器与运算核心存储指令块的存储地址映射关系的示意图,下面结合图3详细说明。
运算核心执行的程序存储在外部的指令存储器3(参看图8中的指令存储器3)中,将所述程序划分为指令块后,向运算核心发送预送查询请求,基于运算核心对所述预送查询请求的响应,依次将指令块中的指令发送至运算核心运。算核心接收的预送的指令后,以指令块的形式存储所述指令。
指令在运算核心的指令存储单元21中的存储地址与指令在指令存储器3中的存储地址具有映射关系,依据所述映射关系运算核心将所述指令以指令块的形式存储在指令存储单元21中。
指令在指令存储器3中的存储顺序为:指令0-4→指令5-24→指令25-34,对指令进行分块,分别为:指令块B0(包含原指令0-4),指令块B1(包含原指令5-24),指令块B2(包含原指令25-34)。为方便描述,对指令在指令块中的命名做了修改,图3中指令块中的指令的名称使用的是表1所示[指令块中指令名称],具体的对应关系如表1所示:
表1
指令块名称 | 原指令名称 | 指令块中指令名称 |
指令块B0 | 指令0-4 | 指令0-4 |
指令块B1 | 指令5-24 | 指令0-19 |
指令块B2 | 指令25-34 | 指令0-9 |
指令存储器3中储存了三个指令块分别为:指令块B0,指令块B1,指令块B2,其中指令块B0包括指令0-4,五条指令,指令块B1包括0-19,二十条指令,指令块B2包括0-9,十条指令。指令块在指令存储器3中顺序存储。指令存储单元21最多可以存储20条指令,指令存储单元21分为20个存储地址,每个存储地址对应顺序标号依次是:地址0-地址19。指令存储单元21与指令存储器3的指令块的存储地址的对应关系为:指令块B0包括指令0-4,指令块B0在指令存储单元21中的存储位置位于地址0-地址4,指令块B1包括指令0-19,指令块B1的指令0-14在指令存储单元21中的存储位置位于地址5-地址19,指令块B1的指令15-19在指令存储单元21中的存储位置还位于地址0-地址4(同一个地址是可以复用的),指令块B2包括指令0-9,指令块B2在指令存储单元21中的存储位置位于地址5-地址14。指令存储器3中的存储地址是连续的,因此指令块B0,指令块B1,指令块B2在指令存储单元21中按照其对应的存储地址仍然保持顺序存储。
上述指令块的存储地址的映射关系预置的,其他实施例中,该映射关系也可以按照其他规则制定。但是一旦映射关系制定,在整个指令的预送过程中,该映射关系不得修改,指令存储单元21在存储指令块的指令时,必须按照制定好的映射关系存储。
运算核心根据映射关系以指令块的形式保存指令,并将指令在指令存储单元21中的存储地址设置或更新至指令信息表。图4是本发明实施例提供的运算核心接收的预送的指令在指令存储单元中存储的一示意图,图5是本发明实施例提供的运算核心接收的预送的指令在指令存储单元中存储的另一示意图,下面结合图4和图5详细说明。
指令在指令存储单元中存储,由于指令存储单元的存储空间有限,当预送的指令存满所述指令存储单元,后续接收的预送的指令需覆盖前面已经的存储的指令才能存储。但是运算核心正在执行的指令或者已经存储但还未执行的指令所占据的存储空间是不能被覆盖的。
运算核心设置的指令信息表可以记录正在执行的预送的指令的信息,已经存储的还未执行的预送的指令的信息。具体的,指令信息表中可以记录正在执行的预送的指令所属的指令块的存储地址,已经存储的还未执行的预送的指令所属的指令块的存储地址,用以表示是否存在可以被覆盖的存储空间,哪些存储空间可以被覆盖,哪些存储空间不能被覆盖。
预送查询请求包含预送的指令在指令存储器中的存储地址,以及预送的指令所属的指令块的第一条指令在指令存储单元21中的存储地址。运算核心在获取预送查询请求后,基于所述指令信息表和预送查询请求做出响应。
如图4所示,活跃区间100表示当前指令存储单元中不能被覆盖的存储空间。活跃区间100由当前正在执行的指令所属的指令块的起始存储地址以及已经存储的还未执行的指令的存储地址限定(可以看成是最近一次接收的预送的指令在指令存储单元21的存储地址)。当前正在执行的指令所属的指令块的起始存储地址与已经存储的还未执行的指令的存储地址之间的区域为活跃区间100,不能被后续的预送的指令覆盖。除此之外的其他区域(可以称为非活跃区间)可以被覆盖以存储后续的预送的指令。如图4所示的活跃区间100位于指令存储单元的存储空间的中部。
如图5所示,活跃区间200也是由当前正在执行的指令所属的指令块的起始存储地址以及已经存储的还未执行的指令的存储地址(可以看成是最近一次接收的预送的指令在指令存储单元21的存储地址)限定。图5所示的活跃区间200包括指令存储单元首部的存储空间和尾部的存储空间。由于指令存储单元中的存储地址是连续的,图5所示的活跃区间200包括当前正在执行的指令所属的指令块的起始存储地址与指令存储单元的存储空间的终止存储地址之间的区域,指令存储单元的存储空间的开始存储地址与已经存储的还未执行的指令的存储地址之间的区域两部分组成。
指令信息表中可以记录活跃区间的起始地址和结束地址,也可以记录非活跃区间的存储地址。本实施例中,指令信息表中记录了活跃区间的起始地址和结束地址。
若预送查询请求中包含的预送的指令在运算核心中的指令存储单元中的存储地址与指令信息表中记录的活跃区间的地址不冲突,或者预送查询请求中包含的预送的指令在运算核心中的指令存储单元中的存储地址与指令信息表中记录的非活跃区间的地址相匹配,则运算核心做出指令接收响应;若预送查询请求中包含的预送的指令在运算核心中的指令存储单元中的存储地址与指令信息表中记录的活跃区间的地址相匹配,或者预送查询请求中包含的预送的指令在运算核心中的指令存储单元中的存储地址与指令信息表中记录的非活跃区间的地址相冲突,则运算核心做出指令冲突响应;若预送查询请求中包含的预送的指令在运算核心中的指令存储单元中的存储地址与指令信息表中记录的活跃区间的地址不冲突,或者预送查询请求中包含的预送的指令在运算核心中的指令存储单元中的存储地址与指令信息表中记录的非活跃区间的地址相匹配,并且该预送的指令已经保存在指令存储单元中,则运算核心做出指令放弃响应。
若运算核心做出指令接收响应或指令放弃响应,运算核心基于预送的指令的存储地址更新指令信息表中已经存储的还未执行的指令的存储地址。运算核心执行指令时,每读取或执行一次指令,便根据本次读取或执行的指令,更新指令信息表中当前正在执行的指令所属的指令块的起始存储地址。这种机制,可以保证一个完整的指令块在被执行完之前,不会被替换掉;预送并且尚未被执行的指令,也不会被替换掉。
以图3所示的实例来讲,指令块B0是第一个存入指令存储单元21的指令块,占据了地址0-地址4的位置。运算核心设置指令信息表为:活跃区间为地址0-地址4。后续发送指令块B1,若约定粒度为每次发送5条指令,则先发送指令块B1的指令0-4。在发送预送查询请求时,所述预送查询请求中包含了指令块B1在指令存储器中的存储地址,以及指令块B1的第一条指令在指令存储单元21中的存储地址:地址5。
运算核心结合指令信息表(活跃区间为地址0-地址4)和预送查询请求(预送指令块B1的5条指令,指令块B1的第一条指令在指令存储单元21中的存储地址:地址5)做出响应。指令块B0是第一个存入指令存储单元21的指令块,占据了地址0-地址4的位置,但是地址5-地址19为空闲,地址不冲突,因此可以继续存储指令块B1的指令0-4,运算核心做出指令接收响应,接收并存储预送的指令块B1的指令0-4。运算核心更新指令信息表为:活跃区间地址0-地址9。
继续按约定粒度发送指令块B1的指令5-9、指令块B1的指令10-14,指令存储单元21按映射关系顺序存储指令块B1的指令0-14至地址5-地址19。此时,运算核心更新指令信息表为:活跃区间地址0-地址19。
继续发送指令块B1的指令15-19时,指令存储单元21已无空闲的地址可以继续存储指令块B1的指令15-19,且指令块B1的指令15-19在指令存储单元21中对应的存储地址为地址0-地址4。若运算核心正在执行指令块B0(指令信息表为:活跃区间地址0-地址19),由于指令块B1的指令15-19在指令存储单元21中的存储地址为地址0-地址4,若正在执行指令块B0,则表示预送的指令覆盖所述运算核心正在执行的指令或者覆盖已经存储但还未执行的指令,不能接收当前预送的指令,则该运算核心做出指令冲突响应。
若指令块B0已经执行完成,运算核心开始执行指令块B1(指令信息表为:活跃区间地址5-地址19),指令存储单元21中地址0-地址4的指令,可以被覆盖掉,则该运算核心做出指令接收响应。
完成指令块B1的指令预送后,继续预送指令块B2的指令,接收到预送指令块B2的预送查询请求,该预送查询请求包括:指令块B2在指令存储器中的存储地址,以及指令块B2的第一条指令在指令存储单元21中的存储地址:地址5。
原理同上,若指令块B1的指令0-4正在执行或已经存储但尚未执行,则指令块B2的指令0-4不能存储,运算核心做出指令冲突响应。必须要等到指令块B1的指令已经全部执行完成,指令块B2的指令0-4可以存储,运算核心才能做出指令接收响应。
具体实施时,按照约定粒度发送指令块的指令,每次按照约定粒度发送指令之前都要发送预送查询请求,并等待运算核心的响应进行后续的操作。
指令块B1中包含的指令与指令块B2中包含的指令不能相同。指令存储单元21中是以指令的存储地址区分指令是否相同的,在指令存储器中的存储地址不同,即便内容相同也认为是不同的指令。
若指令块序列为B0-B1-B2执行一遍之后,再循环执行一遍,例如B0-B1-B2-B0-B1-B2。指令块B0存在地址0-地址4的位置,指令块B1的20条指令存在地址5-地址19、地址0-地址4的位置,指令块B2的10条指令存在地址5-地址14的位置。第一轮执行(B0-B1-B2),指令块B0、指令块B1、指令块B2全部预送,当指令块B2预送结束的时候,指令存储单元21中地址0-地址4的位置保存的是指令块B1的指令15-19,地址5-地址14的位置,保存的是指令块B2的指令0-9,地址15-地址19的位置,保存的是指令块B1的指令10-14。第二轮执行(B0-B1-B2),预送指令块B0时,会把指令存储单元21中地址0-地址4的位置覆盖B0的指令0-4;预送指令块B1时,预送指令0-9时,由于指令存储单元中地址5-14的位置是指令块B2的指令,需要重新接收指令块B1的指令0-9,指令块B1指令10-14已经在指令存储单元21中,因此不需要预送,对预送查询请求会返回指令放弃响应。
具体地讲,所述指令接收响应分为:即时接收响应和延迟接收响应。若预送的指令为所述运算核心需要的指令且该运算核心具有足够的存储空间存储所述预送的指令,则该运算核心做出即时接收响应;若预送的指令为所述运算核心需要的指令但该运算核心没有足够的存储空间存储所述预送的指令,则该运算核心做出延迟接收响应。在直接Cache映射形式的指令管理方式中,只会在指令冲突的时候产生延迟接收响应。在其他的指令管理方式中,根据不同的情况,运算核心做出指令冲突响应或延迟接收响应。
运算核心通常设置在指令管理系统中,对外部装置发送的预送查询请求做出响应,外部装置基于该响应向运算核心发送指令块中的预送的指令。
图6是本发明实施例提供的程序和指令块的示意图,图7是本发明实施例提供的指令块中的指令的示意图,图8是本发明实施例提供的指令管理系统,下面结合图6至图8详细说明。
详细实施例:
程序在进入运算核心中执行之前,需要将所述程序分成指令块。程序由若干条指令组成,划分之后的指令块中包含着程序的指令。所述程序可以是一个大型的系统级程序,也可以是小型的应用软件程序,还可以是从完整的程序中节选的部分功能模块的程序。本实施例中以小型的应用软件程序为例说明,在其他实施例中可以是大型的系统级程序,或者是从完整的程序中节选的部分功能模块的程序,还可以是其他的程序,例如软件的安装程序等,不受本实施例的限制。
将程序分成指令块主要遵循以下几个原则:
1.按照程序的执行顺序分成指令块;
2.划分之后,单个指令块所占的空间小于或等于运算核心的指令存储单元的存储空间;
3.指令块中要包括完整的指令;
4.指令块间不允许有重叠。
程序可以通过分块算法划分为指令块,也可以结合实际经验,例如,指令的执行时间、指令的调用次数等划分为指令块。
具体来讲,原则1中,程序通常都是连续的,并且具有一定的执行顺序,将程序分成指令块时,按照程序的执行顺序划分。由于程序是连续的,按照执行顺序划分的指令块,通常也是连续的。
划分之后的指令块的执行顺序与程序的执行顺序相同,也就是指令块的执行轨迹与程序的执行顺序是一致的。所述程序的执行顺序是指程序中指令的执行顺序。
若程序中具有循环、递归或者条件判断等程序时,指令块的执行轨迹与程序的执行顺序可以略有不同,但是指令块中指令的执行顺序与程序的执行顺序相同。
举例来讲,例如,循环程序。循环程序通常是循环执行若干条指令。若将这些指令分开在不同的指令块中,在发送预送查询请求时,也会循环发送相同的指令,这会影响运算核心的执行效率。因此上述类型的指令通常放在同一个指令块中。将上述类型的指令放在同一个指令块中,在该指令块中执行完整的循环程序,从指令块的整体执行序列来看,是顺序的。但程序的实际执行中,在该指令块中指令是循环执行的,其执行顺序和程序中指令的执行顺序是完全一致的。
但在特殊的情况下,上述类型的指令也可以分散在不同的指令块中。例如,循环嵌套循环的程序,此时外层循环指令和内层循环指令可以放在不同的指令块中。
此处将程序划分为指令块指的是逻辑上的划分,也就是说,将程序划分为指令块最终获得的是指令块序列或指令块列表。也就是说,划分之后的指令块仅是以指令块序列的形式表示程序具有哪些指令块,每个指令块包含哪些指令,而非将程序进行物理上的分割。
举例来讲,待划分的程序包含15条指令,结合指令的执行时间和调用次数,将程序划分为三个指令块,每个指令块包含5条指令,划分之后的指令块以指令块序列的形式表示,而不是以三个独立的指令块存在,划分之后的指令块序列如表2所示:
表2
指令块名称 | 原指令名称 | 指令块中指令名称 |
指令块1 | 指令0-4 | 指令0-4 |
指令块2 | 指令5-9 | 指令0-4 |
指令块3 | 指令10-14 | 指令0-4 |
如表2所示,指令块序列中显示了指令块名称、每个指令块包含的指令。在发送指令块时,按照指令块的顺序,根据约定粒度(本实施例中,约定粒度为每次发送5条指令)先发送指令块1的指令,发送预送查询请求时,发送原指令的前五条指令(指令0-4)在指令存储器中的存储地址以及原指令的指令0在指令存储单元中的存储地址,然后发送指令块2,此时发送预送查询请求时,发送原指令的指令5-9在指令存储器中的存储地址以及原指令的指令5在指令存储单元中的存储地址,其次发送指令块3,此时发送预送查询请求时,发送原指令的指令10-14在指令存储器中的存储地址以及原指令的指令10在指令存储单元中的存储地址。
原则2中,划分之后的指令块所占的空间小于或等于运算核心的指令存储单元的存储空间,指令块需要预送到运算核心的指令存储单元中,若划分之后的指令块所占的空间大于运算核心的指令存储单元的存储空间,则无法存储所述指令块。
对于多核和众核来讲,划分之后的指令块所包含的指令容量要小于或等于每个运算核心的指令存储单元的存储空间。也就是说,要小于或等于最小的指令存储单元的存储空间。指令的存储方式有多种,常用的是以Cache行的形式存储,一般来讲,以Cache行的形式存储,一个Cache行可以为128字节、256字节或512字节,每个Cache行包括一定数量的指令,且每个Cache行包括的指令数目相同。指令块通常包括若干Cache行,大小可以为128字节、256字节或512字节。
具体来讲,划分后的单个指令块内包含的指令容量要小于或等于运算核心的指令存储单元的存储空间大小。指令在传输过程中,以预定的约定粒度传输,以Cache行的形式存储指令时,所述约定粒度一般为一个Cache行。例如,一个128字节的Cache行,指令为4字节时,一个Cache行包含32条指令。
通常要求,指令块包含的指令数目最好是指令传输的约定粒度的整数倍,例如,指令以Cache行的形式存储,指令传输的约定粒度为一个Cache行(也可以是几个Cache行),大小为128字节(Byte),则可以将指令块以一个Cache行(128字节)、两个Cache行(256字节)、或四个Cache行(512字节)的格式划分;或者以其他形式存储指令时,指令传输的约定粒度为5条指令,则单个指令块可以包含10条、15条或20条指令。
原则3中,指令块中要包括完整的指令,指令以Cache行的形式保存,一个Cache行包括一条指令或几条指令。
如前述举例,Cache行就是片内高速缓存与主存间约定的替换、传输粒度的单位,例如,可以是指令存储器与运算核心间传输粒度的单位。上文中约定粒度表示每次传输的指令的数量,若一个Cache行为256字节,指令为4字节时,一个Cache行表示64条指令,则约定粒度为一个Cache行(256字节),每次发送64条指令。通常情况下,运算核心中的存储地址是按字节编址的,如果规定一个Cache行256字节,每次数据传输就是256字节,并且给出的地址是0x100,低位都是0,这称为地址256字节对界。这样访存的效率最高。
划分指令块的时候,是把很多指令划分为几组(每组称为指令块),这样一个指令块可能占用几个Cache行,或者不到1个Cache行。所谓指令块中要包括完整的指令,是指最好能够保证1个指令块中包含完整的Cache行(即划块按Cache对界),例如,256字节对界的Cache行不会出现前一半在前一个指令块中,后一半出现在下一个指令块中的情况。
运算核心或指令存储器中的一条指令,通常是4字节或8字节,在主存或片上高速缓存(指令存储器)中存放的时候,是连续存放的。这样如果约定Cache行大小为256字节,256是4或8的整数倍,按照地址对界的方式,传输一个Cache行不会出现1条指令的4个字节会存放在不同Cache行中的情况。
采用对界的方式可以提高访存的效率。但这个约束不是必须的,可以不对界。
原则4中,指令块间不允许有重叠,例如:程序中包含连续的指令依次为:指令0~指令10,划分为顺序的两个指令块依次为:指令块1、指令块2,指令块1包含指令0~指令5,指令块2包含指令6~指令10。这种划分形式是允许的。
但是如果出现这样的划分形式:指令块1包含指令0~指令8,指令块2包含指令5~指令10,这样是不允许的。
另外,指令块是对一段已经存在于主存(指令存储器)中的程序指令的逻辑上的划分,程序指令存放的物理地址(存储地址)在指令存储器中是固定的,指令块划分的时候是指定从存储地址addr_x~addr_y之间的部分为指令块B_z。如前述表2所示,指令块序列可以具体表示为表3:
表3
指令块名称 | 原指令地址 | 指令块中指令名称 | 存储地址 |
指令块1 | 指令0-4 | 指令0-4 | addr_0~addr_4 |
指令块2 | 指令5-9 | 指令0-4 | addr_5~addr_9 |
指令块3 | 指令10-14 | 指令0-4 | addr_10~addr_14 |
预送指令块的时候,查询请求包含的内容是:询问运算核心是否需要位于地址addr_x~addr_x+m范围内的指令(m表示存储地址的偏移量)。运算核心根据当前执行的指令块、已经存储但未执行的指令块,以及预送查询请求,对预送查询请求作出合适的响应。
运算核心执行指令的时候,是按照指令的地址去指令存储器中取的,运算核心将取到的指令按照前文所述的映射关系保存在指令存储单元中。
划分指令块的方式有多种,并且划分的程序不同,采用的方式也不同,在具体实施时,必须依据上述4个原则进行划分,指令块序列根据实际需要划分,不受上述举例内容限制。
图6是本发明实施例中一个应用程序的指令块的示意图,下面结合图6详细说明。
本应用举例中,程序B为小型的应用软件程序,将程序B划分成指令块时,遵循上述4个原则。
划分指令块时,首先考虑根据程序B的执行顺序划分,程序B一旦设计完成,其执行顺序也就固定了。程序B的指令块序列可以按照规则进行划分,无论划分出来的指令块序列如何,都要保证最终指令的轨迹与原程序B一致。
图6中程序B包含程序段0,程序段1,程序段2,其执行顺序为程序段0→程序段1→程序段2,因此划分为指令块时,可以将每一个程序段划分为一个指令块。将程序B按照执行顺序划分为三个指令块,分别为指令块B0,指令块B1,指令块B2。
图6中箭头所示的流向表示指令块B0,指令块B1,指令块B2的执行顺序,即B0→B1→B2。
在其他实施例中,若程序A中包含程序段0,程序段1,程序段2,其执行顺序是跳转执行的,例如,程序段1→程序段0→程序段2,出现这种跳转的执行顺序或者类似这种跳转的执行顺序时,可以将程序段0,程序段1,程序段2放在同一个指令块中(即整个程序只包含一个指令块),也可以采用本实施例中的划分方式;若程序C中包含程序段0,程序段1,程序段2,其执行顺序是循环执行的,例如,程序段0→程序段1→程序段2→程序段1→程序段2→程序段1→程序段2→程序段0,出现这种循环的执行顺序或者类似这种循环的执行顺序时,可以将程序段1和程序段2划分在一个指令块B1中,程序段0单独划分为一个指令块B0,指令块序列为B0和B1间的循环:B0→B1→B0。在划分指令块时,可以根据实际情况进行划分,不限于上述举例的内容。
划分指令块时还需要考虑:划分之后的指令块所占的空间小于或等于各运算核心的指令存储单元的存储空间;指令块中要包括完整的指令;指令块间的指令不允许重叠。
本实施例中,每条指令4B,运算核心的指令存储单元的最小存储空间为80B,因此指令块B0,指令块B1和指令块B2中所包含的指令容量要小于或等于80B。本实施例中,将指令块B0,指令块B1和指令块B2分别划分为20B、80B和40B。本实施例中,指令块B0,指令块B1和指令块B2中包含的指令容量不相同,在其他实施例中,指令块B0,指令块B1和指令块B2中包含的指令容量可以相同。
程序段0,程序段1,程序段2分别为顺序执行的完整的程序,每段程序包含若干条指令。因此将程序段0,程序段1,程序段2分别划分为指令块B0,指令块B1和指令块B2时,能够保证指令块中要包括指令块的执行顺序与指令的执行顺序一致。
相应的,指令块B0,指令块B1和指令块B2也保证了,顺序执行的指令不能在顺序执行的指令块中重复出现。也就是说,指令块B0包含程序段1,指令块B1中不能再包含程序段1。
本实施例中,程序段0,程序段1,程序段2为顺序执行的程序,因此指令块B0,指令块B1和指令块B2的执行顺序与程序段0,程序段1,程序段2的执行顺序相同。
划分好的指令块序列信息以列表的形式保存,本实施例中,划分好的指令块是指在逻辑上对指令进行划分。
图7是图6中指令块包含的指令的示意图,如图7所示指令块B0包括指令0-4,五条指令,指令块B1包括指令0-19,二十条指令,指令块B2包括指令0-9,十条指令。图7所示的指令块中指令的命名可参照表2所示的内容。
图8是本发明实施例提供的指令管理系统。本实施例中,指令管理装置1、运算核心2和指令存储器3是独立设置的,相互之间通过消息的通信配合工作。
所述指令管理系统包括:
指令管理装置1,用以在发送指令块时,向各运算核心2发送预送查询请求,基于各运算核心2对所述预送查询请求做出的响应发送该指令块中的指令,所述预送查询请求包含预送的指令在指令存储器3中的存储地址,以及预送的指令所属的指令块的第一条指令在运算核心2中的存储地址;
指令管理装置1向各运算核心发送预送查询请求,主要是为了了解各运算核心2(运算核心2是对各运算核心的泛指)的执行情况,并根据各运算核心2的应答响应内容,判断是否向各运算核心2发送后续的指令块;
由于各运算核心2的执行速度存在差异,有的运算核心执行速度快,有的运算核心执行速度慢,通过各运算核心2对所述预送查询请求做出的响应,可以判断各运算核心2的执行情况,在各运算核心2的执行速度差异较大时,通过控制向各运算核心2发送指令,平衡各运算核心2的差异。
运算核心2,用以接收并执行指令块,且对指令管理装置1发出的预送查询请求做出响应;在所述指令管理系统中,运算核心2为多个,分别为运算核心0至运算核心n;
运算核心2对指令管理装置1发出的预送查询请求做出响应通常包括四种,分别是:指令即时接收响应、指令延迟接收响应、指令放弃响应和指令冲突响应。如果运算核心2中的指令存储单元采用直接Cache映射的管理方式时,指令延迟接收响应与指令冲突响应相同,因此运算核心2对指令管理装置1发出的预送查询请求做出响应,也可以看成是三种:即时接收响应、指令放弃响应和指令冲突响应;运算核心2一次只能做出一种响应。
具体来讲,若预送的指令为运算核心2需要的指令且该运算核心2具有足够的存储空间存储所述预送的指令,则该运算核心2做出即时接收响应;若预送的指令将覆盖运算核心2正在执行的指令或者覆盖已经存储但还未执行的指令,或者两种指令都将被覆盖,导致该运算核心2没有足够的存储空间存储所述预送的指令,则运算核心2做出指令冲突响应;若预送的指令在运算核心2中已经存储在,则运算核心2做出指令放弃响应;
所述即时接收响应表示运算核心2随时可以接收指令块所述指令冲突响应表示运算核心2暂时不能接收指令块,只有冲突解除之后才能判断时候需要指令块;所述冲突包括所述预送的指令覆盖所述运算核心正在执行的指令或覆盖已经存储但还未执行的指令,或者两者都覆盖;
若运算核心2发出指令冲突响应,运算核心2还需要在发出指令冲突响应后,在冲突解除后能够接收指令时,再次向指令管理装置1做出响应。
指令存储器3,用以存储指令块(本实施例中,指令存储器3中存储的是程序,具体的可以是以指令序列或者列表形式保存的划分好的指令块);指令存储器2受指令管理装置1的控制,指令管理装置1基于各运算核心2对所述预送查询请求做出的响应,判断各运算核心2的状态,从而决定是否继续发送后续的指令块,若继续发送后续的指令块,则向指令存储器3发送取指请求,也就是控制指令存储器3向各运算核心2发送指令块的命令;指令存储器3接收指令管理装置1发出的发送指令块的命令(例如,取指请求)时,向运算核心2发送指令;
由于运算核心2为多个,指令存储器3一般通过广播或多播的方式发送指令,即一次可以同时为多个运算核心传输指令,这样一方面能够减少串行传输时运算核心2的等待时间,另一方面可以减少指令传输对通信网络的占用,能够提高芯片数据传输使用率,进而提高运算核心2的运算效率。
在具体实施过程中,划分好的指令块B0,指令块B1和指令块B2是预先存放在指令存储器3中的。指令存储器3的容量可以比较大,用以存放较多的指令块。
所述指令管理系统还可以包括分块单元(图中未显示),用以将程序划分为顺序执行的指令块。程序在送入指令存储器3中时,可以是已经分好的指令块,也可以在指令存储器3中设置分块单元,将程序送入指令存储器3后,由分块单元分成指令块。
将划分好指令块的信息写入指令管理装置1,所述指令块的信息包括指令块的数量,指令块的大小,指令块的执行顺序信息,各指令块包含的指令的数目、指令的存储地址等。指令块的信息可以以列表的形式,通过软件指令写入或导入指令管理装置1中。
在指令存储器中指令块B0、指令块B1、指令块B2是顺序储存的,指令块B0、指令块B1、指令块B2的指令按照预定的直接映射关系存储在运算核心2中。
如参考图4,指令块B0的5条指令存在地址0-地址4的位置,指令块B1的20条指令存在地址5-地址19、地址0-地址4的位置,指令块B2的10条指令存在地址5-地址14的位置。
将指令存储在单独的指令存储器3中,可以提高指令管理装置1的工作效率,降低指令管理装置1的开销。指令管理装置1仅需要担负管理的工作,与运算核心2进行预送查询请求的通讯,向指令存储器3发出取指请求,而不需要担负发送指令块的指令的工作。与运算核心2进行预送查询请求的通讯,向指令存储器3发出取指请求。
本实施例中,指令管理装置1和指令存储器3是独立设置的,在其他实施例中,两者可以集成在一起,不受上述内容的限制。
运算核心2的数目一般为多个,称为多核或众核,多个运算核心2并行处理数据,以增强数据处理的效率。运算核心2中包含接收并储存所述指令块的指令的指令存储单元和执行所述指令存储单元储存的指令块的指令的运算单元。所述指令存储单元也称为指令局存,容量一般在KB量级。
本实施例中,运算核心0至运算核心k的指令存储单元的容量为80B,运算核心k+1至运算核心n的指令存储单元的容量为160B。指令块B0为20B,指令块B1为80B,指令块B2为40B。在其他实施例中,运算核心0至运算核心n的指令存储单元的容量可以相同,例如,都为80B,或者都为160B。指令块的大小也可以相同,例如,都为80B。
所述指令管理系统启动执行的初始状态时,运算核心2的指令存储单元中通常是空的,也就是说,没有存储指令块。此时,指令管理装置1向每个运算核心2发送预送查询请求,运算核心2都会反馈即时接收响应。后续发送指令块B1、指令块B2的指令时,运算核心2根据自身的执行情况及预送的指令的信息,向指令管理装置1反馈适合的响应。
由于指令块在划分的时候遵循了原则1,所有的指令块都小于或等于运算核心2的指令存储单元的容量,且指令在指令存储器3的存储地址与在运算核心2中的存储地址具有对应关系,因此指令的预送查询请求中一般不携带指令块的大小的信息,但在指令的预送查询请求中,携带预送的指令在指令存储器3的存储地址。
所述预送查询请求包含预送的指令的信息。所述预送查询请求包含预送的指令在指令存储器中的存储地址,以及预送的指令所属的指令块的第一条指令在指令存储单元(也就是运算核心2)中的存储地址。
指令管理装置1通常是按照指令块的执行顺序,依次向运算核心2发送指令块,并且一个指令块发送完成之后,再发送下一个指令块。具体的,在发送指令块时,将指令块拆分成指令,并按照约定粒度发送。所述约定粒度是指每次发送的指令的数目。因此指令管理装置1向运算核心2发送预送查询请求时,也是一个指令块的指令的预送查询请求发送并处理完成之后,发送下一个指令块的指令的预送查询请求并处理。
本实施例中运算核心不会发出延迟接收响应,因此每次向运算核心2发送指令时,指令管理装置1只有在接收到的响应中不包含指令冲突响应时,才会向指令存储器3发送取指请求;若指令管理装置1接受到的响应中包含指令冲突响应,则指令管理装置1会控制指令存储器3暂停向运算核心2发送指令。另外,指令管理装置1向指令存储器3发送取指请求时,会告知指令存储器3仅向发出即时接收响应的运算核心2发送指令。也就是说,若运算核心2做出指令放弃响应,那么该运算核心2就不会收到本次预送的指令。这可以防止指令接收重复,避免通信资源浪费。
本实施例中,运算核心0至运算核心k的指令存储单元的容量为80B,运算核心k+1至运算核心n的指令存储单元的容量为160B。指令块B0的大小为20B,运算核心2在接收了指令块B0的指令后,运算核心0至运算核心n中都存储了20B的指令,对于运算核心0至运算核心k来讲,其容量为80B,目前可用的容量为60B,对于运算核心k+1至运算核心n来讲,其容量为160B,目前可用的容量为140B。
在其他实施例中,若运算核心0至运算核心n的指令存储单元的容量相同,由于每个运算核心执行指令的速度不同,也有可能造成各运算核心的指令存储单元的可用容量不同。
在众多运算核心中可以指定一个运算核心为指令管理装置,则该运算核心还包括如图8所示的指令管理装置。
运算核心多为处理器,用以执行指令块并对预送查询请求作出响应,但运算核心也可以与指令管理装置集成在一起。也就是说,指令管理装置和运算核心可以分别作为独立的部件,相互通信完成指令的处理,指令管理装置也可以和运算核心集成在一起形成集成部件,该集成部件既可以实现指令管理装置的工作,又可以实现运算核心的工作。
本发明的技术方案至少具有以下优势:
采用软硬件相结合的方法,软件根据程序的执行轨迹,将指令代码划分为一系列指令块序列,软件保证每个运算核心指令的指令块轨迹一致。硬件按照软件划分出来的指令块序列信息,将运算核心所需指令送入运算核心的指令存储器中。由于程序指令轨迹提前可知,可以在运算核心真正执行指令之前,将指令主动提前载入运算核心的存储器中。
将程序切分为小的指令块,将指令块中的指令预送至运算核心,运算核心可在执行前获得指令。这使得指令的预送与计算核心执行相对独立,各运算核心可以在不影响正在执行的指令同时接受其他预送的指令,降低运算核心取指等待的时间,提高运算核心的运算效率。
各运算核心不再主动发出取指请求,能够消除运算核心取指竞争,还能够减少对通信网络的占用,有利于进一步提高运算核心的运算效率。
指令组织成容量可变的指令块,每个运算核心执行的指令超块轨迹相同,但允许每个运算核心在指令块内的执行轨迹各不相同。也就是说,各运算核心的执行速度不同,基于各运算核心对所述预送查询请求做出的响应发送该指令块中的指令,可以平衡各运算核心之间的执行速度的差异。这使得各运算核心执行速度差异在可控范围内,但是未强制各运算核心同步执行指令。这种以预送指令为手段的控制方式是一种松散的同步机制,即通过发送预送查询请求,基于运算核心的响应控制指令的预先发送的节奏,平衡执行速度快的运算核心与执行速度慢的运算核心之间的速度差异。也就是说,使执行最快的运算核心不会超过执行最慢的核心太多,若执行快的运算核心将要执行的指令会覆盖执行慢的运算核心的正在执行的指令块时,执行慢的运算核心发出指令冲突响应,暂停向所有运算核心发送指令的工作。本发明的技术方案允许各运算核心的速度存在一定差异,指令预送过程中对运算核心的干扰少,因此适用的范围更广。
以多播、广播的指令预送方式,对多核、众核结构尤其适用,能够减少运算核心间的取指竞争,以及减少指令传输对通信网络的拥塞时间,提高片上通信网络利用效率。
本发明的技术方案是一种基于松散同步的指令预送机制,解决了单核、多核、众核处理器中计算核心取指延迟长的问题和多核、众核处理器中的取指竞争问题,提高了处理器的运算效率。
本发明的技术方案采用软硬件协同的办法,解决单核、多核、众核处理器中计算核心取指延迟长的问题。采用指令预送的方式,将有效解决多核、众核处理器中的取指竞争问题。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
Claims (32)
1.一种运算核心的指令管理方法,其特征在于,包括:
接收并储存指令块的指令,所述指令块为预送的;
运行所述存储的指令块的指令;
在接收所述指令块的指令前,获取预送查询请求,所述预送查询请求包含预送的指令的信息及所述预送的指令所属的指令块的信息;
设置指令信息表,所述指令信息表包括正在执行的预送的指令的信息,已经存储的还未执行的预送的指令的信息;
所述接收所述指令块的指令包括:基于所述指令信息表和所述预送查询请求,对所述预送查询请求做出响应,基于所述响应接收预送的指令,并更新所述指令信息表;
所述储存指令块的指令包括:以指令块的形式存储所述指令,并执行所述指令。
2.如权利要求1所述的运算核心的指令管理方法,其特征在于,所述运算核心对所述预送查询请求做出的响应包括:指令接收响应、指令放弃响应和指令冲突响应。
3.如权利要求2所述的运算核心的指令管理方法,其特征在于,所述基于所述指令信息表和所述预送查询请求,对所述预送查询请求做出响应包括:若预送的指令覆盖所述运算核心正在执行的指令和/或覆盖已经存储但还未执行的指令,则该运算核心做出指令冲突响应;若预送的指令为所述运算核心需要的指令,则该运算核心做出指令接收响应;若预送的指令在所述运算核心中已经存储,则该运算核心做出指令放弃响应。
4.如权利要求1所述的运算核心的指令管理方法,其特征在于,所述运算核心对所述预送查询请求做出的响应包括:即时接收响应、延迟接收响应、指令放弃响应和指令冲突响应。
5.如权利要求4所述的运算核心的指令管理方法,其特征在于,所述基于所述指令信息表和所述预送查询请求,对所述预送查询请求做出响应包括:若预送的指令为所述运算核心需要的指令且该运算核心具有足够的存储空间存储所述预送的指令,则该运算核心做出即时接收响应;若预送的指令为所述运算核心需要的指令但该运算核心没有足够的存储空间存储所述预送的指令,则该运算核心做出延迟接收响应;若预送的指令覆盖所述运算核心正在执行的指令和/或覆盖已经存储但还未执行的指令,则该运算核心做出指令冲突响应;若预送的指令在所述运算核心中已经存储,则该运算核心做出指令放弃响应。
6.如权利要求5所述的运算核心的指令管理方法,其特征在于,所述运算核心发出所述延迟接收响应后,经过延迟时间,再发出即时接收响应。
7.如权利要求2或4所述的运算核心的指令管理方法,其特征在于,所述运算核心发出指令冲突响应后,在冲突解除后,再次做出响应。
8.如权利要求7所述的运算核心的指令管理方法,其特征在于,所述冲突包括所述预送的指令覆盖所述运算核心正在执行的指令和/或覆盖已经存储但还未执行的指令。
9.如权利要求1所述的运算核心的指令管理方法,其特征在于,所述储存指令块的指令包括:接收的指令块的指令覆盖所述运算核心中已经存储并已经运行的指令块的指令,或者接收的指令块的指令存储在所述运算核心的空闲存储区。
10.如权利要求1所述的运算核心的指令管理方法,其特征在于,接收指令块的指令包括:每次接收约定粒度的指令,所述约定粒度为每次预送的指令的数量。
11.如权利要求1所述的运算核心的指令管理方法,其特征在于,还包括,在执行完构成循环执行的指令块后,发出跳出循环响应。
12.如权利要求1所述的运算核心的指令管理方法,其特征在于,还包括,在拒绝接受所述预送的指令时,发出自行取指请求。
13.如权利要求1所述的运算核心的指令管理方法,其特征在于,还包括,在暂停接受预送的指令时,发出自行取指请求;并在发出所述自行取指请求后,重新接受预送的指令时,发出模式切换请求。
14.如权利要求1所述的运算核心的指令管理方法,其特征在于,还包括,按照所述指令的执行顺序执行所述指令,并保存所述指令的执行顺序。
15.如权利要求1所述的运算核心的指令管理方法,其特征在于,还包括,发出停止响应,并在发出所述停止响应后,停止接收预送的指令块。
16.如权利要求1所述的运算核心的指令管理方法,其特征在于,还包括,在发出停止响应后,再次发送重新接收响应,并在发出所述重新接收响应后,重新接收预送的指令块。
17.一种运算核心,其特征在于,包括:
指令存储单元,用以接收并储存指令块的指令,所述指令块为预送的;
运算单元,用以运行所述指令存储单元储存的指令;
设置单元,用以基于所述指令存储单元存储的指令和所述运算单元执行的指令设置或更新指令信息表,所述指令信息表包括正在执行的预送的指令的信息,已经存储的还未执行的预送的指令的信息;
指令传输处理单元,用以获取预送查询请求,所述预送查询请求包含预送的指令的信息及所述预送的指令所属的指令块的信息,基于所述预送查询请求和所述指令信息表,对所述预送查询请求做出响应;
其中,接收指令块的指令包括:基于所述指令信息表和所述预送查询请求,对所述预送查询请求做出响应,基于所述响应接收预送的指令,并更新所述指令信息表。
18.如权利要求17所述的运算核心,其特征在于,所述指令传输处理单元对所述预送查询请求做出的响应包括:指令接收响应、指令放弃响应和指令冲突响应。
19.如权利要求18所述的运算核心,其特征在于,若预送的指令覆盖所述运算单元正在执行的指令和/或覆盖所述指令存储单元已经存储但所述运算单元还未执行的预送的指令,则所述指令传输处理单元做出指令冲突响应;若预送的指令为所述运算核心需要的指令,则所述指令传输处理单元做出指令接收响应;若预送的指令在所述指令存储单元中已经存储,则所述指令传输处理单元做出指令放弃响应。
20.如权利要求17所述的运算核心,其特征在于,所述指令传输处理单元对所述预送查询请求做出的响应包括:即时接收响应、延迟接收响应、指令放弃响应和指令冲突响应。
21.如权利要求20所述的运算核心,其特征在于,若预送的指令为所述运算核心需要的指令且所述指令存储单元具有足够的存储空间存储所述预送的指令,则所述指令传输处理单元做出即时接收响应;若预送的指令为所述运算核心需要的指令但所述指令存储单元没有足够的存储空间存储所述预送的指令,则所述指令传输处理单元做出延迟接收响应;若预送的指令覆盖所述运算单元正在执行的指令和/或覆盖所述指令存储单元已经存储但所述运算单元还未执行的预送的指令,则所述指令传输处理单元做出指令冲突响应;若预送的指令在所述指令存储单元中已经存储,则所述指令传输处理单元做出指令放弃响应。
22.如权利要求21所述的运算核心,其特征在于,所述指令传输处理单元发出所述延迟接收响应后,经过延迟时间,再发出即时接收响应。
23.如权利要求18或20所述的运算核心,其特征在于,所述指令传输处理单元发出指令冲突响应后,在冲突解除后,再次做出响应。
24.如权利要求23所述的运算核心,其特征在于,所述冲突包括所述预送的指令覆盖所述运算单元正在执行的指令和/或覆盖已经存储但还未执行的指令。
25.如权利要求17所述的运算核心,其特征在于,所述指令存储单元接收的指令块的指令覆盖所述指令存储单元中已经存储并已经运行的指令块的指令,或者所述指令存储单元接收的指令块的指令存储在所述指令存储单元的空闲存储区。
26.如权利要求17所述的运算核心,其特征在于,所述指令存储单元每次接收约定粒度的指令,所述约定粒度为每次预送的指令的数量;所述指令存储单元以指令块的形式存储所述指令。
27.如权利要求17所述的运算核心,其特征在于,在所述运算单元执行完构成循环执行的指令块后,所述指令传输处理单元发出跳出循环响应。
28.如权利要求17所述的运算核心,其特征在于,在所述指令存储单元暂停接受预送的指令时,所述指令传输处理单元发出自行取指请求;所述指令传输处理单元在发出所述自行取指请求后,在所述指令存储单元重新接受预送的指令时,再次发出模式切换请求。
29.如权利要求17所述的运算核心,其特征在于,在所述指令存储单元拒绝接受所述预送的指令时,所述指令传输处理单元发出自行取指请求。
30.如权利要求17所述的运算核心,其特征在于,所述运算单元按照所述指令的执行顺序执行所述指令,所述指令存储单元保存所述指令的执行顺序。
31.如权利要求17所述的运算核心,其特征在于,所述指令存储单元还用以发出停止响应,所述指令存储单元发出所述停止响应后,停止接收预送的指令块。
32.如权利要求17所述的运算核心,其特征在于,所述指令存储单元还用以在发出停止响应后,再次发送重新接收响应,所述指令存储单元发出所述重新接收响应后,重新接收预送的指令块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210107215.4A CN103377033B (zh) | 2012-04-12 | 2012-04-12 | 运算核心及其指令管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210107215.4A CN103377033B (zh) | 2012-04-12 | 2012-04-12 | 运算核心及其指令管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103377033A CN103377033A (zh) | 2013-10-30 |
CN103377033B true CN103377033B (zh) | 2016-01-13 |
Family
ID=49462202
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210107215.4A Active CN103377033B (zh) | 2012-04-12 | 2012-04-12 | 运算核心及其指令管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103377033B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729990B (zh) * | 2017-07-20 | 2021-06-08 | 上海寒武纪信息科技有限公司 | 支持离散数据表示的用于执行正向运算的装置及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1151047A (zh) * | 1994-11-25 | 1997-06-04 | 摩托罗拉公司 | 将指令装入指令高速缓冲存储器中的方法 |
CN1598761A (zh) * | 2004-09-17 | 2005-03-23 | 中国人民解放军国防科学技术大学 | 超长指令字结构微处理器动静态结合的指令预取方法 |
US7406585B2 (en) * | 2002-09-20 | 2008-07-29 | Arm Limited | Data processing system having an external instruction set and an internal instruction set |
-
2012
- 2012-04-12 CN CN201210107215.4A patent/CN103377033B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1151047A (zh) * | 1994-11-25 | 1997-06-04 | 摩托罗拉公司 | 将指令装入指令高速缓冲存储器中的方法 |
US7406585B2 (en) * | 2002-09-20 | 2008-07-29 | Arm Limited | Data processing system having an external instruction set and an internal instruction set |
CN1598761A (zh) * | 2004-09-17 | 2005-03-23 | 中国人民解放军国防科学技术大学 | 超长指令字结构微处理器动静态结合的指令预取方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103377033A (zh) | 2013-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9110826B2 (en) | Memory allocation in a system using memory striping | |
JP4908017B2 (ja) | Dmaデータ転送装置及びdmaデータ転送方法 | |
CN100412848C (zh) | 计算机网络和计算机系统 | |
US7761666B2 (en) | Temporally relevant data placement | |
CN101650698B (zh) | 直接存储器访问的实现方法 | |
CN102045258B (zh) | 数据缓存管理方法及装置 | |
US8307053B1 (en) | Partitioned packet processing in a multiprocessor environment | |
US9244980B1 (en) | Strategies for pushing out database blocks from cache | |
US20130219404A1 (en) | Computer System and Working Method Thereof | |
US8886741B2 (en) | Receive queue models to reduce I/O cache consumption | |
CN102439574B (zh) | 系统缓存中数据替换方法及多核通信处理器 | |
WO2020199760A1 (zh) | 数据存储方法、存储器和服务器 | |
CN103345451A (zh) | 一种在多核处理器中缓冲数据的方法 | |
US9990299B2 (en) | Cache system and method | |
CN107870879A (zh) | 一种数据搬移方法、加速器板卡、主机及数据搬移系统 | |
KR20110101994A (ko) | 멀티포트 데이터 캐시 장치 및 멀티포트 데이터 캐시 장치의 제어 방법 | |
JP2012243026A (ja) | データ供給装置、キャッシュ装置、データ供給方法、キャッシュ方法およびプログラム | |
US20180089141A1 (en) | Data processing device | |
CN103377033B (zh) | 运算核心及其指令管理方法 | |
CN109388429A (zh) | Mhp异构多流水线处理器的任务分发方法 | |
CN103377034A (zh) | 指令预送方法及装置、指令管理系统、运算核心 | |
CN107277062A (zh) | 数据包的并行处理方法及装置 | |
CN111653317A (zh) | 基因比对加速装置、方法及系统 | |
CN103377085B (zh) | 指令管理方法及装置、指令管理系统、运算核心 | |
CN109408118A (zh) | Mhp异构多流水线处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |