CN109656641A - 一种多层循环程序的运行系统和方法 - Google Patents

一种多层循环程序的运行系统和方法 Download PDF

Info

Publication number
CN109656641A
CN109656641A CN201811314496.4A CN201811314496A CN109656641A CN 109656641 A CN109656641 A CN 109656641A CN 201811314496 A CN201811314496 A CN 201811314496A CN 109656641 A CN109656641 A CN 109656641A
Authority
CN
China
Prior art keywords
code
current
module
loop
program
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.)
Granted
Application number
CN201811314496.4A
Other languages
English (en)
Other versions
CN109656641B (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.)
Jixin communication technology (Nanjing) Co.,Ltd.
Original Assignee
Hainan University
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 Hainan University filed Critical Hainan University
Priority to CN201811314496.4A priority Critical patent/CN109656641B/zh
Publication of CN109656641A publication Critical patent/CN109656641A/zh
Application granted granted Critical
Publication of CN109656641B publication Critical patent/CN109656641B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address
    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines

Abstract

本发明实施例提供一种多层循环程序的运行系统和方法,通过将多层循环程序按程序代码的方式逐条存储,并且程序代码的类型包括数据运算程序代码和循环体描述代码,并根据当前输入的存储地址获取当前运行代码,再根据当前运行代码对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数,根据当前运行代码和每一计数结果进行状态跳转,根据跳转后的状态获取下一运行代码的存储地址。该系统和方法仅根据当前运行代码并通过计数器计数的方式就能获取下一运行代码的存储地址,从而避免了现有技术中各种循环条件的复杂判断,简化了多层循环程序的运行过程,提高了多层循环程序的运行效率。

Description

