CN107580700B - 一种生成地址的方法及数据处理设备 - Google Patents
一种生成地址的方法及数据处理设备 Download PDFInfo
- Publication number
- CN107580700B CN107580700B CN201580001436.5A CN201580001436A CN107580700B CN 107580700 B CN107580700 B CN 107580700B CN 201580001436 A CN201580001436 A CN 201580001436A CN 107580700 B CN107580700 B CN 107580700B
- Authority
- CN
- China
- Prior art keywords
- address
- recirculation
- operation instruction
- area
- zone
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明涉及存储技术领域,尤其涉及一种生成地址的方法及数据处理设备,用以解决目前的访存指令占用了大量的存储空间的技术问题;本发明实施例中,存储器中包括第一重循环区域和第二重循环区域,在接收针对第二重循环区域的第一操作指令时,除了执行第一操作指令外,还可以通过第二重循环区域对应的第二步进值修改第一重循环区域的起始地址,在下一个时钟周期到来时就可以得到该次接收的操作指令对应的地址,即下一次再接收到针对第一重循环区域或第二重循环区域的操作指令时,可以直接根据上次得到的地址进行操作,无需在操作指令中携带目的地址,减少了指令的代码量,无需耗费大量的存储空间用于存储代码,同时也减轻了编程人员的编程负担。
Description
技术领域
本发明涉及存储技术领域,尤其涉及一种生成地址的方法及数据处理设备。
背景技术
现在的应用所能够完成的功能日趋强大,处理的数据越来越多,例如,现在还出现了数据密集型应用。所谓数据密集型,是指海量数据的存储与计算,其对应的应用程序广泛存在于万维网、科学计算和人工智能等多种领域。特别是进入21世纪以后,随着移动互联网、云计算、物联网的飞速发展,全球信息量呈指数级增长,数据密集型应用风暴正在形成。
数据密集型应用访存频繁,且访存规律不明显,不是简单的线性增长。在现有的访存系统中,每条指令都需要显式指明访存操作的目的地址,这使得访存指令占用了大量的存储空间。同时,程序员在编程时,需要每条指令都兼顾到访存地址,这也加大了程序员的负担。
发明内容
本发明实施例提供一种生成地址的方法及数据处理设备,用以解决目前的访存指令占用了大量的存储空间的技术问题。
第一方面,提供一种生成地址的方法,包括:
接收针对存储器中的第二重循环区域的第一操作指令;
执行所述第一操作指令,并通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以得到下一次接收的操作指令对应的地址;其中,所述第一重循环区域根据所述第二步进值在所述第二重循环区域中循环移动。
结合第一方面,在第一种可能的实现方式中,执行所述第一操作指令,并通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以得到下一次接收的操作指令对应的地址,包括:
执行所述第一操作指令,通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以及通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,
通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,包括:
通过所述第二重循环区域对应的第二步进值修改所述第二重循环区域对应的第二指针指向的地址;
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,包括:
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域对应的第一指针指向的地址。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,得到下一次接收的操作指令对应的地址,包括:
将所述第一指针增加一个所述第一步进值后指向的地址与所述第一重循环区域的长度进行取模操作,及将所述第二指针增加一个所述第二步进值后指向的地址与所述第二重循环区域的长度进行取模操作;
将得到的两个取模的结果相加,并对相加后的结果与所述第二重循环区域的长度进行取模操作;
将与所述第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
结合第一方面或第一方面的第一种可能的实现方式至第三种可能的实现方式中的任一种可能的实现方式,在第一方面的第四种可能的实现方式中,所述方法还包括:
接收针对所述第一重循环区域的第二操作指令;
执行所述第二操作指令,并通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
结合第一方面或第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址,包括:
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域对应的第一指针指向的地址,以得到下一次接收的操作指令对应的地址。
结合第一方面或第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,得到下一次接收的操作指令对应的地址,包括:
将所述第一指针增加一个所述第一步进值后指向的地址与所述第一重循环区域的长度进行取模操作,将得到的结果与所述第二指针指向的地址相加,并对相加后的结果与所述第二重循环区域的长度进行取模操作;
将与所述第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
结合第一方面或第一方面的第一种可能的实现方式至第六种可能的实现方式中的任一种可能的实现方式,在第一方面的第七种可能的实现方式中,在接收第一操作指令之前,还包括:
通过执行专用指令,对所述第一重循环区域的长度、所述第二重循环区域的长度、所述第一重循环区域对应的第一步进值、所述第二重循环区域对应的第二步进值、及循环存储区域的起始地址进行初始化。
第二方面,提供一种数据处理设备,包括:
存储器,包括第一重循环区域和第二重循环区域;
控制单元,与所述存储器连接,用于接收针对存储器中的第二重循环区域的第一操作指令;执行所述第一操作指令,并通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以得到下一次接收的操作指令对应的地址;其中,所述第一重循环区域根据所述第二步进值在所述第二重循环区域中循环移动。
结合第二方面,在第二方面的第一种可能的实现方式中,所述控制单元用于:
执行所述第一操作指令,通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以及通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述控制单元用于:
通过所述第二重循环区域对应的第二步进值修改所述第二重循环区域对应的第二指针指向的地址;及,
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域对应的第一指针指向的地址。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述控制单元用于:
将所述第一指针增加一个所述第一步进值后指向的地址与所述第一重循环区域的长度进行取模操作,及将所述第二指针增加一个所述第二步进值后指向的地址与所述第二重循环区域的长度进行取模操作;
将得到的两个取模的结果相加,并对相加后的结果与所述第二重循环区域的长度进行取模操作;
将与所述第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
结合第二方面或第二方面的第一种可能的实现方式至第三种可能的实现方式中的任一种可能的实现方式,在第二方面的第四种可能的实现方式中,所述控制单元还用于:
接收针对所述第一重循环区域的第二操作指令;
执行所述第二操作指令,并通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述控制单元用于:
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域对应的第一指针指向的地址,以得到下一次接收的操作指令对应的地址。
结合第二方面的第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述控制单元用于:
将所述第一指针增加一个所述第一步进值后指向的地址与所述第一重循环区域的长度进行取模操作,将得到的结果与所述第二指针指向的地址相加,并对相加后的结果与所述第二重循环区域的长度进行取模操作;
将与所述第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
结合第二方面或第二方面的第一种可能的实现方式至第六种可能的实现方式中的任一种可能的实现方式,在第二方面的第七种可能的实现方式中,所述设备还包括控制寄存器,用于存储所述第一重循环区域的长度、所述第二重循环区域的长度、所述第一重循环区域对应的第一步进值、所述第二重循环区域对应的第二步进值、及循环存储区域的起始地址;所述控制单元用于:
通过执行专用指令,对所述控制寄存器中存储的所述第一重循环区域的长度、所述第二重循环区域的长度、所述第一步进值、所述第二步进值、及所述循环存储区域的起始地址进行初始化。
本发明实施例中,存储器中包括第一重循环区域和第二重循环区域,在接收针对第二重循环区域的操作指令(称为第一操作指令)时,除了执行第一操作指令外,还可以通过第二重循环区域对应的第二步进值修改第一重循环区域的起始地址,在下一个时钟周期到来时就可以得到该次接收的操作指令对应的地址,即下一次再接收到针对第一重循环区域或第二重循环区域的操作指令时,可以直接根据上次得到的地址进行操作,无需在操作指令中携带目的地址,减少了指令的代码量,无需耗费大量的存储空间用于存储代码,同时也减轻了编程人员的编程负担。
且本发明实施例提供两重循环区域即第一重循环区域和第二重循环区域),第一重循环区域可以在第二重循环区域中循环移动,这样可以实现自动循环寻址,存储区域的使用方式较为灵活,也能够提高存储区域的利用率。
附图说明
图1为本发明实施例中数据处理设备的结构示意图;
图2为本发明实施例中RCU的结构示意图;
图3为本发明实施例中存储空间的寻址区域示意图;
图4为本发明实施例中生成地址的方法的流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先介绍本发明的应用场景及硬件架构等内容。
请参见图1,本发明实施例提供一种数据处理设备,该数据处理设备可以用于执行本发明实施例中的生成地址的方法。该数据处理设备例如可以是处理器,比如可以是CPU(中央处理器),或者例如可以是处理器中的子模块,等等。该数据处理设备可以包括存储器101和控制单元。
存储器(或称为存储实体)101,可以由RF(Register File,寄存器文件)或SRAM(Static Random Access Memory,静态随机存取存储器)等存储介质实现,图1中以RF为例。存储器101用于存储数据。本发明实施例中,存储器101的存储区域中可以包括第一重循环区域和第二重循环区域,其中,第一重循环区域可以包括至少一个子存储空间,第二重循环区域的长度大于等于第一重循环区域的长度,如果把第一重循环区域看作一个整体,则第一重循环区域可以整体在第二重循环区域中循环移动。
例如,存储器101由RF构成,则每个寄存器可以对应一个编号。例如第一重循环区域的长度为9,寄存器1-寄存器15为第二重循环区域,那么,存储器101中的寄存器1-寄存器9可以作为第一重循环区域,当第一重循环区域整体在第二重循环区域中移动时,例如第一重循环区域整体移动的步进值(即第二重循环区域对应的步进值,例如称为第二步进值)为1,那么,寄存器2-寄存器10可以作为第一重循环区域移动后的第一重循环区域,寄存器3-寄存器11可以作为第一重循环区域再次移动后的第一重循环区域,等等,也就是说,第一重循环区域的起始地址是可变的。
如果第二重循环区域对应的存储空间是存储器101中的可用的存储空间中的全部存储空间,那么可以认为第二重循环区域的起始地址是固定的。或者,即使第二重循环区域对应的存储空间是存储器101中的可用的存储空间中的部分存储空间,那么因为第二重循环区域所对应的存储空间是固定的,因此也可以认为第二重循环区域的起始地址是固定的。
控制单元也可以称为循环读写控制电路,可以包括RCU(Read Control Unit,读控制单元)1021和WCU(Write Control Unit,写控制单元)1022。控制单元分别用于产生在存储器101中循环读和循环写的索引编号。其中,RCU1021和WCU1022可以位于同一功能模块中,若RCU1021和WCU1022位于同一功能模块中,则也可以将该功能模块称为CU(ControlUnit,控制单元),可以认为RCU1021和WCU1022是CU中的两个子模块,或者RCU1021和WCU1022也可以位于不同的功能模块中,若RCU1021和WCU1022位于不同的功能模块中,则RCU1021和WCU1022的硬件结构可以相同,只是DEC可以通过不同的控制指令来控制RCU1021和WCU1022,图1中,可以理解为是以RCU1021和WCU1022位于CU中为例。
可选的,请继续参见图1,在本发明另一实施例中,该数据处理设备还可以包括译码电路103和控制寄存器104,其中,译码电路103与控制单元连接,控制寄存器104分别与控制单元和译码电路103连接。
控制寄存器104用于存储第一重循环区域的长度、第二重循环区域的长度、第一步进值、第二步进值、及循环存储区域的起始地址。关于这几个参数的含义,将在后面介绍。
译码电路103用于:通过执行专用指令,对控制寄存器104中存储的第一重循环区域的长度、第二重循环区域的长度、第一步进值、第二步进值、及循环存储区域的起始地址进行初始化。其中,在对循环存储区域的起始地址初始化之后,得到的地址可以称为循环存储区域的初始化地址。
可选的,请继续参见图1,在本发明另一实施例中,该数据处理设备还可以包括IB(Instruction Buffer,输入指令缓冲)105,用于接收并暂时缓存针对数据处理设备的读指令、写指令、及控制指令等各类指令。本发明实施例中,指令与操作指令,可以是同一概念,可互换。
译码电路103例如为DEC(Decode,译码电路),可以对IB105中缓存的指令进行译码,生成对应的控制信号,并将控制信号发往数据处理设备的其他模块。
控制寄存器104例如为CR(Control Register,可编程控制寄存器),可以用于存储对数据处理设备的配置信息,CR可通过专用指令进行写操作来完成配置,即完成初始化。
例如,在执行读指令、写指令或其他控制指令之前,可以首先通过专用的配置指令,即专用指令,例如为SetCR Src(表示用数据Src设置CR)指令,对CR进行写操作。例如CR中包含5个位域,分别对应如前所述的第一重循环区域的长度、第二重循环区域的长度、第一步进值、第二步进值、及循环存储区域的起始地址,例如用WinLen表示第一重循环区域的长度,用CirLen表示第二重循环区域的长度,用Inc表示第一步进值,用Stirde表示第二步进值,用Start表示循环存储区域的起始地址,如表1所示,则通过专用的配置指令对CR进行写操作,就能对这些位域对应的参数进行初始化。
表1
Start | CirLen | WinLen | Inc | Stride |
表1中,各个位域的相对位置只是用于示例,在实际情况中可以按照任意顺序排列。
另外,在图1中,可以理解为是以RCU1021和WCU1022位于不同的功能模块中为例,或者也可以理解为是将CU拆分开来进行示意,即实际上图1中的RCU1021和WCU1022为CU中的两个功能模块。
另外,在图1中,存储器101可以包括2个用于读数据的接口和2个用于写数据的接口,在图1中,读数据的接口例如可以表示为R接口,写数据的接口例如可以表示为W接口,其中一个读数据的接口针对按照本发明实施例中后续将要介绍的方法循环读数据的方式,另一个读数据的接口针对进行非循环读数据的方式,即后续将要介绍的普通立即数索引类型的方式,同样的,其中一个写数据的接口针对按照本发明实施例中后续将要介绍的方法循环写数据的方式,另一个写数据的接口针对非循环写数据的方式。
从图1中可知,Imm Wr和Imm Rd这两种指令属于普通立即数索引类型的操作指令,这种操作指令将在后面介绍,在这种操作指令中可以携带目的地址,可直接根据这种操作指令在存储器101中读数据或写数据。
Cyc Wr和Cyc Rd这两种指令属于窗口内部循环索引类型的指令,或属于窗口整体移动的循环索引类型,也将在后面介绍,在指令中可以不携带目的地址,可以根据本发明实施例提供的循环方式进行读数据或写数据。
图1只是列举一种可能的数据处理设备的结构,其他可能的结构也在本发明的保护范围之内,只要数据处理设备能够实现本发明实施例中所提供的生成地址的方法即可。
请参见图2,基于同一发明构思及上述各实施例,本发明实施例以RCU1021为例,介绍RCU1021的一种可能的内部实现方式。WCU1022的硬件结构可以与RCU1021相同,或者,图2也可以理解为CU的结构,本发明不作限制。
如图2所示,RCU1021用于产生对存储器101的读操作指令,它受CR和来自IB105的操作指令共同控制。RCU1021内部主要由比较器A、比较器B、比较器C、加法器D、加法器E、加法器F、加法器G、选择器H、选择器J、选择器K、寄存器I和寄存器S构成。图2中的DEC为图1中的DEC,即为不属于RCU1021的另一功能模块。例如,图2中的RCU1021的一种可能的工作过程如下。
1、系统初始化。例如,系统开始工作时,将寄存器I和寄存器S的值分别初始化为0。例如,该过程可以由CU(或RCU1021和WCU1022)完成,例如,CU可以在接收到DEC发送的信令(或称为控制信号)时,将寄存器I和寄存器S的值分别初始化为0。
2、设定CR中各个参数的初值,即通过专用指令,例如SetCR Src指令,对CR中的各个参数进行初始化。例如,DEC在接收SetCR Src指令后,产生控制信号,CU可以在接收到DEC发送的控制信号时,对CR中的各个参数进行初始化。
3、在系统接收到循环类指令时,将寄存器I的值自加,将自加的结果与第一重循环区域的长度进行取模操作,以及,将寄存器S的值自加,将自加的结果与第二重循环区域的长度进行取模操作,之后,将两个取模操作的结果相加,把相加的结果通过比较器C与CirLen进行比较,若二者相等,则得到操作指令的地址Addr=Start,若二者不相等,则得到操作指令的地址Addr=S+I+Start。
其中,RCU1021支持两类循环指令:
1)窗口内部索引循环指令有效,即接收的是针对第一重循环区域的操作指令。此时,Inc对应的加法器D进行加法操作,X=I+Inc,产生的新的值X与WinLen通过比较器A进行比较。当X与WinLen相等时选择器H输出0,否选择器H输出X。当寄存器I接收到DEC产生的控制信号时,根据比较器A输出的结果对寄存器I的值进行更新,即,如果X=I+Inc=WinLen时,更新I=0,否则更新I=I+Inc。
2)窗口整体索引循环指令有效,即接收的是针对第二重循环区域的操作指令。Stride对应的加法器B进行加法操作,Y=S+Stride,产生的新的值Y与CirLen通过比较器B进行比较。当Y与CirLen相等时选择器J输出0,否选择器J输出Y。当寄存器S接收到DEC产生的控制信号时,根据比较器B输出的结果对寄存器S的值进行更新,即,如果Y=S+Stride=CirLen时,更新S=0,否则更新S=S+Stride,及,当寄存器I接收到DEC产生的控制信号时,根据比较器A输出的结果对寄存器I的值进行更新,即,如果X=I+Inc=WinLen时,更新I=0,否则更新I=I+Inc。
其中,操作指令进入DEC后,DEC进行译码,产生相应的控制信号,该控制信号可以控制寄存器S和/或寄存器I的更新。
图2只是对RCU1021的结构的一种可能的示例,其他可能的RCU1021的结构也在本发明的保护范围之内。
下面介绍在图1和图2架构下,本发明实施例中用到的一些概念。
本发明实施例中,令存储空间中的寻址区域包括循环访问区域,循环访问的区域可以包括多重循环。
以3重循环索引为例,采用与两重循环类似的方法,在3重循环中,循环索引由三个循环体(即三个循环区域)组成,分别为:
第一重循环(最外重循环):采用循环访问方式,循环体的长度例如用CirLen表示。
第二重循环(中间重循环):采用循环访问方式,若将第二重循环体看作一个整体,则第二重循环体可以在第一重循环内部整体循环移动,循环体的长度例如用MidWinLen表示,其中,MidWinLen<=CirLen。
第三重循环(最内重循环):采用循环访问方式,若将第三重循环体看作一个整体,则第三重循环体可以在第二重循环体内部整体循环移动,循环体的长度例如用InnWinLen表示,其中,InnWinLen<=MidWinLen。
整个3重循环可以由以下7个数据结构表示,这7个数据结构也可以存储在CR中。例如这7个数据结构分别为:
Start:最外重循环体的起始地址。
CirLen:最外重循环体的长度,其中CirLen<=Size,Size表示存储器101中的整个寻址区域。
MidWinLen:中间重循环体的长度,其中MidWinLen<=CirLen。
InnWinLen:最内重循环体的长度,其中InnWinLen<=MidWinLen。
Inc:最内重循环体内部的地址增长步进值。
Stirde:最内重循环体整体在中间重循环体中移动时的地址增长步进值。
Step:中间重循环体整体在最外重循环体中移动时的地址增长步进值。
各个循环体的工作方式同两重循环类似,即先配置后控制。即,先通过专用指令完成对CR中存储的各数据结构的初始化,然后根据具体的应用场景分别实现下面三种索引方式:在最内重循环体内部循环索引、最内重循环体在中间重循环内部整体移动索引、中间重循环体在最外重循环内部整体移动索引。
那么,如果扩展至N重循环(N为大于3的整数),则整个N重循环可以由2N+1个数据结构表示,这些数据结构也可以存储在CR中。例如这些数据结构分别为:
最外重循环体的起始地址;
N个循环体中每个循环体的长度,例如最外重循环体的长度为L1,......,最内重循环体的长度为LN,那么L1>=L2......>=LN。
同样的,第Ni+1重循环可以整体在Ni重循环内整体循环移动,其中,N个循环体中的每个循环体对应的移动步进值,例如分别表示为S1~SN。
同样的,对于N重循环的整个循环区域,也是先配置后使用。
下面皆以两重循环为例进行介绍,本领域技术人员自然知晓,根据本发明的思想,如前介绍的多重循环的方案亦在本发明的保护范围之内。
若循环访问的区域包括两重循环,则可能会涉及以下参数:
内重小循环,也称为窗口循环,本发明实施例中将其对应的存储区域称为第一重循环区域,对第一重循环区域可采用循环访问方式,循环体长度即是第一重循环区域的长度,例如在如前介绍了,可表示为WinLen,其中,WinLen<=CirLen。第一重循环区域包括至少一个子存储空间,每个子存储空间对应一个地址。
外重大循环,本发明实施例中将其对应的存储区域称为第二重循环区域,对第二重循环区域可采用循环访问方式,循环体长度(即第二重循环区域的长度)例如在如前介绍了,可表示为CirLen。其中CirLen<=Size,Size表示存储器101的存储空间中的整个寻址区域。
在前面介绍了,内重小循环可以整体在外重大循环中移动,移动的地址增长步进值可表示为Stride,本发明实施例中将该步进值称为第二步进值。内重小循环在外重大循环中的地址偏移为S=S+Stirde,S例如可以初始化为0。同时,内重小循环内部也可以进行循环索引,内重小循环中,两个子存储空间之间的地址增长步进值例如可以表示为Inc,本发明实施例中例如将该步进值称为第一步进值。内重小循环中的子存储空间相对于内重小循环的起始地址的偏移为I=I+Inc,I例如可以初始化为0。即,I所指向的地址可以称为内重小循环的内部偏移地址,S所指向的地址可以称为外重大循环的内部偏移地址。
可以认为,若循环访问的区域包括两重循环,则整个循环体可以包括5个数据结构,即如表1介绍的5个位域中存储的信息,分别为:
Start:外重大循环起始地址,即第二重循环区域的起始地址,在对其进行初始化后,也可以称为循环存储区域的初始化地址。
CirLen:外重大循环的长度,即第二重循环区域的长度。
WinLen:内重小循环的长度,即第一重循环区域的长度。
Inc:内重小循环内部的地址增长步进值,即第一步进值。
Stirde:内重小循环窗口整体在外重大循环中的移动地址增长步进值,即第二步进值。
本发明实施例中,第一重循环区域对应一个指针,例如可以称为第一指针(可以表示为I),第一指针的增长步进值为Inc,即,在第一指针指向的地址的基础上增加Inc后,第一指针就指向第一重循环区域中的下一个地址。第二重循环区域对应一个指针,例如可以称为第二指针(可以表示为S),第二指针的增长步进值为Stirde,即,在第二指针指向的地址的基础上增加Stirde后,第二指针就指向第二重循环区域中的下一个地址。其中,在第二指针指向的地址的基础上增加Stirde,可以认为是将第一重循环整体在第二重循环里移动了一个第二步进值。
如图3所示,为本发明实施例中一种可能的循环区域的示意图。
在任意时刻,循环体的访问地址,即操作指令(本发明实施例中,操作指令可以是读数据的指令,也可以是写数据的指令)所针对的地址,可以用数学表达式表示为:
Addr=Start+(S+I)%CirLen (1)
公式(1)中,%表示取模操作,S=(S+Stride)%CirLen,S可以初始化为0,I=(I+Inc)%WinLen,I可以初始化为0。
本发明实施例中,如果通过循环方式向连续的物理地址或连续的逻辑地址指向的位置执行读数据的指令或写数据的指令,则指令中可以无需携带目的地址,通过循环方式寻址即可,如果通过非循环方式执行读数据的指令或写数据的指令,则指令中可以携带目的地址,直接根据目的地址进行读写即可。因此,本发明实施例中的操作指令的类型可以有所不同,以下简单介绍。
普通立即数索引类型,即在操作指令中需要显式指明数据存储的位置的指令类型,即,需在操作指令中携带目的地址。该类型的读数据的指令例如可以表示为Rd DestRi,该类型的写数据的指令例如可以表示为Wr Ri Src。其中Ri用于指示要读取的数据所在的地址,Dest表示读取的数据需要写往的目的地址,Src表示写入的数据。
窗口内部循环索引类型,为针对第一重循环区域的操作指令,在操作指令中不需要指明数据存储的位置,即无需在操作指令中携带目的地址,系统会自动寻址,且在该类操作指令执行完成之后,在下一个时钟周期到来时,对应于第一重循环区域的第一指针指向的地址会自动增加Inc。本发明实施例中,每次更新指针指向的地址后,系统可通过公式(1)进行计算以得到下一次操作指令所对应的地址。该类型的读数据的指令例如可以表示为RdI Dest,该类型的写数据的指令例如可以表示为WrI Src。
窗口整体移动的循环索引类型,为针对第二重循环区域的操作指令,在操作指令中也无需指明数据存储的位置,即无需在操作指令中携带目的地址,系统会自动寻址,且在该类操作指令执行完成之后,对应于第二重循环区域的第二指针指向的地址会自动增加Stirde,且对应于第一重循环区域的第一指针指向的地址也要自动增加Inc。本发明实施例中,在下一个时钟周期到来时更新指针指向的地址,且系统可通过公式(1)进行计算以得到下一次操作指令所对应的地址。该类型的读数据的指令例如可以表示为RdS Dest,该类型的写数据的指令例如可以表示为WrS Src。
在接收操作指令后,系统可以根据操作指令的结构等确定操作指令的类型,从而对不同类型的操作指令采用不同的执行方式。
以上对各个数据结构以及对各类操作指令的命名,只是本发明实施例提供的一种可能的表示方式,在实际应用中,可以根据不同需求将其进行不同的命名。
上述各类指令的含义解释如下。
Wr Ri Src,把数据Src写入地址Ri所指向的存储区域。例如Ri可以是寄存器编号,或者也可以是其他用于指示地址的信息;
Rd Dest Ri,把存储器101中地址Ri所指向的位置中的数据读出到地址Dest指向的位置;
WrI Src,把数据Src写入第一重循环区域中的自索引地址指向的位置,这里的自索引地址即上次执行完循环类型的指令(窗口内部循环索引类型或窗口整体移动的循环索引类型)后,在当前的时钟周期根据公式(1)得到的地址,同时更新自索引指针I=(I+Inc)%WinLen;
WrS Src,把Src写入第二重循环区域中的自索引地址指向的位置,这里的自索引地址即上次执行完循环类型的指令后,在当前的时钟周期根据公式(1)得到的地址,同时更新自索引指针S=(S+Stride)%CirLen,以及更新自索引指针I=(I+Inc)%WinLen;
RdI Dest,把第一重循环区域中的自索引地址指向的位置中的数据读出到地址Dest指向的位置,这里的自索引地址即上次执行完循环类型的指令后,在当前的时钟周期根据公式(1)得到的地址,同时更新自索引指针I=(I+Inc)%WinLen;Dest用于指示一个存储区域;
RdS Dest,把第二重循环区域中的自索引地址指向的位置中的数据读出到地址Dest指向的位置,这里的自索引地址即上次执行完循环类型的指令后,在当前的时钟周期根据公式(1)得到的地址,同时更新自索引指针S=(S+Stride)%CirLen,以及更新自索引指针I=(I+Inc)%WinLen。
当然,以上各类操作指令的结构、功能等,只是给出的一种示例,只要符合本发明思想的操作指令均在本发明的保护范围之内。
另外,本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
下面结合说明书附图对本发明实施例作进一步详细描述。
请参见图4,本发明一个实施例提供一种生成地址的方法,该方法可以由控制单元完成(若控制单元为CU,那么该方法可以由CU完成,若控制单元包括WCU1022和RCU1021,那么若操作指令是读数据的指令,则该方法可以由WCU1022完成,若操作指令是写数据的指令,则该方法可以由RCU1021完成),该方法的流程描述如下。
步骤401:接收针对存储器101中的第二重循环区域的第一操作指令;
步骤402:执行第一操作指令,并通过第二重循环区域对应的第二步进值修改存储器101中的第一重循环区域的起始地址,以得到下一次接收的操作指令对应的地址;其中,第一重循环区域根据第二步进值在第二重循环区域中循环移动。
首先,控制单元可以接收操作指令,本发明实施例中将该操作指令称为第一操作指令。第一操作指令可以是读数据的指令,或者也可以是写数据的指令。
本发明实施例中,操作指令中可以携带目的地址,或者也可以不携带目的地址。而本发明实施例认为第一操作指令中不携带目的地址,即第一操作指令是针对第二重循环区域的循环类指令。
另外,若第一操作指令为读数据的指令,则第一操作指令中还可以携带数据去向的地址,即指明要将读出的数据存储到哪里,若第一操作指令为写数据的指令,则第一操作指令中还可以携带数据来源的地址,即指明要写入的数据来自于哪里。当然,以上只是一些可能的示例,本发明对此不作限制。
在前面已有介绍,本发明实施例中的系统可以执行循环类指令,也可以执行非循环类指令,因此可以将操作指令分为不同的类型,对于不同类型的操作指令,有不同的执行方式。那么,在接收操作指令后,控制单元可以首先确定操作指令的类型信息,即确定操作指令是何种类型。
在确定操作指令的类型后,控制单元就可以确定与这种类型的操作指令对应的执行方式。
本发明实施例中,第一操作指令可以是循环类指令,第一操作指令的类型可以是窗口整体移动的循环索引类型,即针对第二重循环区域的操作指令的类型,那么第一操作指令的执行方式就是针对第二重循环区域进行外部大循环的执行方式。例如,第一操作指令可以是RdS Dest,或者可以是WrS Src。
在确定第一操作指令为针对第二重循环区域的操作指令后,可以执行第一操作指令,例如如果第一操作指令为读数据的指令,则可以向第一地址所指向的位置写入数据,或者例如,如果第一操作指令为写数据的指令,则可以从第一地址所指向的位置读取数据。
例如第一操作指令所对应的地址为第一地址。其中,如果第一操作指令是系统对循环类指令涉及的各参数进行初始化后控制单元接收的第一个操作指令,则第一地址为循环存储区域的初始化地址,即如前所述的Start,而如果第一操作指令不是系统对循环类指令涉及的各参数进行初始化后控制单元接收的第一个操作指令,也就是说在第一操作指令之前,控制单元还执行过其他的读数据的指令或写数据的指令,则第一地址为最近一次执行完操作指令后,系统在当前的时钟周期得到的地址,最近一次执行的操作指令,可以是针对第一重循环区域的操作指令,或者也可以是针对第二重循环区域的操作指令,可以是读数据的指令,也可以是写数据的指令。
其中,在每次执行完操作指令后,可以得到新的第一重循环区域的内部偏移地址(即新的I值)和新的第二重循环区域的内部偏移地址(即新的S值),在下一个时钟周期到来时,可以根据上次得到的新的第一重循环区域的内部偏移地址和新的第二重循环区域的内部偏移地址更新相应的寄存器的值,并根据更新后的寄存器的值得到本次操作所对应的地址。也就是说,在每次操作指令执行完成后,系统只是得到了新的I值和新的S值,但未根据新的值更新相应的寄存器的值,在下一个时钟周期到来时(例如下一次接收到循环类型的操作指令时),系统根据上一次得到的新的I值和新的S值更新相应的寄存器,再通过计算得到本次操作所对应的地址。
在执行第一操作指令后,可以得到新的第二重循环区域的内部偏移地址,在下一个时钟周期到来时(一般就是接收到下一个循环类型的操作指令时),可以通过第二重循环区域对应的第二步进值修改第一重循环区域的起始地址,得到该次接收的针对第一重循环区域或第二重循环区域的操作指令对应的地址。这样,下一次再接收到循环类操作指令时,控制单元就可以自动寻址,而无需将目的地址携带在操作指令中。
即本发明实施例中,在接到第一操作指令时,直接可以计算得到第一地址,并从第一地址指向的位置进行数据操作,本发明实施例中,对一个地址指向的位置进行数据操作,可以是指从该地址指向的位置读取数据,或者也可以是指向该地址指向的位置写入数据。即第一操作指令中无需携带目的地址,系统可以根据之前获得的地址(即第一地址)进行操作,同样,在本次操作完毕后,可以自动得到下一次接收的针对第一重循环区域或第二重循环区域的操作指令对应的地址(这里的指得到相应的值,需要在下一个时钟周期到来时再计算得到该地址),以便下次接到操作指令时可以直接对本次得到的地址指向的位置进行数据操作。这样,操作指令中无需携带目的地址,在较大的程度上减少了程序的代码量,在存储代码时无需耗费太多的存储空间,同时也减轻了编程人员的编程负担。
可选的,在本发明另一实施例中,执行第一操作指令,并通过第二重循环区域对应的第二步进值修改存储器101中的第一重循环区域的起始地址,以得到下一次接收的操作指令对应的地址,包括:
执行第一操作指令,通过第二重循环区域对应的第二步进值修改存储器101中的第一重循环区域的起始地址,以及通过第一重循环区域对应的第一步进值修改第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
第一重循环区域可以包括至少一个子存储空间,而每次操作针对的是其中的一个子存储空间,即,第一指针在一个时刻只指向其中的一个子存储空间,那么,第一重循环区域的内部偏移地址,可以是指第一指针当前指向的子存储空间的地址。
可选的,在本发明另一实施例中,
通过第二重循环区域对应的第二步进值修改存储器101中的第一重循环区域的起始地址,包括:
通过第二重循环区域对应的第二步进值修改第二重循环区域对应的第二指针指向的地址;
通过第一重循环区域对应的第一步进值修改第一重循环区域的内部偏移地址,包括:
通过第一重循环区域对应的第一步进值修改第一重循环区域对应的第一指针指向的地址。
可选的,在本发明另一实施例中,得到下一次接收的操作指令对应的地址,包括:
将第一指针增加一个第一步进值后指向的地址与第一重循环区域的长度进行取模操作,及将第二指针增加一个第二步进值后指向的地址与第二重循环区域的长度进行取模操作;
将得到的两个取模的结果相加,并对相加后的结果与第二重循环区域的长度进行取模操作;
将与第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
在该实施例中,执行完第一操作指令后,可以得到新的I值和新的S值。在下一个时钟周期到来时,系统可以根据执行完第一操作指令后得到的新的I值和新的S值分别更新寄存器I和寄存器S的值,且可以根据更新后的寄存器的值得到本次操作指令对应的地址,那么显然,本次操作指令对应的地址其实是上次执行完操作指令后确定的。例如,系统在得到本次操作指令对应的地址时,可以根据公式(1)计算得到。
可选的,在本发明另一实施例中,所述方法还包括:
接收针对第一重循环区域的第二操作指令;
执行第二操作指令,并通过第一重循环区域对应的第一步进值修改第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
即本发明实施例中,数据处理设备可以执行各类操作指令。
本发明实施例中,第一操作指令为针对第二重循环区域的指令,第二操作指令为针对第一重循环区域的指令,即第一操作指令和第二操作指令都是循环类指令,只不过针对的是不同的存储空间。
第二操作指令可以是用于读数据的指令,例如为RdI Dest,或者第二操作指令也可以是用于写数据的指令,例如为WrI Src。
例如第二操作指令所对应的地址为第二地址。其中,如果第二操作指令是系统对循环类指令涉及的各参数进行初始化后控制单元接收的第一个操作指令,则第二地址为循环存储区域的初始化地址,即如前所述的Start,而如果第二操作指令不是系统对循环类指令涉及的各参数进行初始化后控制单元接收的第一个操作指令,也就是说在第二操作指令之前,控制单元还执行过其他的读数据的指令或写数据的指令,则第二地址为最近一次执行完操作指令后,系统在当前的时钟周期得到的地址,最近一次执行的操作指令,可以是针对第一重循环区域的操作指令,或者也可以是针对第二重循环区域的操作指令,可以是读数据的指令,也可以是写数据的指令。
本发明实施例中,在接到第二操作指令时,直接可以根据上次执行完操作指令后得到的相应的I值和S值更新相应的寄存器,并根据更新后的寄存器的值和循环存储区域的初始化地址等参数计算得到第二地址,并从第二地址指向的位置进行数据操作,本发明实施例中,对一个地址指向的位置进行数据操作,可以是指从该地址指向的位置读取数据,或者也可以是指向该地址指向的位置写入数据。即第二操作指令中无需携带目的地址,系统可以根据之前获得的地址(即第二地址)进行操作,同样,在本次操作完毕后,可以自动得到下一次接收的针对第一重循环区域或第二重循环区域的操作指令对应的地址(这里的指得到相应的值,需要在下一个时钟周期到来时再计算得到该地址),以便下次接到操作指令时可以直接对本次得到的地址指向的位置进行数据操作。这样,操作指令中无需携带目的地址,在较大的程度上减少了程序的代码量,在存储代码时无需耗费太多的存储空间,同时也减轻了编程人员的编程负担。
可选的,在本发明另一实施例中,通过第一重循环区域对应的第一步进值修改第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址,包括:
通过第一重循环区域对应的第一步进值修改第一重循环区域对应的第一指针指向的地址,以得到下一次接收的操作指令对应的地址。
第一重循环区域包括至少一个子存储区域,例如在执行第二操作指令时,第一指针指向的是第一重循环区域中的第一个子存储区域的地址,那么在第二操作指令执行完毕后,控制单元可以将第一指针自加第一步进值,在下一个时钟周期到来时,第一指针就会指向第一重循环区域中的第二个子存储区域的地址,这样就实现了第一重循环区域内部的移动。
且,本发明实施例中的地址是取模后的结果。举例如下。
假如第一重循环区域包括四个子存储空间,在第一时刻,接收针对第一重循环区域的读数据指令1,根据上次的操作指令执行完毕后得到的I值和S值计算得到的读数据指令1对应的地址是第一个第一重循环区域中的第四个子存储空间的地址,则本次要从第一个第一重循环区域中的第四个子存储空间中读取数据。在本次数据读取完毕后,将第一指针的值自增Inc,确定第二指针的值不变。在下一个时钟周期到来时,根据第一指针自增Inc后的值更新寄存器I的值,寄存器S的值可以不变,则可以得到该次接收的针对第一重循环区域或第二重循环区域的操作指令对应的地址,即为第一个第一重循环区域中的第一个子存储空间的地址,那么下次再接收针对第一重循环区域或第二重循环区域的操作指令时,需要处理的数据就是第一个第一重循环区域中的第一个子存储空间中的数据。可见,如果把第一重循环区域看做一个窗口,其中的每个子存储空间看做一个小窗口,则通过对地址进行取模操作,可以实现在第一重循环区域这个窗口内的循环操作。
同样的,对于第二重循环区域也是一样,也是可以实现循环操作的过程。
可见,如果不想在一个第一重循环区域中进行循环操作,则在第一指针指向一个第一重循环区域中的最后一个子存储空间时,发送的指令最好是针对第二重循环区域的指令,这样,通过执行第二重循环区域的指令,自然就会移动到下一个第一重循环区域中,实现顺序执行。因此,这也就对指令的发送方(例如为编程人员)有了一定的要求,如果要实现顺序执行,则指令的发送方需要知道每次执行完毕后,第一指针所指向的地址所在的位置。
可选的,在本发明另一实施例中,得到下一次接收的操作指令对应的地址,包括:
将第一指针增加一个第一步进值后指向的地址与第一重循环区域的长度进行取模操作,将得到的结果与第二指针指向的地址相加,并对相加后的结果与第二重循环区域的长度进行取模操作;
将与第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
在该实施例中,执行完第二操作指令后,可以得到新的I值和新的S值。在下一个时钟周期到来时,系统可以根据执行完第二操作指令后得到的新的I值和新的S值分别更新寄存器I和寄存器S的值,且可以根据更新后的寄存器的值得到本次操作指令对应的地址,那么显然,本次操作指令对应的地址其实是上次执行完操作指令后确定的。例如,系统在得到本次操作指令对应的地址时,可以根据公式(1)计算得到。
本发明实施例中,关于第二操作指令的接收及执行的过程可以发生在关于第一操作指令的接收及执行的过程之前,或者,关于第二操作指令的接收及执行的过程也可以发生在关于第一操作指令的接收及执行的过程之后。
例如,若关于第二操作指令的接收及执行的过程发生在关于第一操作指令的接收及执行的过程之前,且在第二操作指令执行完毕后系统就执行第一操作指令,那么对于第一操作指令来说,第二操作指令就是最近一次执行的操作指令,则第一地址与执行完第二操作指令后得到的下一次接收的操作指令对应的地址可以是同一地址。当然,若关于第二操作指令的接收及执行的过程发生在关于第一操作指令的接收及执行的过程之前,且在第二操作指令执行完毕后系统还执行了其他操作指令,之后才执行第一操作指令,则第一地址与执行完第二操作指令后得到的下一次接收的操作指令对应的地址不是同一地址。
例如,若关于第二操作指令的接收及执行的过程发生在关于第一操作指令的接收及执行的过程之后,且在第一操作指令执行完毕后系统就执行第二操作指令,那么对于第二操作指令来说,第一操作指令就是最近一次执行的操作指令,则执行完第一操作指令后得到的下一次接收的操作指令对应的地址与第二地址可以是同一地址。当然,若关于第二操作指令的接收及执行的过程发生在关于第一操作指令的接收及执行的过程之后,且在第一操作指令执行完毕后系统还执行了其他操作指令,之后才执行第二操作指令,则执行完第一操作指令后得到的下一次接收的操作指令对应的地址与第二地址不是同一地址。
以下介绍一个例子,关于第二操作指令的接收及执行的过程发生在关于第一操作指令的接收及执行的过程之前,且在第二操作指令执行完毕后系统就执行第一操作指令,即对于第一操作指令来说,第二操作指令就是最近一次执行的操作指令。
例如第二操作指令为用于读数据的指令,例如第二操作指令为针对第一重循环区域的RdI Src,第一指针为I,第一步进值为Inc。在接到第二操作指令时,对应的地址为第一个第一重循环区域中的第一个子存储空间所在的位置的地址,第一重循环区域例如共包括四个子存储空间。
接收第二操作指令后,执行第二操作指令,从第一个第一重循环区域中的第一个子存储空间所在的位置中读取数据,读取完毕后,将I增加Inc,则在下一个时钟周期到来时(例如为接收第一操作指令时),I会指向第一个第一重循环区域中的第二个子存储空间所在的位置,S不变,根据I+Inc、S和Start,通过公式(1)得到下一次接收的操作指令所对应的地址,例如称为地址1,地址1为第一个第一重循环区域中的第二个子存储空间的地址。
例如第一操作指令为用于读数据的指令,例如第一操作指令为针对第二重循环区域的RdS Src,第二指针为S,第二步进值为Stride。
接收第一操作指令后,根据执行第二操作指令后得到的新的I值更新寄存器I的值,得到第一操作指令对应的地址,即为第一个第一重循环区域中的第二个子存储空间的地址。执行第一操作指令,从第一个第一重循环区域中的第二个子存储空间所在的位置中读取数据,读取完毕后,将S增加Stride,及将I增加Inc,在下一个时钟周期到来时,根据I+Inc、S+Stride和Start,通过公式(1)可以得到该次操作指令所对应的地址,例如称为地址2。
可选的,在本发明另一实施例中,在接收第一操作指令之前,还包括:
通过执行专用指令,对第一重循环区域的长度、第二重循环区域的长度、第一步进值、第二步进值、及循环存储区域的起始地址进行初始化。其中,在对循环存储区域的起始地址进行初始化之后,得到的地址即为循环存储区域的初始化地址。
即,在执行操作指令之前,可以先对Start、CirLen、WinLen、Inc、Stride等参数进行初始化。
该实施例中的专用指令例如可以是专用的配置指令,例如可以是如前所述的SetCR Src,本发明对此不作限制。
以下举例介绍。
假设初始化后CR中的各参数的取值为:
Start=0;
CirLen=7;
WinLen=4;
Inc=1;
Stride=1。
假设需要执行一系列的读数据的指令,在执行时需要访问的寄存器的ID分别为:
{0,1,2,3},{0,1,2,3},{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,0},{5,6,0,1},......。
假设第二重循环区域的范围是{0,1,2,3,4,5,6,7},前4个第一重循环区域的范围分别是{0,1,2,3},{1,2,3,4},{2,3,4,5},{3,4,5,6},下一个第一重循环区域的范围是{4,5,6,0},以此类推,即后面的第一重循环区域的范围分别为{5,6,0,1},{6,0,1,2},等等。
则请参见表1,可按照表1所示的方式执行一系列读数据的指令。
表1
从表1中可以看到,当I的值第一次为3时,下次接收的操作指令如果还是针对第一重循环区域的指令,例如为RdI Src指令,则I指向的地址增加Inc,根据公式(1),则又会得到寄存器0的地址,那么下次会再次访问寄存器0,实现了循环操作。
而当I的值第二次为3时,下次接收的指令是针对第二重循环区域的指令,例如为RdS Src,则S指向的地址增加Stride,从0变为1,I指向的地址也增加Inc,从3变为0,根据公式(1),就从第一个第一重循环区域跳到了第二个第二重循环区域。表1的其他内容以此类推,不多赘述。
可选的,在本发明另一实施例中,所述方法还可以包括:
接收第三操作指令;
执行第三操作指令,对第三操作指令携带的目的地址指向的位置进行数据操作。
本发明实施例中,第三操作指令可以是非循环类的指令(普通立即数索引类型的指令),第三操作指令可以是读数据的指令,例如可以是如前所述的Rd Dest Src,或者第三操作指令可以是写数据的指令,例如可以是如前所述的Wr Ri Src。第三操作指令中可以携带目的地址,则系统可以直接对第三操作指令携带的目的地址所指向的位置进行数据操作,可以是读操作或写操作。
本发明实施例中,存储器101中包括第一重循环区域和第二重循环区域,在接收针对第二重循环区域的操作指令(称为第一操作指令)时,除了执行第一操作指令外,还可以通过第二重循环区域对应的第二步进值修改第一重循环区域的起始地址,在下一个时钟周期到来时就可以自动得到该次接收的操作指令对应的地址,即下一次再接收到针对第一重循环区域或第二重循环区域的操作指令时,可以直接根据上次得到的地址进行操作,无需在操作指令中携带目的地址,减少了指令的代码量,无需耗费大量的存储空间用于存储代码,同时也减轻了编程人员的编程负担。
且本发明实施例提供两重循环区域(即第一重循环区域和第二重循环区域),第一重循环区域可以在第二重循环区域中循环移动,这样可以实现自动循环寻址,存储区域的使用方式较为灵活,也能够提高存储区域的利用率。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将装置的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,不应理解为对本发明的限制。本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (14)
1.一种生成地址的方法,其特征在于,包括:
接收针对存储器中的第二重循环区域的第一操作指令;
执行所述第一操作指令,并通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以得到下一次接收的操作指令对应的地址;其中,所述第一重循环区域根据所述第二步进值在所述第二重循环区域中循环移动;
所述方法还包括:
接收针对所述第一重循环区域的第二操作指令;
执行所述第二操作指令,并通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
2.如权利要求1所述的方法,其特征在于,执行所述第一操作指令,并通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以得到下一次接收的操作指令对应的地址,包括:
执行所述第一操作指令,通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以及通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
3.如权利要求2所述的方法,其特征在于,
通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,包括:
通过所述第二重循环区域对应的第二步进值修改所述第二重循环区域对应的第二指针指向的地址;
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,包括:
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域对应的第一指针指向的地址。
4.如权利要求3所述的方法,其特征在于,得到下一次接收的操作指令对应的地址,包括:
将所述第一指针增加一个所述第一步进值后指向的地址与所述第一重循环区域的长度进行取模操作,及将所述第二指针增加一个所述第二步进值后指向的地址与所述第二重循环区域的长度进行取模操作;
将得到的两个取模的结果相加,并对相加后的结果与所述第二重循环区域的长度进行取模操作;
将与所述第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
5.如权利要求1所述的方法,其特征在于,通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址,包括:
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域对应的第一指针指向的地址,以得到下一次接收的操作指令对应的地址。
6.如权利要求5所述的方法,其特征在于,得到下一次接收的操作指令对应的地址,包括:
将所述第一指针增加一个所述第一步进值后指向的地址与所述第一重循环区域的长度进行取模操作,将得到的结果与所述第二重循环区域对应的第二指针指向的地址相加,并对相加后的结果与所述第二重循环区域的长度进行取模操作;
将与所述第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
7.如权利要求1-6任一所述的方法,其特征在于,在接收第一操作指令之前,还包括:
通过执行专用指令,对所述第一重循环区域的长度、所述第二重循环区域的长度、所述第一重循环区域对应的第一步进值、所述第二重循环区域对应的第二步进值、及循环存储区域的起始地址进行初始化。
8.一种数据处理设备,其特征在于,包括:
存储器,包括第一重循环区域和第二重循环区域;
控制单元,与所述存储器连接,用于接收针对存储器中的第二重循环区域的第一操作指令;执行所述第一操作指令,并通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以得到下一次接收的操作指令对应的地址;其中,所述第一重循环区域根据所述第二步进值在所述第二重循环区域中循环移动;
所述控制单元还用于:
接收针对所述第一重循环区域的第二操作指令;
执行所述第二操作指令,并通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
9.如权利要求8所述的设备,其特征在于,所述控制单元用于:
执行所述第一操作指令,通过所述第二重循环区域对应的第二步进值修改所述存储器中的第一重循环区域的起始地址,以及通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域的内部偏移地址,以得到下一次接收的操作指令对应的地址。
10.如权利要求9所述的设备,其特征在于,所述控制单元用于:
通过所述第二重循环区域对应的第二步进值修改所述第二重循环区域对应的第二指针指向的地址;及,
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域对应的第一指针指向的地址。
11.如权利要求10所述的设备,其特征在于,所述控制单元用于:
将所述第一指针增加一个所述第一步进值后指向的地址与所述第一重循环区域的长度进行取模操作,及将所述第二指针增加一个所述第二步进值后指向的地址与所述第二重循环区域的长度进行取模操作;
将得到的两个取模的结果相加,并对相加后的结果与所述第二重循环区域的长度进行取模操作;
将与所述第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
12.如权利要求8所述的设备,其特征在于,所述控制单元用于:
通过所述第一重循环区域对应的第一步进值修改所述第一重循环区域对应的第一指针指向的地址,以得到下一次接收的操作指令对应的地址。
13.如权利要求12所述的设备,其特征在于,所述控制单元用于:
将所述第一指针增加一个所述第一步进值后指向的地址与所述第一重循环区域的长度进行取模操作,将得到的结果与所述第二重循环区域对应的第二指针指向的地址相加,并对相加后的结果与所述第二重循环区域的长度进行取模操作;
将与所述第二重循环区域的长度取模后得到的结果与循环存储区域的初始化地址相加,得到下一次接收的操作指令对应的地址。
14.如权利要求8-13任一所述的设备,其特征在于,所述设备还包括控制寄存器,用于存储所述第一重循环区域的长度、所述第二重循环区域的长度、所述第一重循环区域对应的第一步进值、所述第二重循环区域对应的第二步进值、及循环存储区域的起始地址;所述控制单元用于:
通过执行专用指令,对所述控制寄存器中存储的所述第一重循环区域的长度、所述第二重循环区域的长度、所述第一步进值、所述第二步进值、及所述循环存储区域的起始地址进行初始化。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2015/091079 WO2017054132A1 (zh) | 2015-09-29 | 2015-09-29 | 一种生成地址的方法及数据处理设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107580700A CN107580700A (zh) | 2018-01-12 |
CN107580700B true CN107580700B (zh) | 2020-10-09 |
Family
ID=58422614
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580001436.5A Active CN107580700B (zh) | 2015-09-29 | 2015-09-29 | 一种生成地址的方法及数据处理设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107580700B (zh) |
WO (1) | WO2017054132A1 (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3797002A (en) * | 1972-11-16 | 1974-03-12 | Ibm | Dynamically double ordered shift register memory |
US6401196B1 (en) * | 1998-06-19 | 2002-06-04 | Motorola, Inc. | Data processor system having branch control and method thereof |
CN1315058C (zh) * | 2002-02-07 | 2007-05-09 | 旺宏电子股份有限公司 | 存储器中的循环寻址的地址产生装置及其集成电路 |
CN101354641B (zh) * | 2008-08-20 | 2010-08-11 | 炬力集成电路设计有限公司 | 一种外部存储器的访问控制方法及访问控制装置 |
US8117422B2 (en) * | 2009-02-05 | 2012-02-14 | Texas Instruments Incorporated | Fast address translation for linear and circular modes |
CN103365821B (zh) * | 2013-06-06 | 2016-02-10 | 北京时代民芯科技有限公司 | 一种异构多核处理器的地址生成器 |
-
2015
- 2015-09-29 CN CN201580001436.5A patent/CN107580700B/zh active Active
- 2015-09-29 WO PCT/CN2015/091079 patent/WO2017054132A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CN107580700A (zh) | 2018-01-12 |
WO2017054132A1 (zh) | 2017-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107316078B (zh) | 用于执行人工神经网络自学习运算的装置和方法 | |
JP5987233B2 (ja) | 装置、方法、およびシステム | |
JP5500652B2 (ja) | 並列比較選択演算装置、プロセッサ及び並列比較選択演算方法 | |
CN109643233B (zh) | 具有带读取和读取/前进操作数编码的流引擎的数据处理设备 | |
US20200327079A1 (en) | Data processing method and device, dma controller, and computer readable storage medium | |
US8094157B1 (en) | Performing an occurence count of radices | |
JP6373425B2 (ja) | 複数のビットを左にシフトし、複数の1を複数の下位ビットにプルインするための命令 | |
US11182207B2 (en) | Pre-fetching task descriptors of dependent tasks | |
US8438370B1 (en) | Processing of loops with internal data dependencies using a parallel processor | |
US7895417B2 (en) | Select-and-insert instruction within data processing systems | |
KR101772299B1 (ko) | 스트라이딩된 액세스 패턴을 가진 벡터 레지스터에서 성분들을 축소하기 위한 명령어 | |
KR20170065587A (ko) | 모턴 좌표 조정 프로세서, 방법, 시스템 및 명령어 | |
CN114721720B (zh) | 一种指令集扩展方法、装置、电子设备及存储介质 | |
US7624107B1 (en) | Radix sort algorithm for graphics processing units | |
EP4152146A1 (en) | Data processing method and device, and storage medium | |
KR20170066482A (ko) | 삼차원 모턴 좌표 변환 프로세서, 방법, 시스템 및 명령어 | |
JP2018500659A (ja) | 高速ベクトルによる動的なメモリ競合検出 | |
CN107580700B (zh) | 一种生成地址的方法及数据处理设备 | |
CN110018847B (zh) | 可配置寄存器及基于可配置寄存器的数据存取方法 | |
CN107329733B (zh) | 用于执行pooling运算的装置和方法 | |
US8631173B2 (en) | Semiconductor device | |
US8572147B2 (en) | Method for implementing a bit-reversed increment in a data processing system | |
JP2013196654A (ja) | 演算処理装置 | |
CN102622318A (zh) | 一种存储器控制电路及其控制的向量数据寻址方法 | |
JP5025521B2 (ja) | 半導体装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |