1.本发明涉及计算机技术领域,尤其涉及一种向量处理器及相关数据访存方法。
背景技术:2.随着各个领域的数据规模以及复杂度的不断增加,对处理器计算能力、处理性能的要求也越来越高。向量处理器系统(vector processor system,vps),是面向向量型并行计算,以流水线结构为主的并行处理系统。采用先行控制和重叠操作技术、运算流水线、交叉访问的并行存储器等并行处理结构,对提高运算速度有重要作用。
3.其中,向量处理器是一种能够实现直接操作一维数组(向量)指令集的中央处理器,例如向量处理器可同时执行一条向量指令中所包含的多个操作请求。在向量处理器中多个处理单元可共享同一套取址、译码、地址计算和访存等控制部件,进而能够以较低的硬件开销充分开发应用程序的并行性。目前,如何为向量处理器提供高效灵活的数据供给支持是其充分发挥运算能力的表征。向量访存单元是向量处理器中用于从存储器中读数据或向存储器写入数据的单元。向量访存单元可通过地址计算单元计算得到访问存储器的地址,然后高带宽将数据在存储器和向量寄存器中搬移。但是在实际应用中发现,向量处理器访问存储器操作一般会消耗较长时间,从而降低向量处理器性能。因此,如何提升向量处理器访存数据性能是亟待解决的问题。
技术实现要素:4.本发明实施例提供一种向量处理器及相关数据访存方法,以提升向量处理器访存数据的性能。
5.第一方面,本发明实施例提供了一种向量处理器,其特征在于,包括:向量访存单元,所述向量访存单元与存储器耦合,所述存储器包括多个存储块block;所述向量访存单元,用于:接收访存指令;所述访存指令包括n个访存请求;n为大于0的整数;根据所述n个访存请求分别得到n个访存请求地址;确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的m个block;m为大于0且小于或等于n的整数;生成与所述m个block对应的m个总线请求,并向所述存储器发送所述m个总线请求。
6.在现有技术中,当向量处理器中的向量访存单元接收到访存指令,由于每条访存指令中可包括多个访存请求,因此向量访存单元可基于该访存指令中的访存请求得到多个访存请求地址,其中每个访存请求地址对应存储器中的一个存储块block,进一步针对每个访存请求地址向存储器发送相应的总线请求,进而可实现向量处理器从存储器读数据或向存储器写数据。例如,假设访存指令中包括2个访存请求,在向量访存单元接收到该访存指令后,基于该访存指令中的2个访存请求得到2个访存请求地址,如地址0、地址5,又假设存储器中的block0对应的地址范围为地址0
‑
地址5,则上述地址0对应block0,地址5对应block0,进一步地,向量访存单元基于地址0向存储器发送一个访存block0的总线请求,然后再基于地址5向存储器发送一个访存block0的总线请求。即现有技术中存在针对不同访
存请求需要重复访问同一个block而导致向量处理器读/写数据效率低的问题。
7.而在本发明实施例中,向量处理器中的向量访存单元在接收到访存指令后,首先根据访存指令中的访存请求得到多个访存请求地址,然后确定这些访存请求地址所对应的block,进而可以将访存请求地址属于同一个block的不同的访存请求进行融合(即对于一条访存指令来说,一个block最终对应一个总线请求),生成针对每个block的总线请求并向存储器发送这些总线请求,从而降低针对单个block的重复访存次数。例如,假设访存指令中包括2个访存请求,在向量访存单元接收到该访存指令后,基于该访存指令中的2个访存请求得到2个访存请求地址,如地址0、地址5,又假设存储器中的block0对应着地址范围为地址0
‑
地址5,则上述地址0、地址5都对应着block0,然后将地址0和地址5所对应的访存请求进行融合并生成一个访存block0的总线请求,进而仅向存储器发送一个访存block0的总线请求。因此本发明实施例通过对向量处理器中的向量访存单元进行改进,能够在向量访存单元从存储器读数据或向存储器写数据时,避免发送过多的总线请求去重复访问同一个存储块,进而从一定程度上减少了数据的访存次数,从而提高了向量处理器的访存性能和用户体验。
8.在一种可能的实现方式中,所述向量访存单元包括地址运算单元和请求融合单元;所述向量访存单元,具体用于:通过所述地址运算单元接收所述访存指令;所述访存指令包括所述n个访存请求;根据所述n个访存请求分别得到n个访存请求地址,并向所述请求融合单元发送所述n个访存请求地址;通过所述请求融合单元接收所述地址运算单元发送的所述n个访存请求地址,并确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的所述m个block;生成与所述m个block对应的所述m个总线请求,并向所述存储器发送所述m个总线请求。
9.在本发明实施例中,向量处理器中的向量访存单元包括地址运算单元和请求融合单元,其中,在地址运算单元接收到访存指令后,首先根据访存指令中的访存请求得到多个访存请求地址,并向请求融合单元发送得到的访存请求地址。进一步地,请求融合单元接收地址运算单元发送的多个访存请求地址并确定这些访存请求地址所对应的block,进而请求融合单元可以将访存请求地址属于同一个block的不同的访存请求进行融合(即对于一条访存指令来说,一个block最终对应一个总线请求),生成针对每个block的总线请求并向存储器发送这些总线请求,从而降低针对单个block的重复访存次数。因此,在向量访存单元从存储器读数据或向存储器写数据时,可避免发送过多的总线请求去重复访问同一个存储块,进而从一定程度上减少了数据的访存次数,从而提高了向量处理器的访存性能和用户体验。
10.在一种可能的实现方式中,所述地址运算单元包括l个地址运算器;每个所述地址运算器每个时钟周期基于一个所述访存请求得到一个所述访存请求地址;l为大于1的整数。
11.在本发明实施例中,由于向量访存单元中的地址运算单元可以包括多个地址运算器,因此这些地址运算器可以在同一个时钟周期并行计算不同访存请求的访存请求地址,从而提升计算访存请求地址的效率,进而提升向量处理器的访存性能和用户体验。
12.在一种可能的实现方式中,所述向量访存单元,具体用于:通过所述地址运算单元,将所述n个访存请求划分为s个请求集合;s为大于1的整数;每个所述请求集合包括的所
述访存请求小于或等于l个;分别根据所述s个请求集合得到s个访存请求地址集合;每个所述访存请求地址集合包括对应的请求集合中包括的访存请求的请求地址。
13.在本发明实施例中,过多的地址运算器会增加硬件的面积开销,因此在设计地址运算单元时可以合理配置l个地址运算器。当访存请求的数量大于地址运算器的个数时,可将访存请求进行分组得到多个请求集合,其中每个请求集合中的访存请求个数小于或等于地址运算器的个数,从而地址运算单元能够在一个时钟周期计算出一个请求集合中的访存请求所对应的访存请求地址集合,进而能够减少硬件的面积开销的同时实现并行计算访存请求地址。
14.在一种可能的实现方式中,s为n/l向上取整的数。
15.在本发明实施例中,对访存请求进行分组时,可以根据地址运算器的个数将访存请求地址分为s个请求集合,s为n/l向上取整的数,使得每个请求集合中包括尽可能多的访存请求,从而能够以最少的时钟周期计算得到n个访存请求地址,以提升计算访存请求地址的效率,进而提升向量处理器的访存性能和用户体验。
16.在一种可能的实现方式中,所述向量访存单元还包括数据寄存器;所述向量访存单元,具体用于:通过所述地址运算单元计算所述s个请求集合中的第i个请求集合所对应的第i个访存请求地址集合,并向所述数据寄存器发送所述第i个访存请求地址集合;i=0,1,2
……
s;通过所述数据寄存器接收所述地址运算单元发送的所述第i个访存请求地址集合,并存储所述第i个访存请求地址集合。
17.在本发明实施例中,对访存请求进行分组后得到了多个请求集合,由于地址运算单元每个时钟周期只能计算一个请求集合中的访存请求所对应的访存请求地址集合,因此在向量访存单元中可以增加数据寄存器,用于暂存前一个时钟周期所计算出的访存请求地址,避免访存请求地址丢失的情况。
18.在一种可能的实现方式中,所述向量访存单元,具体用于:当所述数据寄存器中存储了s个所述访存请求地址集合,通过所述数据寄存器向所述请求融合单元发送所述s个访存请求地址集合;通过所述请求融合单元接收所述数据寄存器发送的所述s个访存请求地址集合;所述s个访存请求地址集合中包括所述n个访存请求地址。
19.在本发明实施例中,当地址运算单元完成对s个请求集合的访存请求地址集合的计算后,数据寄存器中也记录下了s个访存请求地址集合(s个访存请求地址集合中包括n个访存请求的访存请求地址),因此数据寄存器会向请求融合单元发送所记录的访存请求地址,便于后续请求融合单元基于这n个访存请求地址生成总线请求。因此,在向量访存单元从存储器读数据或向存储器写数据时,可避免发送过多的总线请求去重复访问同一个存储块,进而从一定程度上减少了数据的访存次数,从而提高了向量处理器的访存性能和用户体验。
20.在一种可能的实现方式中,所述向量处理器还包括向量寄存器堆;所述n个访存请求为n个读数据请求;所述向量访存单元,还用于:分别接收所述存储器基于所述m个总线请求反馈的所述m个block中存储的数据;基于所述m个block中存储的数据,分别将所述n个读数据请求所对应的数据写入至所述向量寄存器。
21.在本发明实施例中,由于向量处理器无法直接读取存储器中的数据,因此可将存储器反馈的数据存储在向量寄存器中,便于通过向量寄存器快速读取存储器中的数据。基
于本发明实施例提供的向量处理器能够更加高效的读取存储器中的数据,进而提升向量处理器的访存性能和用户体验。
22.第二方面,本发明实施例提供了一种数据访存方法,其特征在于,应用于向量处理器;所述向量处理器包括向量访存单元,所述向量访存单元与存储器耦合,所述存储器包括多个存储块block;所述方法包括:通过所述向量访存单元接收访存指令;所述访存指令包括n个访存请求;n为大于0的整数;根据所述n个访存请求分别得到n个访存请求地址;确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的m个block;m为大于0且小于或等于n的整数;生成与所述m个block对应的m个总线请求,并向所述存储器发送所述m个总线请求。
23.在一种可能的实现方式中,所述向量访存单元包括地址运算单元和请求融合单元;所述通过所述向量访存单元接收访存指令,根据所述n个访存请求分别得到n个访存请求地址,确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的m个block,生成与所述m个block对应的m个总线请求,并向所述存储器发送所述m个总线请求,包括:通过所述向量访存单元中的所述地址运算单元接收所述访存指令;所述访存指令包括所述n个访存请求;根据所述n个访存请求分别得到n个访存请求地址,并向所述请求融合单元发送所述n个访存请求地址;通过所述向量访存单元中的所述请求融合单元接收所述地址运算单元发送的所述n个访存请求地址,并确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的所述m个block;生成与所述m个block对应的所述m个总线请求,并向所述存储器发送所述m个总线请求。
24.在一种可能的实现方式中,所述地址运算单元包括l个地址运算器;每个所述地址运算器每个时钟周期基于一个所述访存请求得到一个所述访存请求地址;l为大于1的整数。
25.在一种可能的实现方式中,所述根据所述n个访存请求分别得到n个访存请求地址,包括:通过所述向量访存单元中的所述地址运算单元,将所述n个访存请求划分为s个请求集合;s为大于1的整数;每个所述请求集合包括的所述访存请求小于或等于l个;分别根据所述s个请求集合得到s个访存请求地址集合;每个所述访存请求地址集合包括对应的请求集合中包括的访存请求的请求地址。
26.在一种可能的实现方式中,s为n/l向上取整的数。
27.在一种可能的实现方式中,所述向量访存单元还包括数据寄存器;所述根据所述n个访存请求分别得到n个访存请求地址,包括:通过所述向量访存单元中的所述地址运算单元计算所述s个请求集合中的第i个请求集合所对应的第i个访存请求地址集合,并向所述数据寄存器发送所述第i个访存请求地址集合;i=0,1,2
……
s;通过所述向量访存单元中的所述数据寄存器接收所述地址运算单元发送的所述第i个访存请求地址集合,并存储所述第i个访存请求地址集合。
28.在一种可能的实现方式中,所述向所述请求融合单元发送所述n个访存请求地址,包括:当所述数据寄存器中存储了s个所述访存请求地址集合,通过所述向量访存单元中的所述数据寄存器向所述请求融合单元发送所述s个访存请求地址集合;通过所述向量访存单元中的所述请求融合单元接收所述数据寄存器发送的所述s个访存请求地址集合;所述s个访存请求地址集合中包括所述n个访存请求地址。
29.在一种可能的实现方式中,所述向量处理器还包括向量寄存器堆;所述n个访存请求为n个读数据请求;所述方法还包括:通过所述向量访存单元分别接收所述存储器基于所述m个总线请求反馈的所述m个block中存储的数据;基于所述m个block中存储的数据,分别将所述n个读数据请求所对应的数据写入至所述向量寄存器。
30.第三方面,本技术提供一种半导体芯片,可包括上述第一方面中的任意一种实现方式所提供的向量处理器。
31.第四方面,本技术提供一种半导体芯片,可包括:上述第一方面中的任意一种实现方式所提供的向量处理器、耦合于所述多核处理器的内部存储器以及外部存储器。
32.第五方面,本技术提供一种片上系统soc芯片,该soc芯片包括上述第一方面中的任意一种实现方式所提供的向量处理器、耦合于所述向量处理器的内部存储器和外部存储器。该soc芯片,可以由芯片构成,也可以包含芯片和其他分立器件。
33.第六方面,本技术提供了一种芯片系统,该芯片系统包括上述第一方面中的任意一种实现方式所提供的多核处理器。在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于保存所述多核处理器在运行过程中所必要或相关的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其它分立器件。
34.第七方面,本技术提供一种处理装置,该处理装置具有实现上述第二面中的任意一种数据访存方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
35.第八方面,本技术提供一种终端,该终端包括处理器,该处理器为上述第一方面中的任意一种实现方式所提供的向量处理器。该终端还可以包括存储器,存储器用于与处理器耦合,其保存终端必要的程序指令和数据。该终端还可以包括通信接口,用于该终端与其它设备或通信网络通信。
36.第九方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述第二方面中任意一项所述的数据访存方法流程。
37.第十方面,本发明实施例提供了一种计算机程序,该计算机程序包括指令,当该计算机程序被处理器执行时,使得处理器可以执行上述第二方面中任意一项所述的数据访存方法流程。
附图说明
38.为了更清楚地说明本发明实施例或背景技术中的技术方案,下面将对本发明实施例或背景技术中所需要使用的附图进行说明。
39.图1a是本发明实施例提供的一种向量处理器的架构示意图。
40.图1b为本发明实施例提供的一种存储器的结构示意图。
41.图1c为本发明实施例提供的一种向量访存流水线示意图。
42.图2a为本发明实施例提供的一种向量处理器数据访问模式示意图。
43.图2b为本发明实施例提供的一种向量访存单元示意图。
44.图2c为本发明实施例提供的一种总线请求对比示意图。
45.图3a为本发明实施例提供的一种访存请求分组示意图。
46.图3b为本发明实施例提供的另一种向量访存单元示意图。
47.图3c为本发明实施例提供的另一种生成总线请求的示意图。
48.图3d为本发明实施例提供的一种向量寄存器示意图。
49.图4是本发明实施例提供的一种数据访存方法的流程示意图。
具体实施方式
50.下面将结合本发明实施例中的附图,对本发明实施例进行描述。
51.本技术的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
52.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
53.在本说明书中使用的术语“部件”、“模块”、“系统”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件、或执行中的软件。例如,部件可以是但不限于,在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。通过图示,在计算设备上运行的应用和计算设备都可以是部件。一个或多个部件可驻留在进程和/或执行线程中,部件可位于一个计算机上和/或分布在2个或更多个计算机之间。此外,这些部件可从在上面存储有各种数据结构的各种计算机可读介质执行。部件可例如根据具有一个或多个数据分组(例如来自与本地系统、分布式系统和/或网络间的另一部件交互的二个部件的数据,例如通过信号与其它系统交互的互联网)的信号通过本地和/或远程进程来通信。
54.首先,对本技术中的部分用语进行解释说明,以便于本领域技术人员理解。
55.(1)指令流水线,是为提高处理器执行指令的效率,把一条指令的操作分成多个细小的步骤,每个步骤由专门的电路完成的方式。例如,一条指令要执行要经过3个阶段:取指令、解码、执行,每个阶段都要花费一个机器周期,如果没有采用流水线技术,那么这条指令执行需要3个机器周期;如果采用了指令流水线技术,那么当这条指令完成“取指”后进入“解码”的同时,下一条指令就可以进行“取指”了,这样就提高了指令的执行效率。
56.(2)执行单元(execution unit,eu)它负责指令的执行,实际是既有控制器的功能也有运算器的功能。
57.(3)寄存器文件(register file,rf)又称寄存器堆,是cpu中多个寄存器组成的阵列,可由触发器(flip
‑
flop)实现,若所需的存储容量较大时也可以由快速的静态随机读写存储器(sram)实现。这种ram具有专门的读端口与写端口,可以多路并发访问不同的寄存器。
58.(4)集成电路(integrated circuit,ic),是一种微型电子器件或部件。采用一定的工艺,把一个电路中所需的晶体管、电阻、电容和电感等元件及布线互连一起,制作在一小块或几小块半导体晶片或介质基片上,然后封装在一个管壳内,成为具有所需电路功能
的微型结构;即ic芯片是将大量的微电子元器件(晶体管、电阻、电容等)形成的集成电路放在一块塑基上,做成一块芯片。
59.基于上述提出的技术问题为了便于理解本发明实施例,下面先对本发明实施例所基于的一种向量处理器架构进行描述。请参见图1a,图1a是本发明实施例提供的一种向量处理器的架构示意图,该向量处理器01可以位于任意一个电子设备中,如电脑、计算机、手机、平板、个人数字助理、智能穿戴设备、智能车载或智能家电等各类设备中。该向量处理器01具体可以是芯片或芯片组或搭载有芯片或者芯片组的电路板。该芯片或芯片组或搭载有芯片或芯片组的电路板可在必要的软件驱动下工作。具体地,
60.向量处理器01可以包括至少一个处理器核10,而处理器核10可包括指令缓存单元101(cache)、指令获取单元102(fetch)、指令派发单元103(dispatch)以及与指令派发单元103连接的标量单元104和向量单元105。其中,指令缓存单元101为向量处理器01中的临时存储器,该临时存储器的容量较小但数据交换速度较快,以存储一些指令包;指令获取单元102(fetch)以从指令缓存单元101取出指令并发送给指令派发单元103;指令派发单元103以完成待执行指令的调度和分发;标量单元104和向量单元105均作为向量处理器01的执行单元(eu,也可以称之为功能单元)以完成各个类型的指令任务。具体地,标量单元104主要负责处理应用中的串行执行部分、执行分支、中断以及系统配置等任务;向量单元105主要对应用中的并行任务进行加速。标量单元104和向量单元105可采用统一(或分离)的指令获取单元102和指令派发单元103从指令缓存单元101中取出指令进而向执行单元派发指令。
61.此外,向量单元105可包括多个并行的处理元素(processing element,pe),处理元素从向量寄存器堆1051(vector register file,vrf)中读出数据进行计算并写入向量寄存器堆1051中。向量寄存器堆1051的数据通过向量访存单元1052与存储器02高带宽地进行数据交换。接下来将基于图1b,对上述提及的存储器02的结构进行说明,请参见图1b,图1b为本发明实施例提供的一种存储器的结构示意图,图中存储器02为非易失性存储器,断电后其存储的内容不会丢失。存储器02可用于长期存储向量处理器01运行所涉及的指令和数据,如启动程序、操作系统、应用程序和数据等。需要说明的是,由于向量处理器01不能直接读取存储器02中的数据也不能直接向存储器02写入数据,因此,向量处理器01中的向量单元105在执行读数据(或写数据)指令时,实际上是通过向量访存单元1052向存储器02发送总线请求将存储在存储器02中的待读内容先临时加载至向量寄存器堆1051中,然后再由向量单元105从向量寄存器堆1051中读出;而在执行写数据(即存储)指令时,实际上是由向量单元105先将待存储数据临时写入至向量寄存器堆1051中,然后再通过向量访存单元1052向存储器02发送总线请求将数据从向量寄存器堆1051存储至存储器02中。存储器02可以包括flash闪存(例如,nand闪存、nor闪存等)、通用闪存存储器(universal flash storage,ufs)、嵌入式多媒体卡emmc、通用闪存存储多芯片封装umcp存储器、嵌入式多媒体卡多芯片封装emcp存储器、固态驱动器(ssd)等中的一个或多个。存储器02的存储介质阵列20可以包括多个用于存储数据的存储块block,其中每个block可包括m个页(page),每个页都可用于存储数据。
62.在一种可能的实现方式中,该向量处理器01中可包括多个处理器核。其中,各个处理器核之间可以为同构也可以为异构,也即处理器核10与其他处理器核之间的结构可以相同也可以不同,本发明实施例中对此不作具体限定。可选的,处理器核10可以作为主处理
核,除处理器核10外的其他处理器核可以作为从处理核,且主处理核与多个从处理核之间可位于一个或多个芯片(ic)中。可以理解的是,主处理核与其他从处理核之间可通过总线或其他方式耦合通信,此处不作具体限定。
63.可以理解的是,图1a中向量处理器的结构只是本发明实施例提供的一些示例性的实施方式,本发明实施例中的处理器的结构包括但不仅限于以上实现方式。
64.基于本技术提供的上述向量处理器的架构,本发明实施例还提供一种适用于上述向量处理器架构的向量访存流水线结构,尽管不同的向量访存流水线均略有不同,但其具体的操作过程类似。如图1c所示,图1c为本发明实施例提供的一种向量访存流水线示意图,图中该向量访存流水线03结构中可包括向量写数据流水线31和向量读数据流水线32。其中,向量写数据流水线31可分为指令译码栈301、地址计算栈302、请求仲裁栈303、访问存储器栈304;向量读数据流水线32可分为指令译码栈301、地址计算栈302、请求仲裁栈303、访问存储器栈304、数据返回栈305、写入vr栈306。具体的,
65.在向量写数据流水线31和向量读数据流水线32的第一栈均为指令译码栈301,在该栈中向量访存指令被解析得到了基址、偏移寄存器的编号、源(或目的)寄存器编号,并且向基址和偏移寄存器发送访存指令。如果是读数据指令,则该栈将发送读取源操作数vr的请求;如果是写数据指令,则该栈将目的操作数vr的编号传递到下一栈。在地址计算栈302主要对读取的基址寄存器和偏移寄存器的内容进行相加操作,进而得到访问存储器的地址,并将从vr中读出的数据或vr的编号传递到下一栈。在请求仲裁栈303主要判断是否能够获得访问存储器的权限,并将访存请求地址、从vr中读出的数据或vr的编号传递到下一栈。在访问存储器栈304主要根据访存请求地址对存储器进行读或写,并将vr的编号发送到下一栈,向量写数据流水线31在这一栈结束。在数据返回栈305等待从存储器返回的数据,最后在写入vr栈306将存储器返回的数据写入到vr中,至此向量读数据流水线32结束。需要说明的是,向量访存流水线结构可以依据每个处理器核的结构不同而不同,因此,本技术中所指的向量访存流水线结构是指处理器核10的流水线结构,而不对其他处理器核的流水线结构具体限定。
66.在上述向量访存流水线03结构中,向量处理器01中的每条访存指令均要经历上述操作步骤,但是多条访存指令的不同操作步骤可以同时执行,因而可以从总体上加快指令流速度,缩短了程序执行时间。可以理解的是,上述向量处理器架构和向量访存流水线结构只是本发明实施例提供的一些示例性的实施方式,本发明实施例中的向量处理器架构和向量访存流水线结构包括但不仅限于以上实现方式。
67.基于本技术中上述图1a提供的向量处理器的架构,在以下发明实施例中,向量处理器01可包括向量访存单元1052,所述向量访存单元1052与存储器02耦合,所述存储器02包括多个存储块block。具体实现的功能可以包括如下:
68.所述向量访存单元1052,用于接收访存指令;所述访存指令包括n个访存请求;n为大于0的整数;向量访存单元1052根据所述n个访存请求分别得到n个访存请求地址;向量访存单元1052确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的m个block;m为大于0且小于或等于n的整数;向量访存单元1052生成与所述m个block对应的m个总线请求,并向所述存储器发送所述m个总线请求。具体地,访存指令可以包括读数据指令或写数据指令,其中每个访存指令中可包括多个访存请求;访存请求地址为向量处理器01
待访问存储器02中的地址;存储器02中的存储块中可包括多个页分别用于存储数据,其中每个页都对应着一个地址,因此一个存储块中可以对应多个地址。需要说明的是,向量处理器01的数据访问模式一般可分为三种,分别是连续数据访问、向量元素之间以某一个固定的间隔进行访问和元素之间的地址完全离散。例如,请参见图2a,图2a为本发明实施例提供的一种向量处理器数据访问模式示意图,图中侧重说明向量元素之间以某一个固定的间隔进行访问和元素之间的地址完全离散两种情况,假设存储器02中包括3个存储块,分别为block0、block1、block2,block0对应地址0
‑
地址5,block1对应地址6
‑
地址11,block2对应地址12
‑
地址17。其中,针对于向量元素之间以某一个固定的间隔进行访问来说,访存指令可为从地址0开始并以一个元素的固定间隔进行读数据,因此访存指令中可包括读地址0、读地址2、读地址4、读地址6、读地址8、读地址10、读地址12、读地址14、读地址16的请求;针对元素之间的地址完全离散来说,需要访问的元素之间地址是离散的,因此访存指令中可包括读地址1、读地址2、读地址4、读地址6、读地址10、读地址12的请求。
69.在一种可能的实现方式中,所述向量访存单元包括地址运算单元和请求融合单元;所述向量访存单元,具体用于:通过所述地址运算单元接收所述访存指令;所述访存指令包括所述n个访存请求;通过所述地址运算单元根据所述n个访存请求分别得到n个访存请求地址,并向所述请求融合单元发送所述n个访存请求地址;通过所述请求融合单元接收所述地址运算单元发送的所述n个访存请求地址,并确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的所述m个block;通过所述请求融合单元生成与所述m个block对应的所述m个总线请求,并向所述存储器发送所述m个总线请求。具体地,请参见图2b,图2b为本发明实施例提供的一种向量访存单元示意图,图中向量访存单元1052中包括了地址运算单元10521和请求融合单元10522,其中,在地址运算单元10521接收到访存指令后,首先根据访存指令中的访存请求得到多个访存请求地址,并向请求融合单元10522发送得到的访存请求地址。进一步地,请求融合单元10522接收地址运算单元10521发送的多个访存请求地址并确定这些访存请求地址所对应的block,进而请求融合单元10522可以将访存请求地址属于同一个block的不同的访存请求进行融合(即对于一条访存指令来说,一个block最终对应一个总线请求),生成针对每个block的总线请求并向存储器发送这些总线请求,从而降低针对单个block的重复访存次数。例如,图2c所示,图2c为本发明实施例提供的一种总线请求对比示意图,假设访存指令中包括3个访存请求,存储器02中包括至少一个存储块block0,其中block0对应地址0
‑
地址5。图中当地址运算单元接收到访存指令后,可根据访存指令中的3个访存请求得到3个访存请求地址,分别为地址0、地址2和地址4,如图2c中(a)所示,现有技术中的向量访存单元将逐一根据访存请求地址生成3个总线请求,并依次向存储器02发送这3个总线请求;又如图2c中(b)所示,在本发明实施例中通过对向量访存单元进行改进,当地址运算单元10521计算出3个访存请求的地址后,将这3个地址发送给请求融合单元10522,进一步请求融合单元10522能够确定这3个地址都对应着同一个block(block0),因此将这三个地址所对应的访存请求进行融合,生成一个去访问block0的总线请求,并向存储器02发送该总线请求。与现有技术相比减少了向存储器02发送总线请求的数量,因此通过本发明实施例提供的向量处理器能够在从存储器读数据或向存储器写数据时,可避免发送过多的总线请求去重复访问同一个存储块,进而从一定程度上减少了数据的访存次数,从而提高了向量处理器的访存性能和用户体验。
70.在一种可能的实现方式中,所述地址运算单元包括l个地址运算器;每个所述地址运算器每个时钟周期基于一个所述访存请求得到一个所述访存请求地址;l为大于1的整数。具体地,由于向量访存单元中的地址运算单元可以包括多个地址运算器,因此这些地址运算器可以在同一个时钟周期并行计算不同访存请求的访存请求地址,从而提升计算访存请求地址的效率,进而提升向量处理器的访存性能和用户体验。
71.在一种可能的实现方式中,所述向量访存单元,具体用于:通过所述地址运算单元,将所述n个访存请求划分为s个请求集合;s为大于1的整数;每个所述请求集合包括的所述访存请求小于或等于l个;通过所述地址运算单元分别根据所述s个请求集合得到s个访存请求地址集合;每个所述访存请求地址集合包括对应的请求集合中包括的访存请求的请求地址。具体地,由于过多的地址运算器会增加硬件的面积开销,因此在设计地址运算单元时可以合理配置l个地址运算器。当访存请求的数量大于地址运算器的个数时,可将访存请求进行分组得到多个请求集合,其中每个请求集合中的访存请求个数小于或等于地址运算器的个数,从而地址运算单元能够在一个时钟周期计算出一个请求集合中的访存请求所对应的访存请求地址集合。例如,如图3a所示,图3a为本发明实施例提供的一种访存请求分组示意图,图中将n个访存请求划分为s个请求集合,然后可通过地址运算单元10521中的l个地址运算器依次计算每个请求集合所对应的访存请求地址集合。因此通过本发明实施例提供的向量处理器能够减少芯片的面积开销的同时实现并行计算访存请求地址。
72.在一种可能的实现方式中,s为n/l向上取整的数。具体地,对访存请求进行分组时,可以根据地址运算器的个数将访存请求地址分为s个请求集合,s为n/l向上取整的数,使得每个请求集合中包括尽可能多的访存请求,从而能够以最少的时钟周期计算得到n个访存请求地址,以提升计算访存请求地址的效率,进而提升向量处理器的访存性能和用户体验。例如,假设访存指令中包括9个访存请求,地址运算单元中包括3个地址运算器,因此可将这9个访存请求划分为3个请求集合,然后地址运算单元可在三个时钟周期内完成对访存请求地址的计算。
73.在一种可能的实现方式中,所述向量访存单元还包括数据寄存器;所述向量访存单元,具体用于:通过所述地址运算单元计算所述s个请求集合中的第i个请求集合所对应的第i个访存请求地址集合,并向所述数据寄存器发送所述第i个访存请求地址集合;i=0,1,2
……
s;通过所述数据寄存器接收所述地址运算单元发送的所述第i个访存请求地址集合,并存储所述第i个访存请求地址集合。具体地,对访存请求进行分组后得到了多个请求集合,由于地址运算单元每个时钟周期只能计算一个请求集合中的访存请求所对应的访存请求地址集合,因此在向量访存单元中可以增加数据寄存器,用于暂存前一个时钟周期所计算出的访存请求地址,避免访存请求地址丢失的情况。例如,如图3b所示,图3b为本发明实施例提供的另一种向量访存单元示意图,图中向量访存单元1052包括地址运算单元10521、请求融合单元10522、数据寄存器10523,其中当地址运算单元10521每计算出一个请求集合的访存请求地址集合后,会将计算出的结果发送给数据寄存器10523暂存,避免访存请求地址丢失。
74.在一种可能的实现方式中,所述向量访存单元,具体用于:当所述数据寄存器中存储了s个所述访存请求地址集合,通过所述数据寄存器向所述请求融合单元发送所述s个访存请求地址集合;通过所述请求融合单元接收所述数据寄存器发送的所述s个访存请求地
址集合;所述s个访存请求地址集合中包括所述n个访存请求地址。具体地,当地址运算单元完成对s个请求集合的访存请求地址集合的计算后,数据寄存器10523中也记录下了s个访存请求地址集合(s个访存请求地址集合中包括n个访存请求的访存请求地址),因此数据寄存器10523会向请求融合单元10522发送所记录的访存请求地址,便于后续请求融合单元10522基于这n个访存请求地址生成总线请求。例如,假设访存指令中包括4个访存请求,地址运算单元10521中包括2个地址运算器,存储器02中包括至少2个存储块,其中block0对应地址0
‑
地址5,block1对应地址6
‑
地址11。请参见图3c,图3c为本发明实施例提供的另一种生成总线请求的示意图,图中将访存请求划分为2个请求集合后,首先在地址运算单元10521中计算出第一个请求集合所对应的访存请求地址分别为地址0和地址2,进一步将计算出的地址记录在数据寄存器10523中,接下来在下一个时钟周期计算出第二个请求集合所对应的访存请求地址分别为地址4和地址10,进而将计算出的结果记录在数据寄存器10523中,当数据寄存器10523中记录下这4个访存请求所对应的访存请求地址后,将这些地址发送到请求融合单元10522,然后在请求融合单元10522中确定地址0、地址2和地址4对应block0,地址4对应block1,进而生成两个总线请求,并依次向存储器发送这两总线请求。与现有技术相比减少了向存储器02发送总线请求的数量,因此通过本发明实施例提供的向量处理器能够在从存储器读数据或向存储器写数据时,可避免发送过多的总线请求去重复访问同一个存储块,进而从一定程度上减少了数据的访存次数,从而提高了向量处理器的访存性能和用户体验。
75.在一种可能的实现方式中,所述向量处理器还包括向量寄存器堆;所述n个访存请求为n个读数据请求;所述向量访存单元,还用于:分别接收所述存储器基于所述m个总线请求反馈的所述m个block中存储的数据;基于所述m个block中存储的数据,分别将所述n个读数据请求所对应的数据写入至所述向量寄存器。具体地,由于向量处理器无法直接读取存储器中的数据,因此可将存储器反馈的数据存储在向量寄存器中,便于通过向量寄存器快速读取存储器中的数据。例如,如图3d所示,图3d为本发明实施例提供的一种向量寄存器示意图,图中向量寄存器堆1051中可包括多个向量寄存器,当向量访存单元1052接收到存储器02反馈的数据后,可基于访存请求将数据依次存储在向量寄存器中。基于本发明实施例提供的向量处理器能够更加高效的读取存储器中的数据,进而提升向量处理器的访存性能和用户体验。
76.在本发明实施例中,向量处理器中的向量访存单元在接收到访存指令后,首先根据访存指令中的访存请求得到多个访存请求地址,然后确定这些访存请求地址所对应的block,进而可以将访存请求地址属于同一个block的不同的访存请求进行融合(即对于一条访存指令来说,一个block最终对应一个总线请求),生成针对每个block的总线请求并向存储器发送这些总线请求,从而降低针对单个block的重复访存次数。因此本发明实施例通过对向量处理器中的向量访存单元进行改进,能够在向量访存单元从存储器读数据或向存储器写数据时,避免发送过多的总线请求去重复访问同一个存储块,进而从一定程度上减少了数据的访存次数,从而提高了向量处理器的访存性能和用户体验。
77.上述详细阐述了本发明实施例的向量处理器,下面提供了本发明实施例的相关方法。
78.请参见图4,图4是本发明实施例提供的一种数据访存方法的流程示意图,该方法
适用于上述图1a中的任意一种向量处理器以及包含所述向量处理器的设备。该方法可以包括以下步骤s401
‑
步骤s404。该向量处理器包括向量访存单元,所述向量访存单元与存储器耦合,所述存储器包括多个存储块block。其中,
79.步骤s401:通过所述向量访存单元接收访存指令。
80.具体地,所述访存指令包括n个访存请求;n为大于0的整数。
81.步骤s402:通过所述向量访存单元根据所述n个访存请求分别得到n个访存请求地址。
82.步骤s403:通过所述向量访存单元确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的m个block。
83.具体地,m为大于0且小于或等于n的整数。
84.步骤s404:通过所述向量访存单元生成与所述m个block对应的m个总线请求,并向所述存储器发送所述m个总线请求。
85.在一种可能的实现方式中,所述向量访存单元包括地址运算单元和请求融合单元;所述通过所述向量访存单元接收访存指令,根据所述n个访存请求分别得到n个访存请求地址,确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的m个block,生成与所述m个block对应的m个总线请求,并向所述存储器发送所述m个总线请求,包括:通过所述向量访存单元中的所述地址运算单元接收所述访存指令;所述访存指令包括所述n个访存请求;根据所述n个访存请求分别得到n个访存请求地址,并向所述请求融合单元发送所述n个访存请求地址;通过所述向量访存单元中的所述请求融合单元接收所述地址运算单元发送的所述n个访存请求地址,并确定所述n个访存请求地址所属的地址范围在所述多个block中所对应的所述m个block;生成与所述m个block对应的所述m个总线请求,并向所述存储器发送所述m个总线请求。
86.在一种可能的实现方式中,所述地址运算单元包括l个地址运算器;每个所述地址运算器每个时钟周期基于一个所述访存请求得到一个所述访存请求地址;l为大于1的整数。
87.在一种可能的实现方式中,所述根据所述n个访存请求分别得到n个访存请求地址,包括:通过所述向量访存单元中的所述地址运算单元,将所述n个访存请求划分为s个请求集合;s为大于1的整数;每个所述请求集合包括的所述访存请求小于或等于l个;分别根据所述s个请求集合得到s个访存请求地址集合;每个所述访存请求地址集合包括对应的请求集合中包括的访存请求的请求地址。
88.在一种可能的实现方式中,s为n/l向上取整的数。
89.在一种可能的实现方式中,所述向量访存单元还包括数据寄存器;所述根据所述n个访存请求分别得到n个访存请求地址,包括:通过所述向量访存单元中的所述地址运算单元计算所述s个请求集合中的第i个请求集合所对应的第i个访存请求地址集合,并向所述数据寄存器发送所述第i个访存请求地址集合;i=0,1,2
……
s;通过所述向量访存单元中的所述数据寄存器接收所述地址运算单元发送的所述第i个访存请求地址集合,并存储所述第i个访存请求地址集合。
90.在一种可能的实现方式中,所述向所述请求融合单元发送所述n个访存请求地址,包括:当所述数据寄存器中存储了s个所述访存请求地址集合,通过所述向量访存单元中的
所述数据寄存器向所述请求融合单元发送所述s个访存请求地址集合;通过所述向量访存单元中的所述请求融合单元接收所述数据寄存器发送的所述s个访存请求地址集合;所述s个访存请求地址集合中包括所述n个访存请求地址。
91.在一种可能的实现方式中,所述向量处理器还包括向量寄存器堆;所述n个访存请求为n个读数据请求;所述方法还包括:通过所述向量访存单元分别接收所述存储器基于所述m个总线请求反馈的所述m个block中存储的数据;基于所述m个block中存储的数据,分别将所述n个读数据请求所对应的数据写入至所述向量寄存器。
92.需要说明的是,本发明实施例中所描述的数据访存方法中各个步骤的实现在上述实施例中的向量处理器中完成,此处不再赘述。
93.本技术提供一种半导体芯片,可包括上述向量处理器实施例中的任意一种实现方式所提供的向量处理器。
94.本技术提供一种半导体芯片,可包括:上述向量处理器实施例中的任意一种实现方式所提供的向量处理器、耦合于所述多核处理器的内部存储器以及外部存储器。
95.本技术提供一种片上系统soc芯片,该soc芯片包括上述向量处理器实施例中的任意一种实现方式所提供的向量处理器、耦合于所述向量处理器的内部存储器和外部存储器。该soc芯片,可以由芯片构成,也可以包含芯片和其他分立器件。
96.本技术提供了一种芯片系统,该芯片系统包括上述向量处理器实施例中的任意一种实现方式所提供的多核处理器。在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于保存所述多核处理器在运行过程中所必要或相关的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其它分立器件。
97.本技术提供一种处理装置,该处理装置具有实现上述数据访存方法实施例中的任意一种数据访存方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
98.本技术提供一种终端,该终端包括处理器,该处理器为上述数据访存方法实施例中的任意一种实现方式所提供的向量处理器。该终端还可以包括存储器,存储器用于与处理器耦合,其保存终端必要的程序指令和数据。该终端还可以包括通信接口,用于该终端与其它设备或通信网络通信。
99.本技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述数据访存方法实施例中任意一项所述的数据访存方法流程。
100.本发明实施例提供了一种计算机程序,该计算机程序包括指令,当该计算机程序被处理器执行时,使得处理器可以执行上述数据访存方法实施例中任意一项所述的数据访存方法流程。
101.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
102.需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可能可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申
请所必须的。
103.在本技术所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
104.上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
105.另外,在本技术各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
106.上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以为个人计算机、服务端或者网络设备等,具体可以是计算机设备中的处理器)执行本技术各个实施例上述方法的全部或部分步骤。其中,而前述的存储介质可包括:u盘、移动硬盘、磁碟、光盘、只读存储器(read
‑
onlymemory,缩写:rom)或者随机存取存储器(randomaccessmemory,缩写:ram)等各种可以存储程序代码的介质。
107.以上所述,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。