一种多层循环程序的运行系统和方法
技术领域
本发明实施例涉及计算机电路技术领域,更具体地,涉及一种多层循环程序的运行系统和方法。
背景技术
计算机软件算法中不可避免的会有很多多层循环程序,这些多层循环程序实现的时候常常需要多种额外操作来实现:包括循环变量赋初值,循环变量自增,循环变量是否达到循环总数判断,条件跳转,指令跳转等。这些额外操作会占用处理器的执行时间,降低处理器的运行速度。
为了提高处理器在处理多层循环程序时的速度,现有处理器通常是通过提高条件跳转指令的效率来实现,有两种解决方案:1、在需要执行跳转指令的时候,在得到跳转判断条件之前,用两组硬件同时对两种可能的情况进行运算,最后根据跳转判断条件选择最终结果;2、使用分支预测技术,在需要执行跳转指令的时候,在得到跳转判断条件之前,通过分支预测硬件得到预测结果,并按该结果运算,如果实际的跳转条件与预测的相同,则输出结果,如果不同,则重新计算。
以上对多层循环程序的处理,仍存在多层循环程序的运行效率低下的问题。
发明内容
为了克服上述问题或者至少部分地解决上述问题,本发明实施例提供一种多层循环程序的运行系统和方法。
本发明实施例提供一种多层循环程序的运行系统,包括:相互连接的程序存储器模块、循环计数器模块和指令状态机模块;程序存储器模块存储有多层循环程序对应的若干条程序代码,其中,每一程序代码对应一个存储地址,程序代码的类型包括数据运算程序代码和循环体描述代码,循环体描述代码包括预设前缀代码、所描述的循环体的循环层级数、所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,程序存储器模块,用于根据当前输入的存储地址获取当前运行代码,并将当前运行代码传输至循环计数器模块和指令状态机模块;循环计数器模块,用于根据当前运行代码中包含的预设前缀代码确定当前运行代码的类型为循环体描述代码,根据当前运行代码中所描述的循环体的循环层级数和所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数,并将每一计数结果输出至指令状态机模块;指令状态机模块,用于根据当前运行代码和每一计数结果进行状态跳转,根据跳转后的状态获取下一运行代码的存储地址,并将下一运行代码的存储地址传输至程序存储器模块。
其中,循环计数器模块包括多个循环计数器和使能信号生成子模块;循环计数器的数量至少为多层循环程序的循环体的总数量的两倍;使能信号生成子模块,用于根据当前运行代码生成使能信号,并输入至对应的循环计数器,以使每一循环计数器输出对应的计数结果。
其中,循环计数器模块还包括计数步长控制子模块,计数步长控制子模块包括多个多路选择器;每一多路选择器连接至一个循环计数器,每一多路选择器,用于根据当前运行代码选择计数步长,并将每一计数步长输入到对应的循环计数器,以使每一循环计数器以对应的计数步长进行计数。
其中,指令状态机模块包括状态寄存器和状态跳转子模块;状态寄存器,用于存储前一状态;状态跳转子模块,用于根据当前运行代码、前一状态和每一计数结果获取当前状态。
其中,指令状态机模块还包括地址寄存器、第一地址生成模块、地址偏移计算子模块和第二地址生成模块;地址寄存器,用于存储前一地址;第一地址生成模块,用于根据前一地址和当前状态生成当前地址;地址偏移计算子模块,用于根据每一使能信号、每一循环体内的数据运算程序代码的总数量、每一计数结果生成地址偏移量;第二地址生成模块,用于根据当前状态、当前地址和地址偏移量生成下一运行代码的存储地址。
其中,地址偏移计算子模块包括加法器和多个多路选择器;每一多路选择器连接加法器;每一多路选择器,用于根据每一使能信号输出零值或者对应的循环体内的数据运算程序代码的总数量;加法器,用于将每一计数结果以及每一多路选择器的输出结果相加,以获得地址偏移量。
其中,该系统还包括解码模块;解码模块连接至程序存储器模块;解码模块,用于对当前运行代码进行解码。
其中,该系统还包括运算模块和数据存储器模块;运算模块连接至解码模块;运算模块,用于根据当前运行代码进行运算;数据存储器模块,用于存储解码后的当前运行代码和运算结果。
其中,该系统还包括控制状态机模块;控制状态机模块连接至循环计数器模块、解码模块、运算模块和数据存储器模块;控制状态机模块,用于获取解码后的当前运行代码和每一计数结果;根据解码后的当前运行代码和每一计数结果确定当前运行代码需要进行数据存储时,将当前运行代码传输至数据存储器模块;并根据解码后的当前运行代码和每一计数结果确定当前运行代码需要参与运算时,将当前运行代码传输至运算模块。
本发明实施例还提供一种多层循环程序的运行方法,包括:根据当前输入的存储地址获取当前运行代码,其中,当前运行代码为多层循环程序中的程序代码,且每一程序代码对应一个存储地址,程序代码的类型包括数据运算程序代码和循环体描述代码,循环体描述代码包括预设前缀代码、所描述的循环体的循环层级数、所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量;根据当前运行代码中包含的预设前缀代码确定当前运行代码的类型为循环体描述代码,根据当前运行代码中所描述的循环体的循环层级数和所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数;根据当前运行代码和每一计数结果进行状态跳转,根据跳转后的状态获取下一运行代码的存储地址。
本发明实施例提供的一种多层循环程序的运行系统和方法,通过将多层循环程序按程序代码的方式逐条存储,并且程序代码的类型包括数据运算程序代码和循环体描述代码,并根据当前输入的存储地址获取当前运行代码,再根据当前运行代码对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数,根据当前运行代码和每一计数结果进行状态跳转,根据跳转后的状态获取下一运行代码的存储地址。该系统和方法仅根据当前运行代码并通过计数器计数的方式就能获取下一运行代码的存储地址,从而避免了现有技术中各种循环条件的复杂判断,简化了多层循环程序的运行过程,提高了多层循环程序的运行效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例的多层循环程序的运行系统的示意图;
图2为根据本发明实施例的多层循环程序中程序代码的存储方式的示意图;
图3为根据本发明实施例的使能信号生成子模块的控制指令的示意图;
图4为根据本发明实施例的循环计数器和计数步长控制子模块连接的示意图;
图5为根据本发明实施例的确定多路选择器的选择控制信号的示意图;
图6为根据本发明实施例的指令状态机模块的示意图;
图7为根据本发明实施例的状态转移图;
图8为根据本发明实施例的第一地址生成模块的控制指令的示意图;
图9为根据本发明实施例的第二地址生成模块的控制指令的示意图;
图10为根据本发明实施例的偏移地址计算子模块的示意图;
图11为根据本发明实施例的偏移地址计算子模块中多路选择器的选择控制信号的控制指令的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种多层循环程序的运行系统,参考图1,包括:相互连接的程序存储器模块1、循环计数器模块2和指令状态机模块3;程序存储器模块1存储有多层循环程序对应的若干条程序代码,其中,每一程序代码对应一个存储地址,程序代码的类型包括数据运算程序代码和循环体描述代码,循环体描述代码包括预设前缀代码、所描述的循环体的循环层级数、所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,程序存储器模块1,用于根据当前输入的存储地址获取当前运行代码,并将当前运行代码传输至循环计数器模块2和指令状态机模块3;循环计数器模块2,用于根据当前运行代码中包含的预设前缀代码确定当前运行代码的类型为循环体描述代码,根据当前运行代码中所描述的循环体的循环层级数和所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数,并将每一计数结果输出至指令状态机模块3;指令状态机模块3,用于根据当前运行代码和每一计数结果进行状态跳转,根据跳转后的状态获取下一运行代码的存储地址,并将下一运行代码的存储地址传输至程序存储器模块1。
具体地,该系统中的程序存储器模块1按预设的存储格式存储多层循环程序,将多层循环程序中的程序代码逐条进行存储,并且每一程序代码对应一个存储地址;程序代码的类型包括数据运算程序代码和循环体描述代码,循环体描述代码包括预设前缀代码、所描述的循环体的循环层级数、所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量;例如,如图2所示,为多层循环程序中的其中两层循环的循环体中程序代码的存储方式,其中,以“repeat”开头的程序代码的种类为循环体描述代码,描述了对应的循环体的状态信息,“repeat”为预设前缀代码,其后的三个数字分别代表对应的循环体的循环层级数、对应的循环体的循环总次数和对应的循环体内的数据运算程序代码的总数量;instn(n=1,2,3,……)的程序代码的种类为数据运算程序代码,这类程序代码会参与到最后的程序运算,影响运算结果。程序存储器模块1根据当前输入的存储地址获取当前运行代码,当前运行代码即为该系统当前进行处理的代码,依据当前运行代码的类型或者作为条件判断用的代码,或者作为运算代码,并将当前运行代码传输至循环计数器模块2和指令状态机模块3。
由于程序存储器模块1存储有描述了对应的循环体的状态信息的循环体描述代码,在循环计数器模块2接收到前运行代码后,循环计数器模块2可根据当前运行代码中包含的预设前缀代码确定当前运行代码的类型为循环体描述代码,根据当前运行代码中所描述的循环体的循环层级数和所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数,并将每一计数结果输出至指令状态机模块3。
状态机能够根据控制信号按照预先设定的状态进行状态转移,本实施例的指令状态机模块3,将当前运行代码和每一计数结果作为控制信号,按照预先设定的状态进行状态转移,并且该模块还根据跳转后的状态获取下一运行代码的存储地址,并将下一运行代码的存储地址传输至程序存储器模块1,以保证多层循环程序可连续的快速运行。
本实施例通过将多层循环程序按程序代码的方式逐条存储,并且程序代码的类型包括数据运算程序代码和循环体描述代码,并根据当前输入的存储地址获取当前运行代码,再根据当前运行代码对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数,根据当前运行代码和每一计数结果进行状态跳转,根据跳转后的状态获取下一运行代码的存储地址。该系统和方法仅根据当前运行代码并通过计数器计数的方式就能获取下一运行代码的存储地址,从而避免了现有技术中各种循环条件的复杂判断,简化了多层循环程序的运行过程,提高了多层循环程序的运行效率。
基于以上实施例,循环计数器模块包括多个循环计数器和使能信号生成子模块;循环计数器的数量至少为多层循环程序的循环体的总数量的两倍;使能信号生成子模块,用于根据当前运行代码生成使能信号,并输入至对应的循环计数器,以使每一循环计数器输出对应的计数结果。
具体地,循环计数器模块包括多个循环计数器和使能信号生成子模块,其中,循环计数器用来对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数,对于一个循环体,至少需要两个循环计数器进行计数,因此所需的循环计数器的数量至少为多层循环程序的循环体的总数量的两倍。同时,由于对于对应的循环体,某个循环体对应的循环计数器的计数值发生改变时,其他循环体对应的循环计数器的计数值不一定会发生改变,因此,本实施例使用使能信号生成子模块生成使能信号进行相应的控制。
例如,如图3所示为两层循环程序对应的使能信号生成子模块的控制指令,其中,“inst”表示当前运行代码,“REPEAT”表示预设前缀代码,“inst_repeat_layer_num”表示对应的循环体的循环层级数,“pc_cnt0”表示循环计数器对第一层循环的循环体内数据运算程序代码的运行数量进行的计数,“loop_cnt0”表示循环计数器对第一层循环的循环体的循环次数进行的计数,“LOOP_CNT0_NUM”表示第一层循环的循环体的循环总次数,“cnt0_en”表示第一层循环的循环体对应的循环计数器的使能信号,“pc_cnt1”表示循环计数器对第二层循环的循环体内数据运算程序代码的运行数量进行的计数,“loop_cnt1”表示循环计数器对第二层循环的循环体的循环次数进行的计数,“LOOP_CNT1_NUM”表示第二层循环的循环体的循环总次数,“cnt1_en”表示第二层循环的循环体对应的循环计数器的使能信号。
通过使能信号生成子模块生成使能信号输入至对应的循环计数器,以使每一循环计数器输出对应的计数结果。
基于以上实施例,循环计数器模块还包括计数步长控制子模块,计数步长控制子模块包括多个多路选择器;每一多路选择器连接至一个循环计数器,每一多路选择器,用于根据当前运行代码选择计数步长,并将每一计数步长输入到对应的循环计数器,以使每一循环计数器以对应的计数步长进行计数。
具体地,对于不同的循环计数器,计数的步长可能不一致,例如,对于某些循环体,一次循环结束后用于控制循环次数的自变量加1,而对于另一些循环体,一次循环结束后用于控制循环次数的自变量加2,甚至3,本实施例的循环计数器模块还包括计数步长控制子模块,该计数步长控制子模块可根据当前运行代码选择计数步长,并将每一计数步长输入到对应的循环计数器,以使每一循环计数器以对应的计数步长进行计数。该计数步长控制子模块还可以控制计数步长为“0”,以使对应的循环计数器在特定的条件下停止计数。
例如,如图4所示为两层循环程序对应的循环计数器和计数步长控制子模块中的多路选择器,每个循环计数器包括三个输入接口,分别为接入使能信号、步长信号和计数上限信号。每个多路选择器包括选择控制信号和至少两种步长信号。图4中,“mux”表示多路选择器,“pc_cnt0”表示循环计数器对第一层循环的循环体内数据运算程序代码的运行数量进行的计数,“loop_cnt0”表示循环计数器对第一层循环的循环体的循环次数进行的计数,“LOOP_CNT0_NUM”表示第一层循环的循环体的循环总次数,“cnt0_en”表示第一层循环的循环体对应的循环计数器的使能信号,“pc_cnt1”表示循环计数器对第二层循环的循环体内数据运算程序代码的运行数量进行的计数,“loop_cnt1”表示循环计数器对第二层循环的循环体的循环次数进行的计数,“LOOP_CNT1_NUM”表示第二层循环的循环体的循环总次数,“cnt1_en”表示第二层循环的循环体对应的循环计数器的使能信号,“PC_CNT0_NUM”表示第一层循环的循环体内的数据运算程序代码的总数量,“PC_CNT1_NUM”表示第二层循环的循环体内的数据运算程序代码的总数量,“PC_CNT0_STEP”表示第一层循环的循环体一次循环结束后用于控制循环次数的自变量的增量,“PC_CNT1_STEP”表示第二层循环的循环体一次循环结束后用于控制循环次数的自变量的增量,“loop_cnt0_sel”,“loop_cnt1_sel”和“pc_cnt0_sel”表示循环计数器各自对应的多路选择器的选择控制信号。
其中选择控制信号由当前运行代码和使能信号确定,具体的控制指令如图5所示。图5中各参数的含义同上。
每一多路选择器连接至一个循环计数器,每一多路选择器根据当前运行代码选择计数步长,并将每一计数步长输入到对应的循环计数器,以使每一循环计数器以对应的计数步长进行计数。
基于以上实施例,参考图6,指令状态机模块包括状态寄存器31和状态跳转子模块32;状态寄存器31,用于存储前一状态;状态跳转子模块32,用于根据当前运行代码、前一状态和每一计数结果获取当前状态。
具体地,本实施例的指令状态机模块,将前运行代码和每一计数结果作为控制信号,按照预先设定的状态进行状态转移,该指令状态机模块包括状态寄存器31和状态跳转子模块32,其中,状态寄存器31存储前一状态;状态跳转子模块32根据当前运行代码、前一状态和每一计数结果获取当前状态。
例如,图7为两层循环程序对应的状态转移图,预先设定的状态共有7中状态,其中,“state0”表示系统输入复位信号时对应的状态,“state1”表示初始状态,“state2”-“state7”为根据相应的控制信号进行跳转的状态,其中控制信号由当前运行代码和计数结果来决定。
基于以上实施例,参考图6,指令状态机模块还包括地址寄存器33、第一地址生成模块34、地址偏移计算子模块35和第二地址生成模块36;地址寄存器33,用于存储前一地址;第一地址生成模块34,用于根据前一地址和当前状态生成当前地址;地址偏移计算子模块35,用于根据每一使能信号、每一循环体内的数据运算程序代码的总数量、每一计数结果生成地址偏移量;第二地址生成模块36,用于根据当前状态、当前地址和地址偏移量生成下一运行代码的存储地址。
具体地,根据前一实施例定义的各种状态,来生成存储地址,本实施例的指令状态机模块还包括地址寄存器33、第一地址生成模块34和第二地址生成模块36,地址寄存器33用于存储前一地址;第一地址生成模块34用于根据前一地址和当前状态生成当前地址;地址偏移计算子模块35用于根据每一使能信号、每一循环体内的数据运算程序代码的总数量、每一计数结果生成地址偏移量,该地址偏移量指下一运行代码的存储地址相对于当前地址的偏移量;第二地址生成模块36用于根据当前状态、当前地址和地址偏移量生成下一运行代码的存储地址。
例如,图8为两层循环程序对应的第一地址生成模块的控制指令,图9为两层循环程序对应的第二地址生成模块的控制指令。其中,“pc”表示当前地址,“pc_cnt”表示地址偏移量,其他参数的含义与上述实施例中对应的参数的含义相同。
基于以上实施例,地址偏移计算子模块包括加法器和多个多路选择器;每一多路选择器连接加法器;每一多路选择器,用于根据每一使能信号输出零值或者对应的循环体内的数据运算程序代码的总数量;加法器,用于将每一计数结果以及每一多路选择器的输出结果相加,以获得地址偏移量。
具体的,由于循环计数器是循环计数的,到达循环计数器的计数上限会清零重新计数,因此,在计算地址偏移量的时候,还要将循环计数器清零的部分纳入计算,本实施例的多路选择器通过使能信号判断目标循环体内的循环体是否循环完毕,如果循环完毕,则表明这部分的计数被清除,清除部分的计数需要添加到和值中,清除部分的计数即为对应的循环体内的数据运算程序代码的总数量,多路选择器输出该总数量,否则,多路选择器输出零值。每一多路选择器根据每一使能信号输出零值或者对应的循环体内的数据运算程序代码的总数量,加法器将每一计数结果以及每一多路选择器的输出结果相加,即可获得地址偏移量。
例如,图10为两层循环程序对应的偏移地址计算子模块的示意图,图11为两层循环程序对应的偏移地址计算子模块中多路选择器的选择控制信号的控制指令的示意图。图10中,“add”表述加法器,“mux”表示多路选择器,由于只有两层循环体,因此只需要1个多路选择器,“loop_cnt1_stride_en”表示多路选择器的选择控制信号,该选择控制信号由图11所示的逻辑控制指令获得,其他参数的含义与上述实施例中对应的参数的含义相同。
基于以上实施例,参考图1,该系统还包括解码模块4;解码模块4连接至程序存储器模块1;解码模块4,用于对当前运行代码进行解码。
具体地,存储的程序代码不能直接用于条件判断或者用于数据运算,本实施例通过解码模块4对当前运行代码进行解码,以使当前运行代码可用于条件判断或者用于数据运算。
基于以上实施例,参考图1,该系统还包括运算模块5和数据存储器模块6;运算模块5连接至解码模块4;运算模块5,用于根据当前运行代码进行运算;数据存储器模块6,用于存储解码后的当前运行代码和运算结果。
基于以上实施例,参考图1,该系统还包括控制状态机模块7;控制状态机模块7连接至循环计数器模块2、解码模块4、运算模块5和数据存储器模块6;控制状态机模块7,用于获取解码后的当前运行代码和每一计数结果;根据解码后的当前运行代码和每一计数结果确定当前运行代码需要进行数据存储时,将当前运行代码传输至数据存储器模块6;并根据解码后的当前运行代码和每一计数结果确定当前运行代码需要参与运算时,将当前运行代码传输至运算模块5。
具体地,对于多层循环程序的运算,运算过程中参与运算的程序代码可能不限于当前获取的程序代码,可能还需要用到计数器的计数结果,本实施例的控制状态机模块7,可接收循环计数器的计数结果,以被后面的运算进行调用,还可判断当前运行代码的类型是数据运算程序代码还是循环体描述代码,如果是数据运算程序代码,则将当前运行代码传输至运算模块5进行数据运算。
本发明实施例还提供一种多层循环程序的运行方法,包括:根据当前输入的存储地址获取当前运行代码,其中,当前运行代码为多层循环程序中的程序代码,且每一程序代码对应一个存储地址,程序代码的类型包括数据运算程序代码和循环体描述代码,循环体描述代码包括预设前缀代码、所描述的循环体的循环层级数、所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量;根据当前运行代码中包含的预设前缀代码确定当前运行代码的类型为循环体描述代码,根据当前运行代码中所描述的循环体的循环层级数和所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数;根据当前运行代码和每一计数结果进行状态跳转,根据跳转后的状态获取下一运行代码的存储地址。
本发明实施例的方法,可用于执行图1所示的多层循环程序的运行系统实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
最后说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种多层循环程序的运行系统,其特征在于,包括:相互连接的程序存储器模块、循环计数器模块和指令状态机模块;
所述程序存储器模块存储有多层循环程序对应的若干条程序代码,其中,每一程序代码对应一个存储地址,所述程序代码的类型包括数据运算程序代码和循环体描述代码,所述循环体描述代码包括预设前缀代码、所描述的循环体的循环层级数、所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,所述程序存储器模块,用于根据当前输入的存储地址获取当前运行代码,并将所述当前运行代码传输至所述循环计数器模块和所述指令状态机模块;
所述循环计数器模块,用于根据所述当前运行代码中包含的所述预设前缀代码确定所述当前运行代码的类型为循环体描述代码,根据所述当前运行代码中所描述的循环体的循环层级数和所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数,并将每一计数结果输出至所述指令状态机模块;
所述指令状态机模块,用于根据所述当前运行代码和每一计数结果进行状态跳转,根据跳转后的状态获取下一运行代码的存储地址,并将所述下一运行代码的存储地址传输至所述程序存储器模块。
2.根据权利要求1所述的系统,其特征在于,所述循环计数器模块包括多个循环计数器和使能信号生成子模块;所述循环计数器的数量至少为所述多层循环程序的循环体的总数量的两倍;
所述使能信号生成子模块,用于根据所述当前运行代码生成使能信号,并输入至对应的循环计数器,以使每一循环计数器输出对应的计数结果。
3.根据权利要求2所述的系统,其特征在于,所述循环计数器模块还包括计数步长控制子模块,所述计数步长控制子模块包括多个多路选择器;
每一多路选择器连接至一个循环计数器,每一多路选择器,用于根据所述当前运行代码选择计数步长,并将每一计数步长输入到对应的循环计数器,以使每一循环计数器以对应的计数步长进行计数。
4.根据权利要求2所述的系统,其特征在于,所述指令状态机模块包括状态寄存器和状态跳转子模块;
所述状态寄存器,用于存储前一状态;
所述状态跳转子模块,用于根据所述当前运行代码、所述前一状态和每一计数结果获取当前状态。
5.根据权利要求4所述的系统,其特征在于,所述指令状态机模块还包括地址寄存器、第一地址生成模块、地址偏移计算子模块和第二地址生成模块;
所述地址寄存器,用于存储前一地址;
所述第一地址生成模块,用于根据所述前一地址和所述当前状态生成当前地址;
所述地址偏移计算子模块,用于根据每一使能信号、每一循环体内的数据运算程序代码的总数量、每一计数结果生成地址偏移量;
所述第二地址生成模块,用于根据所述当前状态、所述当前地址和所述地址偏移量生成所述下一运行代码的存储地址。
6.根据权利要求5所述的系统,其特征在于,所述地址偏移计算子模块包括加法器和多个多路选择器;
每一多路选择器连接所述加法器;
每一多路选择器,用于根据每一使能信号输出零值或者对应的循环体内的数据运算程序代码的总数量;
所述加法器,用于将每一计数结果以及每一多路选择器的输出结果相加,以获得所述地址偏移量。
7.根据权利要求1所述的系统,其特征在于,所述系统还包括解码模块;
所述解码模块连接至所述程序存储器模块;
所述解码模块,用于对所述当前运行代码进行解码。
8.根据权利要求7所述的系统,其特征在于,所述系统还包括运算模块和数据存储器模块;
所述运算模块连接至所述解码模块,所述数据存储器模块连接至所述解码模块和所述运算模块;
所述运算模块,用于根据所述当前运行代码进行运算;
所述数据存储器模块,用于存储解码后的所述当前运行代码和运算结果。
9.根据权利要求8所述的系统,其特征在于,所述系统还包括控制状态机模块;
所述控制状态机模块连接至所述循环计数器模块、所述解码模块、所述运算模块和所述数据存储器模块;
所述控制状态机模块,用于获取解码后的所述当前运行代码和每一计数结果;根据解码后的所述当前运行代码和每一计数结果确定所述当前运行代码需要进行数据存储时,将所述当前运行代码传输至所述数据存储器模块;并根据解码后的所述当前运行代码和每一计数结果确定所述当前运行代码需要参与运算时,将所述当前运行代码传输至所述运算模块。
10.一种多层循环程序的运行方法,其特征在于,包括:
根据当前输入的存储地址获取当前运行代码,其中,所述当前运行代码为多层循环程序中的程序代码,且每一程序代码对应一个存储地址,所述程序代码的类型包括数据运算程序代码和循环体描述代码,所述循环体描述代码包括预设前缀代码、所描述的循环体的循环层级数、所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量;
根据所述当前运行代码中包含的所述预设前缀代码确定所述当前运行代码的类型为循环体描述代码,根据所述当前运行代码中所描述的循环体的循环层级数和所描述的循环体的循环总次数和所描述的循环体内的数据运算程序代码的总数量,对每一循环体的循环次数和对每一循环体内数据运算程序代码的运行数量进行计数;
根据所述当前运行代码和每一计数结果进行状态跳转,根据跳转后的状态获取下一运行代码的存储地址。
CN201811314496.4A 2018-11-06 2018-11-06 一种多层循环程序的运行系统和方法 Active CN109656641B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811314496.4A CN109656641B (zh) 2018-11-06 2018-11-06 一种多层循环程序的运行系统和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811314496.4A CN109656641B (zh) 2018-11-06 2018-11-06 一种多层循环程序的运行系统和方法

