CN111857831B - 一种存储体冲突优化方法、并行处理器及电子设备 - Google Patents

一种存储体冲突优化方法、并行处理器及电子设备 Download PDF

Info

Publication number
CN111857831B
CN111857831B CN202010527915.3A CN202010527915A CN111857831B CN 111857831 B CN111857831 B CN 111857831B CN 202010527915 A CN202010527915 A CN 202010527915A CN 111857831 B CN111857831 B CN 111857831B
Authority
CN
China
Prior art keywords
instruction
bank
pipeline
instruction group
group
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
Application number
CN202010527915.3A
Other languages
English (en)
Other versions
CN111857831A (zh
Inventor
袁庆
陈庆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu Haiguang Microelectronics Technology Co Ltd
Original Assignee
Chengdu Haiguang Microelectronics Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Chengdu Haiguang Microelectronics Technology Co Ltd filed Critical Chengdu Haiguang Microelectronics Technology Co Ltd
Priority to CN202010527915.3A priority Critical patent/CN111857831B/zh
Publication of CN111857831A publication Critical patent/CN111857831A/zh
Application granted granted Critical
Publication of CN111857831B publication Critical patent/CN111857831B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

本申请涉及一种存储体冲突优化方法、并行处理器及电子设备,属于计算机技术领域。该方法包括:在对位于流水线最前端的当前指令组中存在Bank冲突的同一个Bank中的目标指令进行处理时,确定处理目标指令时剩余的空闲Bank;获取流水线中指令地址指向所述空闲Bank,且距离所述当前指令组距离最近的一个指令组,得到目标指令组;按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理。通过引入流水线的概念,将待处理的指令组暂存于流水线中,使得将发生Bank冲突时,出现的剩余数据带宽分配给其余时间输入的指令使用,充分利用存储体资源,减少Bank冲突带来暂停时间和存储体性能衰减。

Description

一种存储体冲突优化方法、并行处理器及电子设备
技术领域
本申请属于计算机技术领域,具体涉及一种存储体冲突优化方法、并行处理器及电子设备。
背景技术
目前,由于大规模并行计算的需求和人工智能(Artificial Intelligence,AI)的发展,并行处理器(如图像处理器(Graphics Processing Unit,GPU)等)被广泛应用在人工智能学习训练、大规模科学计算、航天航空、自动驾驶等各领域。在现有的并行处理器的计算单元设计方案中,通常采用单指令多数据流(Single Instruction Multiple Data,SIMD)或多指令多数据流(Multiple Instruction stream and Multiple Data stream,MIMD)的方案,但是无论哪种方案,都要求足够的数据输入带宽,且随着计算需求的提高,对内部存储数据带宽的需要也进一步提高。目前并行处理器的内部数据存储主要为分体存储,即采用多个Bank(存储体)组成并行的多端口存储结构,以应对多个SIMD的读写请求。
但是即使这样,依旧无法避免Bank冲突(当同一时间对同一个bank中不同地址数据进行操作时,便会发生Bank冲突,也即在同一时刻存在多条指令的地址均指向同一个Bank)。当发生Bank冲突时,整个流水需要中断,并对发生冲突的Bank进行独立的读写,直到发生冲突的读写请求完全处理完毕时,才能对下一组读写请求进行操作。
通常而言,可以通过增加Bank的数目进行更细的颗粒划分,以减少Bank冲突的发生,或者,采用双端口存储介质的方式,也能有效抑制Bank冲突。此外,对于特殊的应用可以采用特殊的地址编码方式,也能取得相似的效果。但是,增加Bank的数目会导致功耗和仲裁逻辑复杂度的上升,而采用双端口的存储介质,会造成芯片面积的上升,而采用特殊的地址编码方式,其适用范围有限,且会导致芯片不再支持Burst(突发)读取等操作方式。其中,由于采用特殊的地址编码方式,导致相邻Bank的地址不再连续,而突发读写操作实际上是对连续的一片地址的读写操作,因此采用特殊的地址编码方式不再支持Burst操作。更为重要的是,上述的三种方式依旧无法杜绝Bank冲突的发生,只能抑制其发生。
发明内容
鉴于此,本申请的目的在于提供一种存储体冲突优化方法、并行处理器及电子设备,以改善发生Bank冲突带来的不利影响。
本申请的实施例是这样实现的:
第一方面,本申请实施例提供了一种存储体冲突优化方法,包括:在对位于流水线最前端的当前指令组中存在Bank冲突的同一个Bank中的目标指令进行处理时,确定处理所述目标指令时剩余的空闲Bank;获取所述流水线中指令地址指向所述空闲Bank,且距离所述当前指令组距离最近的一个指令组,得到目标指令组;按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理。本申请实施例中,在对位于流水线最前端的当前指令组中存在Bank冲突的同一个Bank中的目标指令进行处理时,确定处理该目标指令时剩余的空闲Bank,从流水线中获取目标指令组,然后按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理,通过引入流水线的概念,将待处理的指令组暂存于流水线中,使得将发生Bank冲突时,出现的剩余数据带宽分配给其余时间输入的指令使用,充分利用存储体资源,减少Bank冲突带来暂停时间和存储体性能衰减。
结合第一方面实施例的一种可能的实施方式,在按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之前,所述方法还包括:确定所述目标指令组存在Bank冲突。本申请实施例中,在按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之前,需要先确保目标指令组存在Bank冲突,以免将不存在Bank冲突的指令的顺序打乱。
结合第一方面实施例的一种可能的实施方式,所述方法还包括:当所述当前指令组位于最大流水线的位置,且所述当前指令组中存在Bank冲突的指令未处理完时,停止新的指令组输入所述流水线。本申请实施例中,当当前指令组位于最大流水线的位置,且当前指令组中存在Bank冲突的指令未处理完时,停止新的指令组输入该流水线中,以避免将位于流水线最前端的指令组溢出,从而导致运行出错。
结合第一方面实施例的一种可能的实施方式,在停止新的指令组输入所述流水线之后,所述方法还包括:当位于所述最大流水线位置的当前指令组中存在Bank冲突的指令全部处理完时,重新恢复指令组输入所述流水线。本申请实例中,通过监测流水线中的指令组的情况,当位于最大流水线位置的当前指令组中存在Bank冲突的指令全部处理完时,重新恢复指令组输入流水线,以保证流程能常规有序进行。
结合第一方面实施例的一种可能的实施方式,在确定处理所述目标指令时剩余的空闲Bank之前,所述方法还包括:将待处理指令包中的每一组操作指令按照优先级顺序依次输入所述流水线中。本申请实施例中,在确定处理目标指令时剩余的空闲Bank之前,将待处理指令包中的每一组操作指令按照优先级顺序依次输入该流水线中,为后续的优化流程做准备,同时在输入指令时,是按照优先级顺序输入的,以保证整个流程能顺利实施。
结合第一方面实施例的一种可能的实施方式,在按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之后,所述方法还包括:对各个Bank的输出结果进行排序,待得到同一指令组的全部输出结果时,将该指令组对应的各个输出结果输出。本申请实施例中,在在按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之后,对各个Bank的输出结果进行排序,待得到同一指令组的全部输出结果时,将该指令组对应的各个输出结果输出,以保证方案的可行性,为减少Bank冲突的不利影响提供支持。
第二方面,本申请实施例还提供了一种并行处理器,包括:存储体Bank、指令流水线单元、指令控制单元;指令流水线单元,用于暂存输入的指令组;指令控制单元,用于在对位于流水线最前端的当前指令组中存在Bank冲突的同一个Bank中的目标指令进行处理时,确定处理所述目标指令时剩余的空闲Bank;获取所述流水线中指令地址指向所述空闲Bank,且距离所述当前指令组距离最近的一个指令组,得到目标指令组;按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理。
结合第二方面实施例的一种可能的实施方式,所述指令控制单元,还用于在按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之前,确定所述目标指令组存在Bank冲突。
结合第二方面实施例的一种可能的实施方式,所述指令控制单元,还用于当所述当前指令组位于最大流水线的位置,且所述当前指令组中存在Bank冲突的指令未处理完时,停止新的指令组输入所述流水线。
结合第二方面实施例的一种可能的实施方式,所述指令控制单元,还用于在停止新的指令组输入所述流水线之后,当位于所述最大流水线位置的当前指令组中存在Bank冲突的指令全部处理完时,重新恢复指令组输入所述流水线。
结合第二方面实施例的一种可能的实施方式,所述指令控制单元,还用于在确定处理所述目标指令时剩余的空闲Bank之前,将待处理指令包中的每一组操作指令按照优先级顺序依次输入所述流水线中。
结合第二方面实施例的一种可能的实施方式,所述并行处理器还包括:数据流水线单元、重新排序单元;数据流水线单元,用于暂存各个Bank输出的数据;重新排序单元,用于根据所述指令控制单元的控制,对所述数据流水线单元中各个Bank的输出结果进行排序,待得到同一指令组的全部输出结果时,将该指令组对应的各个输出结果输出。
第三方面,本申请实施例还提供了一种电子设备,包括:上述第二方面实施例和/或结合第二方面实施例的任一种可能的实施方式提供的并行处理器。
本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例而了解。本申请的目的和其他优点可通过在所写的说明书以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本申请的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本申请的主旨。
图1示出了本申请实施例提供的一种并行处理器的架构结构示意图。
图2示出了本申请实施例提供的一种并行处理器的并行多端口存储结构的结构示意图。
图3示出了现有方案在处理表1所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图4示出了当pipe=2时,按照本申请实施例所示的一种存储体冲突优化方法在处理表1所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图5示出了当pipe=3时,按照本申请实施例所示的一种存储体冲突优化方法在处理表1所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图6示出了当pipe=4时,按照本申请实施例所示的一种存储体冲突优化方法在处理表1所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图7示出了当pipe=2时,按照本申请实施例所示的又一种存储体冲突优化方法在处理表1所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图8示出了当pipe=3时,按照本申请实施例所示的又一种存储体冲突优化方法在处理表1所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图9示出了当pipe=4时,按照本申请实施例所示的又一种存储体冲突优化方法在处理表1所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图10示出了现有方案在处理表2所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图11示出了当pipe=2时,按照本申请实施例所示的一种存储体冲突优化方法在处理表2所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图12示出了当pipe=3时,按照本申请实施例所示的一种存储体冲突优化方法在处理表2所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图13示出了当pipe=4时,按照本申请实施例所示的一种存储体冲突优化方法在处理表2所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图14示出了当pipe=2时,按照本申请实施例所示的又一种存储体冲突优化方法在处理表2所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图15示出了当pipe=3时,按照本申请实施例所示的又一种存储体冲突优化方法在处理表2所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图16示出了当pipe=4时,按照本申请实施例所示的又一种存储体冲突优化方法在处理表2所示的输入数据时,对应的时钟排布相关指令的分配流程示意图。
图17示出了本申请实施例提供的一种存储体冲突优化方法的流程示意图。
图18示出了本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中诸如“第一”、“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
再者,本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
为了便于理解本申请实施例提供的存储器冲突优化方法,下面以图1所示的并行处理器的架构为例,该并行处理器包括全局数据共享单元(Global Data Share,GDS)和4个相互独立的着色器引擎(Shader Engine,SE),分别为SE0、SE1、SE2和SE3。GDS分别与4个SE连接,用于完成各SE的数据共享。每个SE包含16个CU(Computing Unit),分别为CU0、CU1、……、CU14、CU15。每个CU包含本地数据共享单元(Local Data Share,LDS)和4个单指令多数据流(Single Instruction Multiple Data,SIMD)架构,分别为SIMD0、SIMD1、SIMD2、SIMD3。该LDS分别与4个SIMD连接,用于完成各SIMD间的数据共享。需要说明的是,上述示例的架构中仅示出了与本申请实施例提供的存储器冲突优化方法相关的部分,因此不能将这一简化的架构理解成是对并行处理器架构的限制。
其中,存储器也即Bank主要存在于GDS和LDS中,在GDS以及LDS中存在32个Bank,支持32个指令的同时操作。每个Bank为一个512*32bit大小的双端口静态随机存取存储器(Static Random Access Memory,SRAM),其作为让并行处理器各单元能够快速获得数据的存储介质,主要用于内部数据的交互,每个Bank支持32bit数据的读写操作,其读写操作的方式参见SRAM的操作方式。
其中,存储器冲突也即Bank冲突,主要发生于GDS或LDS中。正常情况下(未发生Bank冲突),指令组中的32个并行操作指令同时到达32个Bank进行并行处理,若发生Bank冲突,需要暂停整个流水,并通过分时操作对发生冲突的Bank进行独立的读写,最终将32个并行操作指令分时输出到Bank端,若最差情况下,冲突导致32个并行操作指令均指向同一个Bank,则需要32个clk(时钟)才能将32个指令分时输出到达Bank端。
本申请实施例,通过引入流水线(pipe)的概念,将待处理的指令组暂存于流水线中,在对发生Bank冲突的同一bank的不同地址进行读写操作时,也即在当前时刻对存在Bank冲突的指令进行处理时,将位于流水线中的其余指令组提前分配给剩余的空闲Bank,让剩余的空闲Bank提前对之后的其余指令组进行处理,以充分利用时钟周期,从而从整体上减少处理冲突指令所需的时间。相比于通常方法(增加Bank数量、采用双端口存储介质或是特殊的地址编码方式)而言,本申请实施例以另一种思路来降低Bank冲突造成的不利影响,提升了系统抵抗Bank冲突的能力,同时,本申请实施例提供的存储体冲突优化方法,能够与现有的方法共同使用,使得从不同的方面上减少了Bank冲突的影响。
本申请实施例通过在多端口存储体的前后增加适当流水线(pipe),使得将发生Bank冲突时,出现的剩余数据带宽分配给其余时间输入的指令使用,充分利用存储体的读写端口资源,减少Bank冲突带来stall时间和存储体性能衰减。同时,该方法能够与其余减少Bank冲突影响的方案,同时使用,进一步优化并行处理器中的存储体性能。
为了便于理解,下面将结合本申请实施例提供的并行处理器的并行多端口存储结构(该并行多端口存储结构属于LDS或GDS中的一部分)进行说明,如图2所示,该并行多端口存储结构包括:指令流水线单元(Instruction pipe)、指令排序单元(Instructionreorder)、指令映射单元(Instruction crossbar)、存储体(Bank)、指令控制单元(Instruction reorder control)、数据映射单元(Data_out crossbar)、数据流水线单元(Data_out pipe)、数据排序单元(Data_out reorder)。
其中,指令控制单元(Instruction reorder control):用于完成对各指令组中地址和操作信息的汇总控制;完成对各指令组是否存在Bank冲突的判断,并将处理方案发送给指令排序单元(Instruction reorder)进行相关处理顺序的调整;并在输出端通过监控数据流水线单元(Data_out pipe)中的数据,结合前期指令和数据排序的情况,对输出数据的顺序进行相关判断,并将判断结果输送给数据排序单元(Data_out reorder),从而完成最终的数据输出。
在指令的输入端的控制逻辑包括:
指令流水线单元(Instruction pipe):用于暂存输入的指令组,作为暂存指令的pipe,其pipe的级数为T,T的大小决定了能够同时纳入考量的指令数目。基于统计学基本概念可知,在较长时间域且无特定读写目的的情况下,对各个Bank及Bank内部各地址读写的概率相同。因此,只要能够获取足够多的指令信息,就能有效平衡各Bank上的读写请求数目,从而达到减少Bank冲突发生导致的不良影响的效果。显然T越大,同时纳入考量的指令越多,Bank冲突导致的性能衰减愈能得到改善。
指令排序单元(Instruction reorder):根据指令控制单元发送的控制指令,对不同pipe中存储的指令以及相关数据进行重新排序和派发,减少Bank冲突的影响。
指令映射单元(Instruction crossbar):用于完成从指令的来源(crawler)到指令运行的目的地Bank的映射,映射的依据来源于指令中操作地址中对应Bank的地址位。
在数据的输出端的控制逻辑包括:
数据映射单元(Data_out crossbar):与指令映射单元(Instruction crossbar)的功能对应,用于完成指令运行的目的地Bank到指令的来源(crawler)的映射,使得输出的数据能够和输入的指令的位置一一对应。
数据流水线单元(Data_out pipe):用于暂存各个Bank输出的数据,暂存数据排序单元的输出,此时虽然位于数据排序单元中的数据已经和指令来源(crawler)一一对应,但是由于发生Bank冲突,导致同一个指令组的输出数据在时域上发生偏差,因此需要重新排序,暂存的相关数据由指令控制单元(Instruction reorder control)进行监控,并通过数据排序单元(Data_out reorder)进行读取操作。
数据排序单元(Data_out reorder):根据指令控制单元提供的信息,对数据流水线单元中的数据信息进行排序,待得到同一指令组的全部输出结果时,将该指令组对应的各个输出结果输出,从而完成最终的数据输出。
由于上述的数据映射单元、数据流水线单元以及数据排序单元仅在对Bank进行读取操作时,才会存在输出,故与输入端分开论述。
在介绍了各个模块的功能作用后,下面将对本申请实施例提供的存储体冲突优化方法的基本工作流程进行说明。
将待处理指令包中的每一组操作指令按照优先级顺序依次输入流水线中,其中,只有进入流水的指令数据才会进行相关的判断;指令控制单元依次对位于流水线最前端(也即最靠近输出一端)的指令组的Bank冲突情况进行判断,若不存在Bank冲突,则按照现有的逻辑常规运行;若存在Bank冲突,则指令控制单元在对位于流水线最前端的当前指令组中存在Bank冲突的同一个Bank中的目标指令进行处理时,确定处理目标指令时剩余的空闲Bank,并从流水线中获取指令地址指向空闲Bank,且距离当前指令组距离最近的一指令组,得到目标指令组,然后按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理。
通过在对位于流水线最前端的当前指令组中存在Bank冲突的目标指令进行处理时,将出现的剩余数据带宽分配给其余时间输入的指令使用,充分利用存储体的读写端口资源,减少Bank冲突带来stall时间和存储体性能衰减。在将出现的剩余数据带宽分配给其余时间输入的指令使用时,依据以下规则对整个pipe中的指令进行调整:只有进入pipe中的指令组才进行相关处理;在处理时按照优先级顺序优先对先进入流水线的指令组进行处理,同一个指令组中的N条指令中,序号越小的,优先级越高。
当对Bank进行读取操作时,考虑到在指令组不存在Bank冲突时,则在输出阶段无需进行重新排序,若将不存在Bank冲突的指令打乱,提前分配给空闲Bank进行处理,在输出阶段需要进行重新排序,因此,作为一种实施方式,指令控制单元在按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之前,还需要先确定目标指令组存在Bank冲突,若目标指令组不存在Bank冲突,则不将目标指令组打乱,此时对目标指令的处理流程与现有处理流程相同。
其中,在处理的过程中,指令控制单元实时对流水线中的指令组进行监控,当当前指令组位于最大流水线(此时,进入流水线中的指令组达到流水线的最大容纳量)的位置,且当前指令组中存在Bank冲突的指令未处理完时,指令控制单元还用于输出stall信号使系统停止新的指令组输入该流水线。在停止新的指令组输入流水线之后,指令控制单元监控到当位于最大流水线位置的当前指令组中存在Bank冲突的指令全部处理完时,重新恢复指令组输入流水线。
当对Bank进行读取操作时,指令控制单元还用于根据前期指令和数据排序分配情况,控制重新排序单元,以使重新排序单元根据指令控制单元的控制,对数据流水线单元中各个Bank的输出结果进行排序,待得到同一指令组的全部输出结果时,将该指令组对应的各个输出结果输出。
为了便于理解上述过程,下面将结合例子进行说明,示例中以一个Bank总数为32的多Bank存储系统进行操作的过程进行说明,并分别对不同级数的pipe对应的处理过程进行分析,假设待处理指令包的输入数据如表1所示。
表1
num crawler0 Crawler1 crawler2 crawler3 crawler4 crawler5 crawler6 Crawler31
cmd0 A0_0 A1_1 A2_2 A3_3 A4_4 A5_5 A6_6 A31_31
cmd1 B0_0 B0_1 B2_2 B3_3 B4_4 B5_5 B6_6 B31_31
cmd2 C1_0 C1_1 C2_2 C3_3 C4_4 C5_5 C6_6 C31_31
cmd3 D0_0 D0_1 D0_2 D0_3 D0_4 D0_5 D6_6 D31_31
cmd4 E1_0 E1_1 E1_2 E1_3 E1_4 E1_5 E6_6 E31_31
cmd5 F2_0 F2_1 F2_2 F2_3 F2_4 F2_5 F6_6 F31_31
cmd6 G3_0 G3_1 G3_2 G3_3 G3_4 G3_5 G6_6 G31_31
cmd7 H0_0 H1_1 H2_2 H3_3 H4_4 H5_5 H6_6 H31_31
其中cmd0~cmd7表示需要输入的需要处理的指令组,cmd0最早输入,cmd7最晚输入。crawler0~crawler31表示指令的来源。其中,需要说明的是,由于示例的Bank总数为32,因此表中示例的每一个指令组中均包含32个指令为满指令情况,一种实施方式下,指令组中包含的指令数也可以小于32。
其中,每个指令数据以XY_Z的形式进行编码,以便于找出对应关系。X对应数据来源的指令序号,A对应最早输入的cmd0,H对应最晚输入的cmd7;Y对应指令需要运行的目的地Bank,0表示最终该指令在Bank0中运行,31表示最终该指令在Bank31中运行;Z表示指令来源,0表示来源于crawler0,31表示来源于crawler31。在分配时,当Y=Z时,对应crawler分配给对应的bank,当两者不等时,需要分配到其余bank中。
当同一时刻存在多条指令的地址均指向同一个Bank,就会发生Bank冲突,例如,在cmd1中B0_0和B0_1同时到达,且都会运行到Bank0中,就会发生Bank冲突(当然存在特殊情况:当两个操作都为读,且对应同一地址,此时不发生Bank冲突;两个操作都为写,且对应同一地址,如果写入数据相同,不发生Bank冲突;如果写入数据不同,认为发生错误)。本申请实施例是针对发生Bank冲突的优化方法,因此对于存在的特殊情况,不做考虑。
当pipe=1时,对应于现有的一般方案,按照时钟排布相关指令的分配,如图3所示。图3中的pipe0表示即将输入pipe1的指令组,pipe1为输入pipe中的指令。从中可以看出,由于指令组A不存在Bank冲突,只需要一个时刻就能处理完,由于指令组B存在Bank冲突,即B0_0和B0_1同时指向Bank0,根据优先级顺序(同一指令组中,序号越小,优先级越高)B0_0会和该指令组中其余未发生冲突的指令在同一时刻运行,而B0_1会延后一个时刻运行,因此需要2个时刻。指令组C与指令组B类似,指令组D中由于D0_0、D0_1、D0_2、D0_3、D0_4、D0_5同时指向Bank0,根据优先级顺序,D0_0会和该指令组中其余未发生冲突的指令在同一时刻运行,而D0_1、D0_2、D0_3、D0_4、D0_5会依次延后一个时刻运行,因此需要6个时刻。指令组E和指令组F与指令组D类似。
下面将分两种情况对按照本申请实施例所示的存储体冲突优化方法对表1所示的指令包进行处理时的流程进行说明,第一种:在按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理时,需要确保目标指令组存在Bank冲突,若目标指令组不存在Bank冲突,则按照常规的处理流程处理。第二种:无论目标指令组是否存在Bank冲突,都会按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理。
下面将对在相同输入(表1所示的指令)下的第一种情况进行说明:
当pipe=2时,按照本申请实施例所示的存储体冲突优化方法,对应相同的输入下,其时钟排布相关指令的分配,如图4所示,可以看出,stall时间大大减小,总时间缩小为18个clk。pipe0表示即将输入pipe1的指令组,当流水线的级数为2级时,能同时容纳2条指令组。在clk2时刻,在对指令组B中存在Bank冲突的B0_0进行处理时,此时剩余空闲Bank为Bank1,由于此时流水线中只有指令组B,因此按照常规的处理流程进行处理。在clk3时刻,在对指令组B中存在Bank冲突的B0_1进行处理时,此时,剩余的空闲Bank为Bank1~Bank31,此时指令组C已经进入流水线,指令地址指向剩余的空闲Bank,且距离指令组B最近的一组指令为指令组C,因此目标指令组为指令组C。由于指令组C中C1_0和C1_1同时指向Bank1,由于C1_0的优先级高于C1_1,因此按照优先级顺序将指令组C中的指令地址指向Bank1的指令分配给Bank1时,优选将C1_0分配给Bank1。其中,在分配时,会将指令分配给该指令指向的目的Bank,例如,C1_1指向的目的Bank为目的Bank1,因此会将C1_1分给Bank1,同理,C2_2指向的目的Bank为目的Bank2,因此会将C2_2分给Bank2。在clk4时刻,在对指令组C中存在Bank冲突的C1_1进行处理时,此时,剩余的空闲Bank为Bank0、Bank2~Bank31,此时指令组D已经进入流水线,指令地址指向剩余的空闲Bank,且距离指令组C最近的一组指令为指令组D,因此目标指令组为指令组D,指令组D中由于D0_0、D0_1、D0_2、D0_3、D0_4、D0_5同时指向Bank0,根据优先级顺序,D0_0的优先级最高,因此按照优先级顺序将指令组D中的指令地址指向Bank0的指令分配给Bank0时优先将D0_0分配给Bank0。在clk5时刻,在对指令组D中存在Bank冲突的D0_1进行处理时,此时剩余的空闲Bank为Bank1~Bank31,目标指令组为指令组E,因此按照优先级顺序将指令组E中的指令分配给与该指令地址对应的空闲Bank(Bank1~Bank31)进行处理,此时,由于指令组D位于最大流水线的位置,其当前指令组中存在Bank冲突的指令(D0_2、D0_3、D0_4、D0_5)未处理完时,停止新的指令组输入流水线,系统进入stall状态,此时指令组E之后的指令组还未进入流水线中,因此在clk6时刻,对D 0_2进行处理时,此时剩余的空闲Bank为Bank2~Bank31,指令地址指向剩余的空闲Bank,且距离指令组D最近的一组指令为指令组F,由于指令组E之后的指令组还未进入流水线中,因此无法获取到后续的指令组,此时就按照常规的处理流程进行处理。当位于最大流水线位置的指令组D中存在Bank冲突的指令全部处理完时,重新恢复指令组输入流水线,对照图4中,在clk9时刻,重新恢复指令组输入流水线,在clk10时刻,在对E1_5进行处理时,将按照优先级顺序将指令组F中的指令分配给与该指令地址对应的空闲Bank进行处理。在clk11时刻,在对F 2_1进行处理时,按照优先级顺序将指令组G中的指令分配给与该指令地址对应的空闲Bank进行处理,此时,由于指令组F位于最大流水线的位置,其当前指令组中存在Bank冲突的指令(F 2_2、F2_3、F2_4、F2_5)未处理完时,停止新的指令组输入流水线,系统进入stall状态。在clk15时刻,重新恢复指令组输入流水线,在clk16时刻,在对G3_5进行处理时,由于指令组H不存在Bank冲突,因此不将下一时刻的指令组H提前到clk16进行处理。
当pipe=3时(pipe=3,表示能同时容纳3条指令组),按照本申请实施例所示的存储体冲突优化方法,对应相同的输入(表1所示的指令)下,其时钟排布相关指令的分配,如图5所示,可以看出,stall时间进一步减小,总时间缩小为17个clk。其实现原理与图4一样,此处不再说明。
当pipe=4时(pipe=4,表示能同时容纳4条指令组),按照本申请实施例所示的存储体冲突优化方法,对应相同的输入(表1所示的指令)下,其时钟排布相关指令的分配,如图6所示,可以看出,stall时间进一步减小,总时间缩小为14个clk。其中,在clk6时刻,对D0_2进行处理时,对应的空闲Bank为Bank2~Bank31,此时指令地址指向剩余的空闲Bank,且距离指令组D最近的一组指令为指令组F,并且指令组F已经进入流水线中因此目标指令组为指令组F,将按照优先级顺序将指令组F中的指令分配给与该指令地址对应的空闲Bank(Bank2~Bank31)进行处理。指令组F中由于F2_0、F2_1、F2_2、F2_3、F2_4、F2_5同时指向Bank2,根据优先级顺序,F2_0的优先级最高,因此按照优先级顺序将指令组F中的指令地址指向Bank2的指令分配给Bank2时,优先将F2_0分配给Bank2。在clk7时刻,对D0_3进行处理时,对应的空闲Bank为Bank3~Bank31,此时指令地址指向剩余的空闲Bank,且距离指令组D最近的一组指令为指令组G,并且指令组G已经进入流水线中,因此目标指令组为指令组G,将按照优先级顺序将指令组G中的指令分配给与该指令地址对应的空闲Bank(Bank3~Bank31)进行处理,由于指令组D位于最大流水线的位置,其当前指令组中存在Bank冲突的指令(D0_4、D0_5)未处理完时,停止新的指令组输入流水线,系统进入stall状态。在clk8时刻,对D0_4进行处理时,此时指令地址指向剩余的空闲Bank(Bank4~Bank31),且距离指令组D最近的一组指令为指令组H,因此目标指令组为指令组H,由于流水线最多能同时容纳4条指令组,因此指令组H还未进入流水线,此时,则按照常规处理流程处理。
其中,通过图3-图6可以看出,当pipe=1时,处理完表1中的指令包需要31个clk;当pipe=2时,相同的输入下,只需18个clk;当pipe=3时,相同的输入下,只需17个clk;当pipe=4时,相同的输入下,只需14个clk。显然pipe的级数越大,同时纳入考量的指令越多,Bank冲突导致的性能衰减愈能得到改善。
下面将对在相同输入(表1所示的指令)下的第二种情况进行说明:
当pipe=2时,按照本申请实施例所示的存储体冲突优化方法,对应相同的输入(表1所示的指令)下,其时钟排布相关指令的分配,如图7所示。与图4的区别在于:在clk16时刻,在对G3_5进行处理时,此时,剩余的空闲Bank为Bank0~Bank2、Bank4~Bank31,此时即使指令组H不存在Bank冲突,也会按照优先级顺序将指令组H中的指令分配给与该指令地址对应的空闲Bank进行处理。
当pipe=3时,按照本申请实施例所示的存储体冲突优化方法,对应相同的输入(表1所示的指令)下,其时钟排布相关指令的分配,如图8所示。与图5的区别在于:在clk11时刻,在对G3_1进行处理时,此时,剩余的空闲Bank为Bank0、Bank1、Bank4~Bank31,此时指令地址指向剩余的空闲Bank,且距离指令组G最近的一组指令为指令组H,且指令组H已经进入流水线,此时,即使指令组H不存在Bank冲突,也会按照优先级顺序将指令组H中的指令分配给与该指令地址对应的空闲Bank进行处理。
当pipe=4时,按照本申请实施例所示的存储体冲突优化方法,对应相同的输入(表1所示的指令)下,其时钟排布相关指令的分配,如图8所示。与图6的区别在于:在clk10时刻,在对G3_3进行处理时,此时,剩余的空闲Bank为Bank0、Bank4~Bank31,此时即使指令组H不存在Bank冲突,也会按照优先级顺序将指令组H中的指令分配给与该指令地址对应的空闲Bank进行处理。
其中,通过图3、图7-图9可以看出,当pipe=1时,处理完表1中的指令包需要31个clk;当pipe=2时,相同的输入下,只需18个clk;当pipe=3时,相同的输入下,只需17个clk;当pipe=4时,相同的输入下,只需14个clk。显然pipe的级数越大,同时纳入考量的指令越多,Bank冲突导致的性能衰减愈能得到改善。下面将结合又一种实施例下,分别对不同级数的pipe对应的处理过程进行分析,假设待处理指令包的输入数据如表2所示。
表2
num crawler0 crawler1 crawler2 crawler3 crawler4 crawler5 crawler6 Crawler31
cmd0 A0_0 A1_1 A2_2 A3_3 A4_4 A5_5 A6_6 A31_31
cmd1 B0_0 B0_1 B2_2 B3_3 B4_4 B5_5 B6_6 B31_31
cmd2 C0_0 C1_1 C1_2 C3_3 C4_4 C5_5 C6_6 C31_31
cmd3 D0_0 D0_1 D0_2 D0_3 D0_4 D0_5 D6_6 D31_31
cmd4 E0_0 E1_1 E2_2 E3_3 E4_4 E5_5 E6_6 E31_31
cmd5 F2_0 F2_1 F2_2 F2_3 F2_4 F2_5 F6_6 F31_31
cmd6 G3_0 G3_1 G3_2 G3_3 G3_4 G3_5 G6_6 G31_31
cmd7 H0_0 H1_1 H2_2 H3_3 H4_4 H5_5 H6_6 H31_31
当pipe=1时,对应于现有的一般方案,按照时钟排布相关指令的分配,如图10所示,处理完表2所示的指令需要26个clk。
下面将分两种情况对按照本申请实施例所示的存储体冲突优化方法对表2所示的指令包进行处理时的流程进行说明,第一种:在按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理时,需要确保目标指令组存在Bank冲突,若目标指令组不存在Bank冲突,则按照常规的处理流程处理。第二种:无论目标指令组是否存在Bank冲突,都会按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理。
下面将对在相同输入(表2所示的指令)下的第一种情况进行说明:
当pipe=2时,按照本申请实施例所示的存储体冲突优化方法,对应相同的输入下(表2所示的指令),其时钟排布相关指令的分配,如图11所示,可以看出,stall时间大大减小,总时间缩小为19个clk。在clk2时刻,在对指令组B中存在Bank冲突的B0_0进行处理时,此时剩余空闲Bank为Bank1,由于此时流水线中只有指令组B,因此按照常规的处理流程进行处理。在clk3时刻,对指令组B中存在Bank冲突的B0_1进行处理时,此时,剩余的空闲Bank为Bank1~Bank31,此时指令组C已经进入流水线,指令地址指向剩余的空闲Bank,且距离指令组B最近的一组指令为指令组C因此目标指令组为指令组C。由于指令组C中C1_1和C1_2同时指向Bank1,由于C1_1的优先级高于C1_2,因此按照优先级顺序将指令组C中的指令地址指向Bank1的指令分配给Bank1时,优选将C1_1分配给Bank1。其中,在分配时,仅将指令组C中对应空闲Bank的指令分给与之对应的Bank,由于Bank0不空闲,因此C0_0会滞后。在clk4时刻,在对指令组C中存在Bank冲突的C1_2进行处理时,此时,剩余的空闲Bank为Bank2~Bank31,由于C0_0指向Bank0,因此指令组D中由于D0_0、D0_1、D0_2、D0_3、D0_4、D0_5会依次顺延。在clk5时刻,在对指令组D中存在Bank冲突的D0_0进行处理时,剩余的空闲Bank为Bank1~Bank31,指令地址指向剩余的空闲Bank,且距离指令组D最近的一组指令为指令组E,由于指令组E不存在Bank冲突,因此,对D0_0按照常规处理流程进行处理,同理,对D0_1、D0_2、D0_3、D0_4、D0_5的处理类似。此时,由于指令组D位于最大流水线的位置,其当前指令组中存在Bank冲突的指令(D0_1、D 0_2、D0_3、D0_4、D0_5)未处理完时,停止新的指令组输入流水线,系统进入stall状态。当位于最大流水线位置的指令组D中存在Bank冲突的指令全部处理完时,重新恢复指令组输入流水线,对照图11中,在clk10时刻,重新恢复指令组输入流水线。在clk11时刻,由于指令组E不存在冲突,则按照常规处理流程进行处理,在clk12时刻,在对指令组F中存在冲突的目标指令(F2_0)进行处理时,此时剩余的空闲Bank为Bank0、Bank1、Bank3~Bank5,由于指令地址指向剩余的空闲Bank,且距离指令组F最近的一组指令为指令组G,且已经进入流水线,此时,按照优先级顺序将指令组G中的指令分配给与该指令地址对应的空闲Bank进行处理,由于指令组G中G3_0、G3_1、G3_2、G3_3、G3_4、G3_5均指向Bank3,依次按照优先级顺序,优先将G3_0分配给Bank3,由于Bank6~Bank31此时并不空闲,因此G6_6~G31_31滞后,此时,由于指令组F位于最大流水线的位置,其当前指令组中存在Bank冲突的指令(F2_1、F 2_2、F2_3、F2_4、F2_5)未处理完时,停止新的指令组输入流水线,系统进入stall状态。。在clk13时刻,在对F2_1进行处理时,此时剩余的空闲Bank为Bank0、Bank1、Bank4~Bank5,由于指令地址指向剩余的空闲Bank,且距离指令组F最近的一组指令(指令组H)还未进入流水线,因此,按照常规处理流程进行处理即可。同理,对F 2_2、F2_3、F2_4、F2_5的处理类似。在clk18时刻,重新恢复指令组输入流水线。
当pipe=3时(pipe=3,表示能同时容纳3条指令组),按照本申请实施例所示的存储体冲突优化方法,对应相同的输入下(表2所示的指令),其时钟排布相关指令的分配,如图12所示。其实现原理与图11一样,此处不再说明。其中,区别在于,在clk14时刻,在对指令组F中存在冲突的目标指令(F2_2)进行处理时,此时剩余的空闲Bank为Bank0、Bank1、Bank4~Bank31,由于指令地址指向剩余的空闲Bank,且距离指令组F最近的一组指令为指令组H,且已经进入流水线,但是由于指令组H不存在Bank冲突,因此在clk14时刻,在对F2_2进行处理,则按照常规处理流程进行处理。
当pipe=4时(pipe=4,表示能同时容纳4条指令组),按照本申请实施例所示的存储体冲突优化方法,对应相同的输入下(表2所示的指令),其时钟排布相关指令的分配,如图13所示。其实现原理与图11一样,此处不再说明。
其中,通过图10-图13可以看出,当pipe=1时,处理完表2中的指令包需要26个clk,同一时刻流水线所能容纳的最大指令组达到一个;当pipe=2时,相同的输入下,只需19个clk,同一时刻流水线所能容纳的最大指令组只有2个;当pipe=3时,相同的输入下,只需19个clk,同一时刻流水线所能容纳的最大指令组达到3个;当pipe=4时,相同的输入下,只需19个clk,同一时刻流水线所能容纳的最大指令组达到4个。显然pipe的级数越大,同时纳入考量的指令越多。
下面将对在相同输入(表2所示的指令)下的第二种情况进行说明:
当pipe=2时,按照本申请实施例所示的存储体冲突优化方法,对应相同的输入(表2所示的指令)下,其时钟排布相关指令的分配,如图14所示。其与图11的主要区别在于:在clk5时刻,在对D0_0进行处理时,此时即使指令组E不存在Bank冲突,也会按照优先级顺序将指令组E中的指令分配给与该指令地址对应的空闲Bank进行处理,以及在clk17时刻,在对G3_5进行处理时,此时即使指令组H不存在Bank冲突,也会按照优先级顺序将指令组H中的指令分配给与该指令地址对应的空闲Bank进行处理。
当pipe=3时,按照本申请实施例所示的存储体冲突优化方法,对应相同的输入(表2所示的指令)下,其时钟排布相关指令的分配,如图15所示。与图12的主要区别在于:在clk5时刻,在对D0_0进行处理时,此时即使指令组E不存在Bank冲突,也会按照优先级顺序将指令组E中的指令分配给与该指令地址对应的空闲Bank进行处理。由于在clk5时刻,提前将指令组E中的指令分配给与该指令地址对应的空闲Bank进行处理,所以导致在clk6时刻,可以提前将指令组F中的指令分配给与该指令地址对应的空闲Bank进行处理。以及在clk12时刻,在对G3_2进行处理时,此时即使指令组H不存在Bank冲突,也会按照优先级顺序将指令组H中的指令分配给与该指令地址对应的空闲Bank进行处理。
当pipe=4时,按照本申请实施例所示的存储体冲突优化方法,对应相同的输入(表2所示的指令)下,其时钟排布相关指令的分配,如图16所示。与图13的主要区别在于:在clk5时刻,在对D0_0进行处理时,此时即使指令组E不存在Bank冲突,也会按照优先级顺序将指令组E中的指令分配给与该指令地址对应的空闲Bank进行处理。由于在clk5时刻,提前将指令组E中的指令分配给与该指令地址对应的空闲Bank进行处理,所以导致在clk6时刻,可以提前将指令组F中的指令分配给与该指令地址对应的空闲Bank进行处理。以及在clk7时刻,在对D0_2进行处理时,可以提前将指令组G中的指令分配给与该指令地址对应的空闲Bank进行处理。
以及在clk11时刻,在对G3_4进行处理时,此时即使指令组H不存在Bank冲突,也会按照优先级顺序将指令组H中的指令分配给与该指令地址对应的空闲Bank进行处理。
其中,通过图10、图14-图16可以看出,当pipe=1时,处理完表1中的指令包需要26个clk;当pipe=2时,相同的输入下,只需19个clk;当pipe=3时,相同的输入下,只需17个clk;当pipe=4时,相同的输入下,只需14个clk。显然pipe的级数越大,同时纳入考量的指令越多,Bank冲突导致的性能衰减愈能得到改善。
其中,图3-图16中右侧用灰度标记的部分为由于Bank冲突导致的stall状态。
结合表1对指令映射单元完成从指令的来源(crawler)到指令运行的目的地Bank的映射的过程进行说明,常规情况下,crawler的序号与Bank的序号一一对应,crawler0对应crawler0,而表1中,B0_1来源于crawler1,但是其指向目的crawler0,因此需要指令映射单元来完成这一映射。同理,在数据输出时,需要将Bank0输出的B0_1对应的数据与crawler1对应,而不是与crawler0对应,因此,需要数据映射单元来完成这一映射。
以下将结合具体例子对数据排序单元的排序过程进行说明,由于发生Bank冲突,导致同一个指令组的输出数据在时域上发生偏差,因此需要重新排序,如图6所示,以指令组D为例,由于指令组D发生Bank冲突,使得指令组D的数据跨越了6个时刻(clk4到clk9),当数据流水线单元暂存了从clk4到clk9时刻各个Bank的输出数据时,数据排序单元便可得到指令组D的全部输出结果,此时,便将指令组D的全部输出结果输出。
在介绍完图1所示的各模块在对存储体冲突优化的过程中所起的作用后,下面将结合图17,对本申请实施例提供的存储体冲突优化方法进行说明。
步骤S101:在对位于流水线最前端的当前指令组中存在Bank冲突的同一个Bank中的目标指令进行处理时,确定处理所述目标指令时剩余的空闲Bank。
其中,在确定处理所述目标指令时剩余的空闲Bank之前,需要将待处理指令包中的每一组操作指令按照优先级顺序依次输入所述流水线中。只有位于流水线中的指令组才会进行相应的处理及判断。
步骤S102:获取所述流水线中指令地址指向所述空闲Bank,且距离所述当前指令组距离最近的一个指令组,得到目标指令组。
步骤S103:按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理。
作为一种实施方式下,在从流水线中获取到目标指令组后,在按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之前,需要先确定目标指令组存在Bank冲突。在该种是实施方式下,若目标指令组不存在Bank冲突,则按照常规处理流程处理目标指令。
其中,在整个处理过程中,只要当位于流水线最前端的当前指令组,达到最大流水线的位置,且当前指令组中存在Bank冲突的指令未处理完时,系统才停止新的指令组输入该流水线。在停止新的指令组输入流水线之后,当监测到位于最大流水线位置的当前指令组中存在Bank冲突的指令全部处理完时,便重新恢复指令组输入流水线。
此外,一种实施方式下,当对Bank进行读取操作时,在按照优先级顺序将目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之后,所述方法还包括:对各个Bank的输出结果进行排序,待得到同一指令组的全部输出结果时,将该指令组对应的各个输出结果输出。
本申请实施例所提供的方法,其实现原理及产生的技术效果和前述装置实施例相同,为简要描述,方法实施例部分未提及之处,可参考前述装置实施例中相应内容。
如图18所示,图18示出了本申请实施例提供的一种的电子设备100的结构框图。所述电子设备100包括:收发器110、存储器120、通讯总线130以及并行处理器140。
所述收发器110、所述存储器120、并行处理器140各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线130或信号线实现电性连接。其中,收发器110用于收发数据。存储器120用于存储计算机程序,该计算机程序包括至少一个可以软件或固件(firmware)的形式存储于所述存储器120中或固化在所述电子设备100的操作系统(operating system,OS)中的软件功能模块。所述并行处理器140,用于执行存储器120中存储的可执行软件功能模块或计算机程序。例如,并行处理器140,用于在对位于流水线最前端的当前指令组中存在Bank冲突的同一个Bank中的目标指令进行处理时,确定处理所述目标指令时剩余的空闲Bank;获取所述流水线中指令地址指向所述空闲Bank,且距离所述当前指令组距离最近的一个指令组,得到目标指令组;按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理。
其中,存储器120可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
并行处理器140可能是一种集成电路芯片,具有信号的处理能力。上述的并行处理器可以是图形处理器GPU、或其他AI并行处理器。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。
其中,上述的电子设备100,包括但不限于智能手机、平板、计算机、服务器等。
本申请实施例还提供了一种非易失性计算机可读取存储介质(以下简称存储介质),该存储介质上存储有计算机程序,该计算机程序被计算机如上述的电子设备100运行时,执行上述所示的存储体冲突优化方法。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,笔记本电脑,服务器,或者电子设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

Claims (13)

1.一种存储体冲突优化方法,其特征在于,包括:
在对位于流水线最前端的当前指令组中存在Bank冲突的同一个Bank中的目标指令进行处理时,确定处理所述目标指令时剩余的空闲Bank;所述存在Bank冲突的同一个Bank中的目标指令为,指令地址指向存在Bank冲突的同一个Bank的指令;
获取所述流水线中指令地址指向所述空闲Bank,且与所述当前指令组之间的距离最近的一个指令组,得到目标指令组;
按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理。
2.根据权利要求1所述的方法,其特征在于,在按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之前,所述方法还包括:
确定所述目标指令组存在Bank冲突。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述当前指令组位于最大流水线的位置,且所述当前指令组中存在Bank冲突的指令未处理完时,停止新的指令组输入所述流水线;所述最大流水线的位置为:所述流水线的最大容纳量处的位置。
4.根据权利要求3所述的方法,其特征在于,在停止新的指令组输入所述流水线之后,所述方法还包括:
当位于所述最大流水线的位置的当前指令组中存在Bank冲突的指令全部处理完时,重新恢复指令组输入所述流水线。
5.根据权利要求1所述的方法,其特征在于,在确定处理所述目标指令时剩余的空闲Bank之前,所述方法还包括:
将待处理指令包中的每一组操作指令按照优先级顺序依次输入所述流水线中。
6.根据权利要求1-5中任一项所述的方法,其特征在于,在按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之后,所述方法还包括:
对各个Bank的输出结果进行排序,待得到同一指令组的全部输出结果时,将该指令组对应的各个输出结果输出。
7.一种并行处理器,其特征在于,包括:
存储体Bank;
指令流水线单元,用于暂存输入的指令组;
指令控制单元,用于在对位于流水线最前端的当前指令组中存在Bank冲突的同一个Bank中的目标指令进行处理时,确定处理所述目标指令时剩余的空闲Bank;获取所述流水线中指令地址指向所述空闲Bank,且与所述当前指令组之间的距离最近的一个指令组,得到目标指令组;按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理;其中:所述存在Bank冲突的同一个Bank中的目标指令为,指令地址指向存在Bank冲突的同一个Bank的指令。
8.根据权利要求7所述的并行处理器,其特征在于,所述指令控制单元,还用于在按照优先级顺序将所述目标指令组中的指令分配给与该指令地址对应的空闲Bank进行处理之前,确定所述目标指令组存在Bank冲突。
9.根据权利要求7所述的并行处理器,其特征在于,所述指令控制单元,还用于当所述当前指令组位于最大流水线的位置,且所述当前指令组中存在Bank冲突的指令未处理完时,停止新的指令组输入所述流水线;所述最大流水线的位置为:所述流水线的最大容纳量处的位置。
10.根据权利要求9所述的并行处理器,其特征在于,所述指令控制单元,还用于在停止新的指令组输入所述流水线之后,当位于所述最大流水线的位置的当前指令组中存在Bank冲突的指令全部处理完时,重新恢复指令组输入所述流水线。
11.根据权利要求7所述的并行处理器,其特征在于,所述指令控制单元,还用于在确定处理所述目标指令时剩余的空闲Bank之前,将待处理指令包中的每一组操作指令按照优先级顺序依次输入所述流水线中。
12.根据权利要求7-11中任一项所述的并行处理器,其特征在于,所述并行处理器还包括:
数据流水线单元,用于暂存各个Bank输出的数据;
重新排序单元,用于根据所述指令控制单元的控制,对所述数据流水线单元中各个Bank的输出结果进行排序,待得到同一指令组的全部输出结果时,将该指令组对应的各个输出结果输出。
13.一种电子设备,其特征在于,包括:如权利要求7-12中任一项所述的并行处理器。
CN202010527915.3A 2020-06-11 2020-06-11 一种存储体冲突优化方法、并行处理器及电子设备 Active CN111857831B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010527915.3A CN111857831B (zh) 2020-06-11 2020-06-11 一种存储体冲突优化方法、并行处理器及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010527915.3A CN111857831B (zh) 2020-06-11 2020-06-11 一种存储体冲突优化方法、并行处理器及电子设备

Publications (2)

Publication Number Publication Date
CN111857831A CN111857831A (zh) 2020-10-30
CN111857831B true CN111857831B (zh) 2021-07-20

Family

ID=72987182

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010527915.3A Active CN111857831B (zh) 2020-06-11 2020-06-11 一种存储体冲突优化方法、并行处理器及电子设备

Country Status (1)

Country Link
CN (1) CN111857831B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113488099B (zh) * 2021-06-11 2024-06-25 青岛本原微电子有限公司 Dsp寄存器访问冲突处理方法
CN115052042B (zh) * 2022-06-07 2023-05-26 成都北中网芯科技有限公司 一种高性能多通道共享缓存的实现方法
CN115640138B (zh) * 2022-11-25 2023-03-21 摩尔线程智能科技(北京)有限责任公司 用于光线追踪调度的方法和装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101290613A (zh) * 2007-04-16 2008-10-22 卓胜微电子(上海)有限公司 Fft处理器的数据存储系统和方法
CN101655784A (zh) * 2008-08-21 2010-02-24 株式会社东芝 流水线操作处理器和控制系统
CN102375805A (zh) * 2011-10-31 2012-03-14 中国人民解放军国防科学技术大学 面向向量处理器的基于simd的fft并行计算方法
CN102981807A (zh) * 2012-11-08 2013-03-20 北京大学 一种基于cuda并行环境的gpu程序优化方法
CN104391676A (zh) * 2014-11-10 2015-03-04 中国航天科技集团公司第九研究院第七七一研究所 一种低成本高带宽的微处理器取指方法及其取指结构
CN104603795A (zh) * 2012-09-28 2015-05-06 英特尔公司 用于实现用于用户级线程的即时上下文切换的新指令和高效的微架构
US9519944B2 (en) * 2014-09-02 2016-12-13 Apple Inc. Pipeline dependency resolution
CN109710309A (zh) * 2018-12-24 2019-05-03 安谋科技(中国)有限公司 减少存储体冲突的方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10235176B2 (en) * 2015-12-17 2019-03-19 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US20180081806A1 (en) * 2016-09-22 2018-03-22 Qualcomm Incorporated Memory violation prediction
CN111078295B (zh) * 2019-11-28 2021-11-12 核芯互联科技(青岛)有限公司 一种乱序高性能核的混合分支预测装置及方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101290613A (zh) * 2007-04-16 2008-10-22 卓胜微电子(上海)有限公司 Fft处理器的数据存储系统和方法
CN101655784A (zh) * 2008-08-21 2010-02-24 株式会社东芝 流水线操作处理器和控制系统
CN102375805A (zh) * 2011-10-31 2012-03-14 中国人民解放军国防科学技术大学 面向向量处理器的基于simd的fft并行计算方法
CN104603795A (zh) * 2012-09-28 2015-05-06 英特尔公司 用于实现用于用户级线程的即时上下文切换的新指令和高效的微架构
CN102981807A (zh) * 2012-11-08 2013-03-20 北京大学 一种基于cuda并行环境的gpu程序优化方法
US9519944B2 (en) * 2014-09-02 2016-12-13 Apple Inc. Pipeline dependency resolution
CN104391676A (zh) * 2014-11-10 2015-03-04 中国航天科技集团公司第九研究院第七七一研究所 一种低成本高带宽的微处理器取指方法及其取指结构
CN109710309A (zh) * 2018-12-24 2019-05-03 安谋科技(中国)有限公司 减少存储体冲突的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
面向数据流结构的指令内访存冲突优化研究;欧焱等;《计算机研究与发展》;20191215;全文 *

Also Published As

Publication number Publication date
CN111857831A (zh) 2020-10-30

Similar Documents

Publication Publication Date Title
CN111857831B (zh) 一种存储体冲突优化方法、并行处理器及电子设备
US7617384B1 (en) Structured programming control flow using a disable mask in a SIMD architecture
US5555432A (en) Circuit and method for scheduling instructions by predicting future availability of resources required for execution
US9158595B2 (en) Hardware scheduling of ordered critical code sections
US9606808B2 (en) Method and system for resolving thread divergences
US10977037B2 (en) Techniques for comprehensively synchronizing execution threads
US9448803B2 (en) System and method for hardware scheduling of conditional barriers and impatient barriers
US9069609B2 (en) Scheduling and execution of compute tasks
EP3910488A1 (en) Systems, methods, and devices for near data processing
US10761851B2 (en) Memory apparatus and method for controlling the same
US20180052613A1 (en) Tracking stores and loads by bypassing load store units
US20110078418A1 (en) Support for Non-Local Returns in Parallel Thread SIMD Engine
US9715413B2 (en) Execution state analysis for assigning tasks to streaming multiprocessors
US10152328B2 (en) Systems and methods for voting among parallel threads
US8413151B1 (en) Selective thread spawning within a multi-threaded processing system
US9965321B2 (en) Error checking in out-of-order task scheduling
US20170371657A1 (en) Scatter to gather operation
CN112084071A (zh) 一种计算单元运算加固方法、并行处理器及电子设备
CN111666253A (zh) 向具有共享存储器的共享处理元件的系统传递可编程数据
US9583158B2 (en) Method of managing requests for access to memories and data storage system
US11182161B2 (en) Fractional or partial line usage prediction in a processor
US10503513B2 (en) Dispatching a stored instruction in response to determining that a received instruction is of a same instruction type
US8370582B2 (en) Merging subsequent updates to a memory location
US20230195618A1 (en) Approach for performing efficient memory operations using near-memory compute elements
CN113703841B (zh) 一种寄存器数据读取的优化方法、装置及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: Industrial incubation-3-8, North 2-204, No. 18, Haitai West Road, Huayuan Industrial Zone, Binhai New Area, Tianjin 300450

Applicant after: Haiguang Information Technology Co., Ltd

Address before: Industrial incubation-3-8, North 2-204, No. 18, Haitai West Road, Huayuan Industrial Zone, Binhai New Area, Tianjin 300450

Applicant before: HAIGUANG INFORMATION TECHNOLOGY Co.,Ltd.

TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20210628

Address after: 610000 China (Sichuan) pilot Free Trade Zone, Chengdu high tech Zone

Applicant after: CHENGDU HAIGUANG MICROELECTRONICS TECHNOLOGY Co.,Ltd.

Address before: Industrial incubation-3-8, North 2-204, No. 18, Haitai West Road, Huayuan Industrial Zone, Binhai New Area, Tianjin 300450

Applicant before: Haiguang Information Technology Co., Ltd

GR01 Patent grant
GR01 Patent grant