Publications (2)

Publication Number Publication Date
CN109656641A true CN109656641A (zh) 2019-04-19
CN109656641B CN109656641B (zh) 2021-03-02

Family

ID=66110201

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811314496.4A Active CN109656641B (zh) 2018-11-06 2018-11-06 一种多层循环程序的运行系统和方法

Country Status (1)

Country Link
CN (1) CN109656641B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111796869A (zh) * 2020-09-07 2020-10-20 华夏芯(北京)通用处理器技术有限公司 程序指令块处理方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1717654A (zh) * 2002-11-28 2006-01-04 皇家飞利浦电子股份有限公司 数据处理器的循环控制电路
CN102508635A (zh) * 2011-10-19 2012-06-20 中国科学院声学研究所 一种处理器装置及其循环处理方法
CN102968293A (zh) * 2012-11-28 2013-03-13 中国人民解放军国防科学技术大学 基于指令队列的程序循环代码动态检测及执行方法
CN106227508A (zh) * 2016-07-25 2016-12-14 中国科学院计算技术研究所 一种无回边数据流循环方法、系统、装置、芯片
WO2017163039A1 (en) * 2016-03-23 2017-09-28 Arm Limited Program loop control

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1717654A (zh) * 2002-11-28 2006-01-04 皇家飞利浦电子股份有限公司 数据处理器的循环控制电路
CN102508635A (zh) * 2011-10-19 2012-06-20 中国科学院声学研究所 一种处理器装置及其循环处理方法
CN102968293A (zh) * 2012-11-28 2013-03-13 中国人民解放军国防科学技术大学 基于指令队列的程序循环代码动态检测及执行方法
WO2017163039A1 (en) * 2016-03-23 2017-09-28 Arm Limited Program loop control
CN106227508A (zh) * 2016-07-25 2016-12-14 中国科学院计算技术研究所 一种无回边数据流循环方法、系统、装置、芯片

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111796869A (zh) * 2020-09-07 2020-10-20 华夏芯(北京)通用处理器技术有限公司 程序指令块处理方法及装置

Also Published As

Publication number Publication date
CN109656641B (zh) 2021-03-02

Similar Documents

Publication Publication Date Title
Shang et al. A discrete Lagrangian-based global-search method for solving satisfiability problems
CN107833176A (zh) 一种信息处理方法及相关产品
Gebser et al. clasp: A conflict-driven answer set solver
KR100498482B1 (ko) 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법
Knopp et al. Computing many-to-many shortest paths using highway hierarchies
EP0459192B1 (en) Computer code optimization method
EP3298547A1 (en) Batch processing in a neural network processor
CN104978282B (zh) 一种缓存系统和方法
Righini et al. New dynamic programming algorithms for the resource constrained elementary shortest path problem
CN107704267A (zh) 一种卷积神经网络运算指令及其方法
CA2040304C (en) Compounding preprocessor for cache
CN105049061B (zh) 基于超前计算的高维基极化码译码器和极化码译码方法
CN102694554B (zh) 数据压缩设备、其操作方法以及包括该设备的数据处理装置
Sewell et al. A branch, bound, and remember algorithm for the simple assembly line balancing problem
US5204939A (en) Rule base processing system and rule evaluation control method therein
CN100472453C (zh) 具有多寄存器上下文的数据处理系统及其方法
KR100254080B1 (ko) 마이크로프로세서의 파워 에스티메이터
JP5425541B2 (ja) マルチプロセッサ・システム上でデータ・セットを区分化およびソートするための方法および装置
CN102067087B (zh) 环路控制系统及方法
US20050289530A1 (en) Scheduling of instructions in program compilation
CN107886167A (zh) 神经网络运算装置及方法
CN104040492B (zh) 微处理器加速的代码优化器和依赖性重排序方法
CN104899182B (zh) 一种支持可变分块的矩阵乘加速方法
US6901502B2 (en) Integrated circuit with CPU and FPGA for reserved instructions execution with configuration diagnosis
US5577217A (en) Method and apparatus for a branch target buffer with shared branch pattern tables for associated branch predictions

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
TA01 Transfer of patent application right

Effective date of registration: 20210122

Address after: Room 908, block C, Kechuang headquarters building, No. 320, pubin Road, Jiangpu street, Nanjing area, Jiangsu Free Trade Zone, Nanjing City, Jiangsu Province, 211800

Applicant after: Jixin communication technology (Nanjing) Co.,Ltd.

Address before: 570228 Hainan University, 58 Renmin Avenue, Meilan District, Haikou City, Hainan Province

Applicant before: HAINAN University

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant