一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

处理单元、片上系统、计算装置及方法与流程

2022-02-18 23:54:52 来源:中国专利 TAG:


1.本发明涉及芯片领域,更具体而言,涉及一种处理单元、片上系统、计算装置及方法。


背景技术:

2.矢量运算是能够并行产生多个元素的执行结果的运算。即,对于同类运算,如针对每种货物计算利润的运算,可以根据寄存器能力等要求,一次取出多种货物的单价、销售数量和利润率并行计算。这些单价、销售数量和利润率即矢量的元素,矢量包含的元素数即单次能够并行运行的元素个数。相比于单元素运算,矢量运算大大提高了运算效率。
3.进行上述矢量运算时,需要指示运算所需的矢量参数,包括矢量中的元素大小和单次运算的元素个数等。一种现有技术是将它们编码在算术运算指令内,例如arm neon、intel sse等simd指令集。这样做的缺点是占用指令的编码空间,且不利于软件代码段的复用。另一种现有技术是通过未编码在矢量运算指令内的其它方式来指定,例如risc-v vector、arm sve等vector指令集。例如,可以在真正用于矢量运算的矢量运算指令之外,设置矢量参数设置指令,用于指定矢量运算所需的矢量参数。之后的矢量运算指令就根据该矢量参数设置指令指定的矢量参数来执行。它在矢量运算指令之外的一条单独的矢量参数设置指令中指定,不会占用矢量运算指令的编码空间。而且,由于它通过单独的一条矢量参数设置指令设置之后的很多条矢量运算指令需要的矢量参数,有利于软件代码段的复用。
4.但是,由于矢量运算指令需要等待矢量参数设置指令配置矢量参数,才可以执行,即矢量运算指令和矢量参数设置指令之间存在矢量参数的相关性(dependency),这将大大降低矢量运算指令的执行性能。


技术实现要素:

5.有鉴于此,本发明实施例旨在提高矢量运算指令的执行性能。
6.为了达到这个目的,根据本公开的一方面,提供了一种处理单元,包括:
7.取指令单元,用于顺序取回矢量参数设置指令和矢量运算指令;
8.矢量参数预测单元,用于根据所述矢量参数设置指令预测立即数型矢量参数;
9.指令译码单元,用于对取回的矢量参数设置指令和矢量运算指令进行分别译码;
10.矢量执行单元,用于在不等待译码后的矢量参数设置指令执行完毕的情况下,根据预测的立即数型矢量参数执行译码后的矢量运算指令。
11.可选地,所述矢量执行单元包括矢量参数设置子单元和矢量运算子单元,所述矢量参数设置子单元用于执行译码后的矢量参数设置指令,所述矢量运算子单元用于根据预测的立即数型矢量参数执行译码后的矢量运算指令。
12.可选地,所述矢量运算子单元进一步用于:用所述矢量运算子单元接收到的译码后矢量运算指令的前一译码后矢量运算指令中的非立即数型矢量参数作为所述接收到的译码后矢量运算指令中的非立即数型矢量参数,并根据预测的立即数型矢量参数,执行译
码后的矢量运算指令。
13.可选地,所述立即数型矢量参数包括矢量中的元素大小,所述非立即数型矢量参数包括单次运算的元素个数。
14.可选地,所述矢量参数设置子单元设置有矢量参数寄存器,其中,如果所述矢量参数设置子单元执行所述译码后的矢量参数设置指令后设置的非立即数型矢量参数与所述矢量参数寄存器中的非立即数型矢量参数不一致,将所述设置的非立即数型矢量参数传递给所述矢量运算子单元,由所述矢量运算子单元丢弃该矢量运算指令的指示结果,并根据该传递的非立即数型矢量参数和预测的立即数型矢量参数,重新执行该译码后的矢量运算指令。
15.可选地,所述矢量参数设置子单元还用执行所述译码后的矢量参数设置指令后设置的矢量参数,更新所述矢量参数寄存器。
16.可选地,如果所述矢量参数设置子单元执行所述译码后的矢量参数设置指令后设置的非立即数型矢量参数与所述矢量参数寄存器中的非立即数型矢量参数一致,用执行所述译码后的矢量参数设置指令后设置的矢量参数,更新所述矢量参数寄存器。
17.可选地,如果所述矢量运算子单元执行失败,调用所述矢量参数寄存器中的立即数型和非立即数型矢量参数,执行译码后的矢量运算指令。
18.可选地,所述矢量参数设置子单元执行译码后的矢量参数设置指令后,检查设置的矢量参数的合法性,且在设置的矢量参数不合法的情况下,按照预定规则,将所述矢量参数设置成合法。
19.可选地,所述取指令单元从所述处理单元外部的存储器顺序取回矢量参数设置指令和矢量运算指令。
20.根据本公开的一方面,提供了一种片上系统,包括如上所述的处理单元。
21.根据本公开的一方面,提供了一种计算装置,包括如上所述的处理单元。
22.根据本公开的一方面,提供了一种矢量运算执行方法,包括:
23.顺序获取矢量参数设置指令和矢量运算指令;
24.根据所述矢量参数设置指令预测立即数型矢量参数;
25.对取回的矢量参数设置指令和矢量运算指令分别进行译码;
26.在不等待译码后的矢量参数设置指令执行完毕的情况下,根据预测的立即数型矢量参数执行译码后的矢量运算指令。
27.可选地,所述根据预测的立即数型矢量参数执行译码后的矢量运算指令,包括:用译码后矢量运算指令的前一译码后矢量运算指令中的非立即数型矢量参数作为所述译码后矢量运算指令中的非立即数型矢量参数,并根据预测的立即数型矢量参数,执行译码后的矢量运算指令。
28.可选地,所述立即数型矢量参数包括矢量中的元素大小,所述非立即数型矢量参数包括单次运算的元素个数。
29.可选地,预先设置有矢量参数寄存器,在根据预测的立即数型矢量参数执行译码后的矢量运算指令之后,所述方法还包括:如果执行所述译码后的矢量参数设置指令后设置的非立即数型矢量参数与所述矢量参数寄存器中的非立即数型矢量参数不一致,丢弃该矢量运算指令的指示结果,并根据该设置的非立即数型矢量参数和预测的立即数型矢量参
数,重新执行该译码后的矢量运算指令。
30.可选地,在丢弃该矢量运算指令的指示结果,并根据该设置的非立即数型矢量参数和预测的立即数型矢量参数,重新执行该译码后的矢量运算指令之后,所述方法还包括:用执行所述译码后的矢量参数设置指令后设置的矢量参数,更新所述矢量参数寄存器。
31.可选地,在根据预测的立即数型矢量参数执行译码后的矢量运算指令之后,所述方法还包括:如果所述矢量参数设置子单元执行所述译码后的矢量参数设置指令后设置的非立即数型矢量参数与所述矢量参数寄存器中的非立即数型矢量参数一致,用执行所述译码后的矢量参数设置指令后设置的矢量参数,更新所述矢量参数寄存器。
32.可选地,在根据预测的立即数型矢量参数执行译码后的矢量运算指令之后,所述方法还包括:如果所述矢量运算子单元执行失败,调用所述矢量参数寄存器中的立即数型和非立即数型矢量参数,执行译码后的矢量运算指令。
33.可选地,在对取回的矢量参数设置指令和矢量运算指令进行译码之后,所述方法还包括:执行译码后的矢量参数设置指令,检查执行该矢量参数设置指令后设置的矢量参数的合法性,且在设置的矢量参数不合法的情况下,按照预定规则,将所述矢量参数设置成合法。
34.可选地,所述顺序获取矢量参数设置指令和矢量运算指令,包括:从处理单元外部的存储器顺序获取矢量参数设置指令和矢量运算指令。
35.对于立即数型矢量参数,其在矢量参数设置指令中是可以直接读出的,因此可以提取预测出来。这样,矢量运算指令就可以根据预测出的立即数型矢量参数先执行,不用等待矢量参数设置指令执行完毕后执行。即,它消除了矢量运算指令和矢量参数设置指令之间存在的相关性,提高了矢量运算指令的执行性能和效率。
附图说明
36.通过参考以下附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
37.图1示出本公开实施例的处理单元所应用的通用终端的构架图;
38.图2是本公开一个实施例中通用终端中处理单元的结构图;
39.图3示出本公开实施例的处理单元所应用的多核高性能终端的构架图;
40.图4示出了根据本公开一个实施例的多核高性能终端中处理单元的结构图;
41.图5示出了根据本公开一个实施例的多核高性能终端中处理单元的结构图;
42.图6示出了根据本公开一个实施例的矢量运算执行方法的流程图。
具体实施方式
43.以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
44.在本文中使用以下术语。
45.矢量运算:矢量运算是能够并行产生多个元素的执行结果的运算。即,对于同类运
算,如针对每种货物计算利润的运算,可以根据寄存器能力等要求,一次取出多种货物的单价、销售数量和利润率并行计算。
46.元素:矢量运算的并行计算中的一个计算所针对的运算对象为元素。在上述一次取出多种货物的单价、销售数量和利润率并行计算的例子中,这些单价、销售数量和利润率即矢量的元素,矢量包含的元素数即单次能够并行运行的元素个数。
47.矢量运算指令:用于执行上述矢量运算的指令。例如,vadd.vvv8,v8,v4是一条矢量加法指令,其中,v8,v8,v4是该指令用到的操作数。
48.矢量参数:矢量参数是执行矢量运算指令时用到的资源配置参数,例如矢量中的元素大小和单次运算的元素个数。它不是矢量运算指令中的操作数。操作数是矢量运算的对象。矢量参数不是运算的对象,而是反映了运算时分配的资源(如占寄存器的位数)情况等。
49.矢量中的元素大小:矢量中的元素大小是指矢量中一个元素占矢量寄存器的多少位(bit)。假设矢量寄存器的总宽度为128位,让矢量中的一个元素占多少位,就决定了矢量寄存器最多能够容纳多少个元素,即同时最多能够多少个元素并行运算。例如,如果矢量中的一个元素占16位,矢量寄存器就能够同时容纳最多8个元素,可以最多让8个元素同时并行运算。
50.单次运算的元素个数:它指示实际中要取回进行并行计算的元素数目。它小于等于上述矢量寄存器最多容纳的元素数目。例如,在上述矢量寄存器能够同时容纳最多8个元素的情况下,如果有20个元素需要运算(例如需要利用利润=商品单价
×
商品销售额
×
商品利润率,计算20种不同商品的利润),则第一批可以单次计算8个元素,即8个元素放置在一个矢量中进行矢量运算;第二批可以单次计算8个元素,即8个元素放置在一个矢量中进行矢量运算;第三批单次计算剩余的4个元素,即剩下的4个元素放置在一个矢量中进行矢量运算。对于第一、二批来说,单次运算的元素个数为8;对于第三批来说,单次运算的元素个数为4。
51.矢量参数设置指令:脱离于矢量运算指令、用于设置矢量运算指令用到的矢量参数的指令。由于将矢量参数直接编码到矢量运算指令中不利于软件代码段的复用,因此用专门的矢量参数设置指令来统一设置矢量参数,设置的矢量参数可能被随后的多条矢量运算指令所复用。
52.立即数型矢量参数:在矢量参数设置指令中直接给出的矢量参数,无需到任何寄存器寻址。
53.非立即数型矢量参数:在矢量参数设置指令中仅给出存储真实的矢量参数的地址,要到该地址寻址才能获得的矢量参数。非立即数型矢量参数中一个重要的种类是寄存器型矢量参数。在该指令中给出存储该矢量参数的寄存器地址,按照该地址寻址到相应寄存器,可以获得其中的矢量参数。
54.总概述
55.最初的处理单元(例如cpu)中,作为指令执行主体的指令执行单元对每条指令只能执行一条关于元素的运算。该元素例如是操作数。如果要执行另一条运算,只能借助于下一条指令,运算效率较低。但是,在实践中,经常会有同类的运算需要成批执行。例如,有一批货物,已知每种货物的单价、销售数量和利润率,计算每种货物的利润。利润的计算公式
是一样的,即利润=单价
×
销售数量
×
利润率。如果按照单个指令执行一条运算的方式,就只能针对每一种货物计算一次利润。例如,如果有1000种货物,就要计算1000次。
56.自从矢量运算在芯片上应用后,解决了这一问题。矢量运算是能够并行产生多个元素的执行结果的运算。即,对于同类运算,如上述的针对每种货物计算利润的运算,可以根据寄存器能力等要求,一次取出多种货物的单价、销售数量和利润率并行计算。这些单价、销售数量和利润率即矢量的元素,矢量包含的元素数即单次能够并行运行的元素个数。例如,如果有1000种货物,每次能并行运行4种货物的利润计算,则需要250次完成,相比于每次只能执行一个元素的计算,大大提高了运算效率。
57.进行上述矢量运算时,需要指示运算所需的矢量参数。矢量参数是执行矢量运算指令时用到的资源配置参数,包括矢量中的元素大小和单次运算的元素个数等。一种现有技术是将它们编码在算术运算指令内,例如arm neon、intel sse等simd指令集。这样,在一条算术运算指令中,既指示算术运算指令本身需要的操作数,又含有指示资源配置的矢量参数。这样做的缺点是占用指令的编码空间,且不利于软件代码段的复用。另一种现有技术是通过未编码在矢量运算指令内的其它方式来指定,例如risc-v vector、arm sve等vector指令集。例如,可以在用于矢量运算的矢量运算指令之外,设置矢量参数设置指令,用于指定矢量运算所需的矢量参数。之后的矢量运算指令就根据该矢量参数设置指令指定的矢量参数来执行。它在矢量运算指令之外的一条单独的矢量参数设置指令中指定,不占用矢量运算指令的编码空间,且由于它可以通过单独的一条矢量参数设置指令设置之后的很多条矢量运算指令需要的矢量参数,有利于软件代码段的复用。
58.但是,由于矢量运算指令需要等待矢量参数设置指令配置矢量参数,才可以执行,即矢量运算指令和矢量参数设置指令之间存在矢量参数的相关性(dependency),这将大大降低矢量运算指令的执行性能。
59.为了消除矢量运算指令和矢量参数设置指令之间的矢量参数的相关性,提高矢量运算指令的执行性能,本公开的发明人想到,对于立即数型矢量参数,其在矢量参数设置指令中是可以直接读出的,因此可以提取预测出来。这样,矢量运算指令就可以根据预测出的立即数型矢量参数先执行,不用等待矢量参数设置指令执行完毕后执行。由于只是预测出了立即数型矢量参数,并没有预测出全部的矢量参数,因此矢量参数设置指令还是要执行,执行后可以再用真正设置后设置的矢量参数去校正之前预测执行的矢量运算结果。如果大多数情况下,预测执行的矢量运算结果在没有经过校正时都是准确的,那么这种预测执行就会大大提高矢量运算指令的执行效率和性能。
60.由于本公开实施例既可以应用于通用终端处理单元,又可以应用于多核高性能终端处理单元。下面分别就通用终端处理单元和多核高性能终端处理单元,详细描述两种实施方式中的系统架构和处理单元内部结构。
61.通用终端系统概述
62.图1示出本公开实施例所应用于的通用终端的示意性框图。该通用终端10是“中心”系统架构的示例。通用终端10可基于目前市场上各种型号的处理器构建,并由windows
tm
操作系统版本、unix操作系统、linux操作系统等操作系统驱动。此外,通用终端10可以在pc机、台式机、笔记本、服务器和移动通信装置等硬件和/或软件中实施。
63.如图1所示,本公开实施例的通用终端10可以包括一个或多个处理单元12,以及存
储器14。
64.通用终端10中的存储器14可以是主存储器(简称为主存或内存)。用于存储由数据信号表示的指令信息和/或数据信息,例如存放处理单元12提供的数据(例如为运算结果),也可以用于实现处理单元12与外部存储设备16(或称为辅助存储器或外部存储器)之间的数据交换。
65.在一些情形下,处理单元12可能需要访问存储器14,以获取存储器14中的数据或对存储器14中的数据进行修改。由于存储器14的访问速度较慢,为了缓解处理单元12与存储器14之间的速度差距,通用终端10还包括与总线11耦合的高速缓冲存储器18,高速缓冲存储器18用于对存储器14中的一些可能会被反复调用的程序数据或者报文数据等数据进行缓存。高速缓冲存储器18例如由静态随机存储器(static random access memory,简称为sram)等类型的存储装置实现。高速缓冲存储器18可以为多级结构,例如具有一级缓存(l1 cache)、二级缓存(l2 cache)和三级缓存(l3 cache)的三级缓存结构,也可以是三级以上的缓存结构或其他类型缓存结构。在一些实施例中,高速缓冲存储器18的一部分(例如一级缓存,或一级缓存和二级缓存)可以集成在处理单元12内部或与处理单元12集成于同一片上系统中。
66.基于此,处理单元12可以包括指令执行单元121、内存管理单元122等部分。指令执行单元121在执行一些需要修改内存的指令时发起写访问请求,该写访问请求指定了需要写入内存中的写入数据和相应的物理地址;内存管理单元122用于将这些指令指定的虚拟地址转译为该虚拟地址映射的物理地址,写访问请求指定的物理地址与相应指令指定的物理地址可以一致。
67.存储器14和高速缓冲存储器18之间的信息交互通常按块来组织。在一些实施例中,高速缓冲存储器18和存储器14可以按照相同的空间尺寸被划分成数据块,数据块可以作为高速缓冲存储器18和存储器14之间的数据交换的最小单位(包括预设长度的一个或多个数据)。为了表述简洁清晰,下面将高速缓冲存储器18中的各个数据块简称为缓存块(可以称为cacheline或高速缓存线),且不同的缓存块具有不同的缓存块地址;将存储器14中的各个数据块简称为内存块,且不同的内存块具有不同的内存块地址。缓存块地址例如包括用于定位数据块的物理地址标签。
68.由于受到空间和资源的限制,高速缓冲存储器18无法对存储器14中的全部内容都进行缓存,即高速缓冲存储器18的存储容量通常小于存储器14,高速缓冲存储器18提供的各个缓存块地址无法对应存储器14提供的全部内存块地址。处理单元12在需要访问内存时,首先经总线11访问高速缓冲存储器18,以判断所要访问的内容是否已被存储于高速缓冲存储器18中,如果是,则高速缓冲存储器18命中,此时处理单元12直接从高速缓冲存储器18中调用所要访问的内容;如果处理单元12需要访问的内容不在高速缓冲存储器18中,则高速缓冲存储器18,处理单元12需要经总线11访问存储器14,以在存储器14中查找相应的信息。因为高速缓冲存储器18的存取速率非常快,因此当高速缓冲存储器18命中时,处理单元12的效率可以显著提高,进而也使整个通用终端10的性能和效率得以提升。
69.此外,通用终端10还可以包括存储设备16、显示设备13、音频设备14、鼠标/键盘15等输入/输出设备。存储设备16例如是通过相应接口与总线11耦合的硬盘、光盘以及闪存等用于信息存取的设备。显示设备13例如经相应的显卡与总线11耦合,用于根据总线11提供
的显示信号进行显示。
70.通用终端10通常还包括通信设备17,因此可以通过各种方式与网络或其他设备通信。通信设备17例如可以包括一种或多种通信模块,作为示例,通信设备17可以包括适用于特定的无线通信协议的无线通信模块。例如,通信设备17可以包括wlan模块,用于实现符合电气和电子工程师协会(ieee)制定的802.11标准的wi-fitm通信;通信设备17也可以包括wwan模块,用于实现符合蜂窝或其他无线广域协议的无线广域通信;通信设备17还可以包括蓝牙模块等采用其它协议的通信模块,或其它自定义类型的通信模块;通信设备17也可以是用于串行传输数据的端口。
71.当然,不同的通用终端根据主板、操作系统和指令集架构的不同,其结构也可能有所变化。例如目前很多通用终端设置有连接在总线11和各个输入/输出设备之间的输入/输出控制中心,且该输入/输出控制中心可以集成于处理单元12之内或独立于处理单元12。
72.通用终端的处理单元
73.图2是本公开实施例中通用终端的处理单元12的示意性框图。
74.在一些实施例中,每个处理单元12可以包括用于处理指令的一个或多个处理器核120,指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。在一些实施例中,每个处理器核120可以用于处理特定的指令集。在一些实施例中,指令集可以支持复杂指令集计算(complex instruction set computing,cisc)、精简指令集计算(reduced instruction set computing,risc)或基于超长指令字(very long instruction word,vliw)的计算。不同的处理器核120可以各自处理不同或相同的指令集。在一些实施例中,处理器核120还可以包括其他处理模块,例如数字信号处理单元(digital signal processor,dsp)等。作为一种示例,图2中示出了处理器核1至m,m是非0的自然数。
75.在一些实施例中,图1示出的高速缓冲存储器18可以被全部或部分集成于处理单元12中。且根据不同架构,高速缓冲存储器18可以是位于各个处理器核101之内和/或之外的单个或多级的内部高速高速缓冲存储器(如图2示出的3级高速高速缓冲存储器l1至l3,图2中统一标识为18),也可以包括面向指令的指令高速缓存和面向数据的数据高速缓存。在一些实施例中,处理单元12中的各个部件可以共享至少一部分的高速缓冲存储器,如图2所示,处理器核1至m例如共用第三级高速缓冲存储器l3。处理单元12还可以包括外部高速缓存(未示出),其他高速缓存结构也可以作为处理单元12的外部高速缓存。
76.在一些实施例中,如图2所示,处理单元12可以包括寄存器堆126(register file),寄存器堆126可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型的。例如,寄存器堆126可以包括:整数寄存器、浮点寄存器、状态寄存器、指令寄存器和指针寄存器等。寄存器堆126中的寄存器可以选用通用寄存器来实现,也可以根据处理单元12的实际需求采用特定的设计。
77.处理单元12可以包括内存管理单元(memory management unit,mmu)122,用于实现虚拟地址到物理地址的转译。内存管理单元122中缓存有了页表中的一部分表项,内存管理单元122也可以从内存中获取未被缓存的表项。每个处理器核120中可以设置一个或多个内存管理单元122,不同处理器核120中的内存管理单元120也可以与位于其他处理单元或处理器核中的内存管理单元120实现同步,使得每个处理单元或处理器核可以共享统一的虚拟存储系统。
78.处理单元12用于执行指令序列(即程序)。处理单元12执行每个指令的过程包括:从存放指令的存储器或高速缓冲存储器18中取出指令、对取出的指令进行译码、执行译码后的指令、保存指令执行结果等步骤,如此循环,直到执行完指令序列中的全部指令或遇到停机指令。对于本公开实施例的矢量运算执行来说,该过程包括:顺序取出矢量参数设置指令和矢量运算指令(与上述普通指令不同,矢量运算需要事先对矢量运算占用的资源进行配置,因而需要矢量参数设置指令),其中,矢量参数设置指令和矢量运算指令可以从处理单元12外部的存储器14取出,但在某些情况下,其也有可能从处理单元12内部的l1、l2、l3级高速缓存取出,且随着未来的发展,也有可能从处理单元12内部设置的其它存储单元取出;对立即数型矢量参数进行预测;对取出的指令进行译码;根据预测的立即数型矢量参数推测性执行译码后的矢量运算指令;执行译码后的矢量参数设置指令;一旦译码后的矢量参数设置指令的执行结果与推测性执行译码后的矢量运算指令采用的非立即数型矢量参数不符则按照矢量参数设置指令的执行结果重新执行矢量运算指令。本公开实施例相比于现有的执行矢量运算的过程,增加了对立即数型矢量参数进行预测的过程,且修改现有的顺序执行矢量参数设置指令和矢量运算指令的过程为,先根据预测的立即数型矢量参数推测性执行译码后的矢量运算指令,一旦译码后的矢量参数设置指令的执行结果与推测性执行译码后的矢量运算指令采用的非立即数型矢量参数不符则修正推测性执行矢量运算指令的执行结果的过程。与此相应地,在处理单元12中增加了矢量参数预测单元129,用于对立即数型矢量参数进行预测,并将矢量执行单元1212分成矢量参数设置子单元12121和矢量运算子单元12122,其中,矢量运算子单元12122用于根据预测的立即数型矢量参数推测性执行译码后的矢量运算指令,矢量参数设置子单元12121用于执行译码后的矢量参数设置指令,一旦译码后的矢量参数设置指令的执行结果与矢量运算子单元12122推测性执行译码后的矢量运算指令采用的非立即数型矢量参数不符,则放弃矢量运算子单元12122之前的执行结果,让矢量运算子单元12122按照译码后的矢量参数设置指令的执行结果重新执行矢量运算。下面对处理单元12的各组成部分详细描述。
79.处理单元12可以包含取指令单元124、矢量参数预测单元129、指令译码单元125、指令发射单元(未示出)、指令执行单元121和指令引退单元(未示出)等。指令执行单元121包括算术运算单元1211、矢量执行单元1212、乘除法运算单元1213等,其中,矢量执行单元1212包括矢量参数设置子单元12121、矢量运算子单元12122。
80.取指令单元124作为处理单元12的启动引擎,用于将指令从存储器14中搬运到指令寄存器(可以是图2示出的寄存器堆26中的一个用于存放指令的寄存器)中,但也有可能将指令从处理单元12内部的l1-3级高速缓冲存储器18或未来处理单元12内部可能设置的其它存储单元搬运到指令寄存器,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。取指令单元124取出的指令可以包括矢量参数设置指令、和之后的矢量运算指令等。
81.取出指令后,如果该指令是矢量参数设置指令,这时该指令先不交给指令译码单元125译码,而是由矢量参数预测单元129进行立即数型矢量参数预测。由于立即数型矢量参数是可以直接从矢量参数设置指令读出的,因此在矢量参数设置指令尚未被矢量参数设置子单元12121执行的情况下,矢量运算子单元12122仍然能够先根据预测的立即数型矢量参数执行矢量运算指令。
82.接着,指令译码单元125按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从而为指令执行单元121的操作做准备。操作数获取信息例如指向立即数、寄存器或其他能够提供源操作数的软件/硬件。
83.指令发射单元通常存在于高性能的处理单元12中,位于指令译码单元125与指令执行单元121之间,用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元121,使得多个指令的并行操作成为可能。指令经取指、译码并被调度到相应的指令执行单元121之后,相应的指令执行单元121开始执行该指令,即执行该指令所指示的操作、实现相应的功能。
84.对于不同类别的指令,可以在指令执行单元121中相应地设置不同的执行单元。指令执行单元121包括算术运算单元1211、矢量执行单元1212、内存执行单元1214等,它们分别负责执行不同类型的指令。算术运算单元1211是每次仅执行一条算术运算的执行单元。矢量执行单元1212是执行矢量运算指令的单元,即每次执行多条运算的单元。它能够并行产生多个元素的执行结果。即,对于同类运算,如针对每种货物计算利润的运算,可以根据寄存器能力等要求,一次取出多种货物的单价、销售数量和利润率并行计算。每种货物的单价、销售数量和利润率为一个元素,矢量中有多个元素,这样通过矢量运算,一次性进行多条算术运算。内存执行单元1214是用于执行访存指令的单元。算术运算单元1211、矢量执行单元1212、内存执行单元1214等可以并行运行并输出相应的执行结果。
85.矢量执行单元1212包括矢量参数设置子单元12121、矢量运算子单元12122。取指令单元取回的指令包括矢量参数设置指令、和之后的矢量运算指令,其中,矢量参数设置指令是为之后的矢量运算指令设置矢量参数以便矢量运算指令执行的指令。矢量参数设置子单元12121用于执行译码后的矢量参数设置指令,而矢量运算子单元12122用于执行译码后的矢量运算指令。与现有技术不同的是,由于本公开实施例采用了矢量参数预测单元129,因此,矢量运算子单元12122不用等到矢量参数设置子单元12121执行完毕再利用矢量参数设置子单元12121的矢量参数设置结果开始执行,而是可以用矢量参数预测单元129预测的立即数型矢量参数先执行,并采用事后程序校正。这样,大大提高了矢量运算的执行效率。
86.指令引退单元(或称为指令写回单元)主要用于负责将指令执行单元121产生的执行结果写回到相应的存储位置(例如为处理单元12内部的寄存器)中,以使后续指令能够从该存储位置处快速获取相应的执行结果。
87.指令执行单元121在执行某类指令(例如访存指令)时,需要访问存储器14,以获取存储器14中存储的信息或提供需要写入存储器14中的数据。由内存执行单元1214执行该访问。该内存执行单元例如为加载存储单元(load store unit,lsu)和/或其他用于内存访问的单元。
88.访存指令被取指令单元124获取之后,指令译码单元125可以对访存指令进行译码处理,使得访存指令的源操作数可被获取。译码处理后的访存指令被提供至相应的内存执行单元1214中,该内存执行单元1214可以对访存指令的源操作数进行相应的运算(例如对存储于寄存器中的源操作数进行运算)以获得访存指令对应的地址信息,并根据该地址信息发起相应的请求,例如地址转译请求、写访问请求等。
89.访存指令的源操作数通常包括地址操作数,内存执行单元1214对该地址操作数进行运算以获得访存指令对应的虚拟地址或物理地址。当内存管理单元122被禁用时,内存执
行单元1214可以直接通过逻辑运算获得访存指令的物理地址。当内存管理单元121被启用时,相应的内存执行单元1214根据访存指令对应的虚拟地址发起地址转译请求,该地址转译请求包括与访存指令的地址操作数对应的虚拟地址;内存管理单元122响应地址转译请求,并根据与该虚拟地址匹配的表项将地址转译请求中的虚拟地址转换为物理地址,使得内存执行单元1214可以根据转译后的物理地址访问高速缓冲存储器18和/或存储器14。
90.根据功能的不同,访存指令可包括加载指令和存储指令。加载指令的执行过程通常不需要对存储器14或高速缓冲存储器18中的信息进行修改,内存执行单元1214只需要根据加载指令的地址操作数读取存储于存储器14、高速缓冲存储器18或外部的存储设备中的数据。
91.不同于加载指令,存储指令的源操作数不仅包括地址操作数,还包括数据信息,存储指令的执行过程通常需要对存储器14和/或高速缓冲存储器18进行修改。存储指令的数据信息可以指向写入数据,该写入数据的来源可以是运算指令、加载指令等指令的执行结果,也可以是处理单元12中的寄存器或其他存储单元提供的数据、还可以是立即数。
92.多核高性能终端概述
93.图3示出本公开实施例中的多核高性能终端的示意性框图。多核高性能终端是指为了提高终端的处理速度,将大量处理器核分成簇使用从而达到提高运算性能的终端或服务器。
94.该多核高性能终端10’是“中心”系统架构的示例。多核高性能终端10’可基于目前市场上各种型号的处理器核,并由windows
tm
操作系统版本、unix操作系统、linux操作系统等操作系统驱动。此外,多核高性能终端或服务器10’可以体现为单台设备,例如,pc机、台式机、笔记本、服务器和移动通信装置。多核高性能终端或服务器10’以体现为多台设备构成的集群,例如云端大量服务器构成的服务器集群。
95.如图3所示,本公开实施例的多核高性能终端或服务器10’可以包括一个或多个处理单元12’。在每个处理单元12’中含有多个处理器簇130’,每个处理器簇130’中含有多个处理器核120’。之所以分成处理器簇130’,是为了便于对大量处理器核120’进行管理。可以将执行类似任务的处理器核120’归到一个簇中,这样,在调度处理单元时,就可以方便地根据其所属的簇来决定使用哪个处理器核120’。
96.多核高性能终端或服务器10’还可以包括存储设备16’。存储设备16’例如是通过相应接口与系统总线11’耦合的硬盘、光盘以及闪存等用于信息存取的设备。多核高性能终端10’的处理单元12’内部设置了多级高速缓存127’、129’、131’等,用于存储由数据信号表示的可能会反复使用的指令信息和/或数据信息。仅对不经常使用的指令信息和/或数据信息,将其存放在存储设备16’中。
97.在多核高性能终端10’中,在处理单元12’外部还包括l3或最后一级高速缓存18’。高速缓存例如由静态随机存储器(static random access memory,简称为sram)等类型的存储装置实现。在多核高性能终端10’中的高速缓存可以为多级结构,例如一级缓存(图4-5中的l1高速缓存127’)、二级缓存(图2-3中的l2高速缓存129’)和三级缓存(图4的实施例中设在处理单元12’外部的l3高速缓存18’,如图3所示,以及图5中的l3高速缓存131’)、以及图5的实施例中设在处理单元12’外部的最后一级高速缓存18’(如图3所示)。
98.多核高性能终端10’通常还包括通信设备17’,因此可以通过各种方式与网络或其
他设备通信。通信设备17’例如可以包括一种或多种通信模块,作为示例,通信设备17’可以包括适用于特定的无线通信协议的无线通信模块。例如,通信设备17’可以包括wlan模块,用于实现符合电气和电子工程师协会(ieee)制定的802.11标准的wi-fitm通信;通信设备17’可以包括wwan模块,用于实现符合蜂窝或其他无线广域协议的无线广域通信;通信设备17’还可以包括蓝牙模块等采用其它协议的通信模块,或其它自定义类型的通信模块;通信设备17’也可以是用于串行传输数据的端口。
99.当然,不同的多核高性能终端10’根据主板、操作系统和指令集架构的不同,其结构也可能有所变化。例如,有些多核高性能终端10’可以会具有显示装置、或输入输出设备等等。
100.多核高性能终端的处理单元
101.图4是根据本公开一个实施例的图3中处理单元的示意性框图。
102.在该实施例中,处理单元12’可以包括多个处理器簇130’,每个处理器簇130’可以包括用于处理指令的一个或多个处理器核120’。指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。在一些实施例中,每个处理器核120’可以用于处理特定的指令集。在一些实施例中,指令集可以支持复杂指令集计算(complex instruction set computing,cisc)、精简指令集计算(reduced instruction set computing,risc)或基于超长指令字(very long instruction word,vliw)的计算。不同的处理器核120’可以各自处理不同或相同的指令集。作为一种示例,图4中示出处理单元12’包括处理器簇1至n,n是非0的自然数;每个处理器簇包括处理器核1至m,m是非0的自然数。
103.在该实施例中,每个处理器核120’核内部含有l1高速缓存127’,用于存储处理器核120’内部经常使用的指令信息和数据信息。另外,在每个处理器簇130’内,含有多个处理器核120’共享的l2高速缓存1282’处理器核120’通过处理器簇130’内部的一致性总线1281’连接到共享的l2高速缓存1282’。l2高速缓存1282’主要缓存一些重要性程度稍差于l1高速缓存127’存储的指令信息和数据信息、或访问频率稍低于l1高速缓存127’存储的指令信息和数据信息的指令信息和数据信息。各个处理器簇130’连接到共享的系统总线11’,系统总线11’上可以连接有各个处理器簇130’共享的l3高速缓存18’。l3高速缓存18’用于缓存一些重要性程度比l2高速缓存1282’存储的指令信息和数据信息更低、或访问频率比l2高速缓存1282’存储的指令信息和数据信息更低的指令信息和数据信息。
104.如图4所示,每个处理器核120’可以包括取指令单元124’、矢量参数预测单元129’、指令译码单元125’、寄存器堆126’、指令执行单元121’、内存管理单元122’、l1高速缓存127’。
105.寄存器堆126’可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型的。例如,寄存器堆126’可以包括:整数寄存器、浮点寄存器、向量寄存器、状态寄存器和指针寄存器等。寄存器堆126’中的寄存器可以选用通用寄存器来实现,也可以根据处理单元12’的实际需求采用特定的设计。
106.处理单元12’可以包括内存管理单元(memory management unit,mmu)122’,用于实现虚拟地址到物理地址的转译。根页表是存储着虚拟地址到存储设备16’中的物理地址的映射关系的表。一般来说,根页表存储在存储设备16’中。当每次访问存储设备16’中的数据时,先到存储设备16’的根页表中获取虚拟地址到存储设备16’中的物理地址的映射关
系。然后根据要访问的虚拟的地址和该映射关系,得到要访问的存储设备16’中的物理地址。然后,再根据该物理地址到存储设备16’上访问数据。这样,相当于每次访问存储设备16’上的数据都要二次访问存储设备16’,其中一次用于获取映射关系,另一次获得真正要访问的数据。为了提高一些常用页面的访问速度,可以将一些常用数据由存储设备16’中改为存储在l1高速缓存127’、l2高速缓存1282’、l3高速缓存131’或者最后一级高速缓存18’中。放在这些高速缓存中的数据的虚拟地址到物理地址的映射关系的表项就存储在内存管理单元122’内部设置的转译后备缓冲器1221’中,这里的物理地址指的是其在高速缓存中的物理地址,不是存储设备16’上的物理地址。内存管理单元122’可以存储有虚拟地址到l1高速缓存127’上的物理地址的映射关系表项,也可以同时存储有虚拟地址到l1高速缓存127’以及l2高速缓存1282’上的物理地址的映射关系表项,也可以同时存储有虚拟地址到l1高速缓存127’、l2高速缓存1282’和l3高速缓存131’上的物理地址的映射关系表项,也可以同时存储有虚拟地址到l1高速缓存127’、l2高速缓存1282’、l3高速缓存131’、最后一级高速缓存18’上的物理地址的映射关系表项,这是根据高速缓存的设置的层数决定的。另外,也可以不将所有从虚拟地址到物理地址的映射关系表项都存储在根页表中,而是设置若干分级页表。例如,从根页表往下查找到一级页表,从一级页表往下查找到二级页表,一直往下查找到最终页表。这样,对于较宽的物理地址系统,这样的管理方式可以压缩整个页表的内存存储空间。
107.每个处理器核120’中可以设置一个或多个内存管理单元122’,不同处理器核120’中的内存管理单元120’也可以与位于其他处理单元或处理器核中的内存管理单元120’实现同步,使得每个处理单元或处理器核可以共享统一的虚拟存储系统。
108.处理单元12’用于执行指令序列(即程序)。处理单元12’执行每个指令的过程包括:从存放指令的存储设备16’,或者指令高速缓存1271’,或者l2高速缓存1282’,或者处理单元12’中未来可能设置的其它存储单元中取出指令、对取出的指令进行译码、执行译码后的指令、保存指令执行结果等步骤,如此循环,直到执行完指令序列中的全部指令或遇到停机指令。对于本公开实施例的矢量运算执行来说,该过程包括:从存放指令的存储设备16’,或者指令高速缓存1271’,或者l2高速缓存1282’,或者处理单元12’中未来可能设置的其它存储单元中取出矢量参数设置指令和矢量运算指令(与上述普通指令不同,矢量运算需要事先对矢量运算占用的资源进行配置,因而需要矢量参数设置指令)、对立即数型矢量参数进行预测、对取出的指令进行译码、根据预测的立即数型矢量参数推测性执行译码后的矢量运算指令、执行译码后的矢量参数设置指令、一旦译码后的矢量参数设置指令的执行结果与推测性执行译码后的矢量运算指令采用的非立即数型矢量参数不符则按照矢量参数设置指令的执行结果重新执行矢量运算指令。本公开实施例相比于现有的执行矢量运算的过程,增加了对立即数型矢量参数进行预测的过程,且修改现有的顺序执行矢量参数设置指令和矢量运算指令的过程为,先根据预测的立即数型矢量参数推测性执行译码后的矢量运算指令,一旦译码后的矢量参数设置指令的执行结果与推测性执行译码后的矢量运算指令采用的非立即数型矢量参数不符则修正推测性执行矢量运算指令的执行结果的过程。与此相应地,在处理单元12’中增加了矢量参数预测单元129’,用于对立即数型矢量参数进行预测,并将矢量执行单元1212’分成矢量参数设置子单元12121’和矢量运算子单元12122’,其中,矢量运算子单元12122’用于根据预测的立即数型矢量参数推测性执行译码后的矢量
运算指令,矢量参数设置子单元12121’用于执行译码后的矢量参数设置指令,一旦译码后的矢量参数设置指令的执行结果与矢量运算子单元12122’推测性执行译码后的矢量运算指令采用的非立即数型矢量参数不符,则放弃矢量运算子单元12122’之前的执行结果,让矢量运算子单元12122’按照译码后的矢量参数设置指令的执行结果重新执行矢量运算。
109.l1高速缓存127’中包括指令高速缓存1271’、数据高速缓存1272’。指令高速缓存1271’存储着要执行的指令。数据高速缓存1272’存储着指令要执行的操作数、以及执行过程中的中间结果等。
110.取指令单元124’作为处理器核120’的启动引擎,用于将指令从从存放指令的存储设备16’,或者指令高速缓存1271’,或者l2高速缓存1282’,或者处理单元12’中未来可能设置的其它存储单元中搬运到取指令单元124’内部或者指令译码单元125’内部的缓存中。然后,对于一般的指令,接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。如果是分支(branch)或跳转(jump)指令的目标地址,取指令单元124’需要对跳转方向或者目标地址进行预测。分支预测(branch prediction)或跳转预测(jump predication)相关的常见通用技术包括:利用一级或两级分支历史表(bht)对分支指令跳转方向进行预测,利用一级或多级分支目标缓冲器(btb)对分支指令的跳转目标地址进行预测,利用返回地址栈(ras)对返回指令的跳转目标地址进行预测,以及对间接跳转指令的目标地址进行预测。
111.取出指令后,如果该指令是矢量参数设置指令,这时该指令先不交给指令译码单元125’译码,而是由矢量参数预测单元129’进行立即数型矢量参数预测。由于立即数型矢量参数是可以直接从矢量参数设置指令读出的,因此在矢量参数设置指令尚未被矢量参数设置子单元12121’执行的情况下,矢量运算子单元12122’仍然能够先根据预测的立即数型矢量参数执行矢量运算指令。
112.接着,指令译码单元125’按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从而为指令执行单元121’的操作做准备。操作数获取信息例如指向立即数、寄存器或其他能够提供源操作数的软件/硬件。在图4中,其可以指向操作数在数据高速缓存1272’中的地址。
113.然后,指令译码单元125’还用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元121’,使得多个指令的并行操作成为可能。指令经取指、译码并被调度到相应的指令执行单元121’之后,相应的指令执行单元121’开始执行该指令,即执行该指令所指示的操作、实现相应的功能。
114.指令执行单元121’内部根据执行的具体指令的不同,可以划分成算术运算单元1211’、矢量执行单元1212’、乘除法运算单元1213’、存储指令执行单元1214’等。算术运算单元(alu)1211’是进行整型数运算(不包括乘除法运算)和逻辑运算的运算单元,其一次仅执行一条算术运算。alu是计算机中央处理单元的最重要组成部分。矢量执行单元1212’是进行矢量运算的运算单元,它能够并行产生多个元素的执行结果。乘除法运算单元1213’是进行乘法和除法运算的运算单元,其也是一次仅执行一条乘除法运算。算术运算单元1211’、矢量执行单元1212’、乘除法运算单元1213’执行指令时,其按照指令译码单元125’取回的操作数获取信息到寄存器堆126’的相应地址获取操作数,或者直接取回指令执行单元121’执行时已经产生的结果,这可以利用转发(forward)技术实现。存储指令执行单元
1213’是执行存储指令的处理单元。高性能终端或服务器中最常见的处理就是存储、整型数元素、矢量运算、乘除法运算、逻辑运算等,因此,基本上上述四个执行单元可以涵盖高性能终端最经常遇到的处理。根据需要,指令执行单元121’还可以包括控制寄存器、分支跳转处理单元、加解密指令处理单元等(未示)。
115.矢量执行单元1212’包括矢量参数设置子单元12121’、矢量运算子单元12122’。取指令单元取回的指令包括矢量参数设置指令、和之后的矢量运算指令,其中,矢量参数设置指令是为之后的矢量运算指令设置矢量参数以便矢量运算指令执行的指令。矢量参数设置子单元12121’用于执行译码后的矢量参数设置指令,而矢量运算子单元12122’用于执行译码后的矢量运算指令。与现有技术不同的是,由于本公开实施例采用了矢量参数预测单元129’,因此,矢量运算子单元12122不用等到矢量参数设置子单元12121’执行完毕再利用矢量参数设置子单元12121’的矢量参数设置结果开始执行,而是可以用矢量参数预测单元129’预测的立即数型矢量参数先执行,并采用事后程序校正。这样,大大提高了矢量运算的执行效率。
116.可选地,处理器核120’还可以包括指令引退单元135’,主要用于负责将指令执行单元121’产生的执行结果写回到相应的寄存器堆126’的存储位置中,以使后续指令能够从该存储位置处快速获取相应的执行结果。如果有该指令引退单元,所有回写寄存器堆126’的通路都要经过这个单元。
117.可选地,处理器核120’还可以包括调试单元136’、跟踪单元137’、中断单元138’,分别用于处理器核的调试、跟踪和中断处理等,它们不是必需的,其可以根据设计的需要进行添加。当有这些单元存在时,调试、跟踪、中断等请求送入上述的指令引退单元135’。
118.图5是根据本公开另一个实施例的图3中处理单元的示意性框图。该实施例与图4的实施例的不同在于,图5的实施例中的处理器核120’中包含了两级高速缓存,即l1高速缓存127’和l2高速缓存1282’,其中,l2高速缓存1282’缓存的指令信息和数据信息的重要性程度或访问频率稍低于l1高速缓存127’缓存的指令信息和数据信息的重要性程度或访问频率。多个处理器核120’通过处理器簇130’内部的一致性总线1281’连接到共享的l3高速缓存131’。l3高速缓存131’缓存的指令信息和数据信息的重要性程度或访问频率稍低于l2高速缓存1282’缓存的指令信息和数据信息的重要性程度或访问频率。各个处理器簇130’连接到共享的系统总线11’,系统总线11’上可以连接有各个处理器簇130’共享的最后一级高速缓存18’。最后一级高速缓存18’用于缓存一些重要性程度比l3高速缓存131’存储的指令信息和数据信息更低、或访问频率比l3高速缓存131’存储的指令信息和数据信息更低的指令信息和数据信息。在图5的体系结构中,由于在处理器核120’中多设置了一级高速缓存,适合于处理器核的处理负荷更大的场景,在处理负荷更大的情况下,通过处理器核120’内部的2层高速缓存结构,提高处理单元的处理效率。
119.本公开实施例的详细实施过程
120.矢量运算不仅仅依靠一条矢量运算指令就能执行,还需要矢量参数设置指令。矢量参数设置指令是脱离于矢量运算指令、用于设置矢量运算指令用到的矢量参数的指令。
121.首先,取指令单元124、124’从处理单元12、12’外部的存储器14从存放指令的存储设备16’,或者指令高速缓存1271’,或者l2高速缓存1282’,或者处理单元12’中未来可能设置的其它存储单元顺序取回矢量参数设置指令和矢量运算指令。例如,该矢量参数设置指
令为vsetvli t0,x0,e32,该矢量运算指令为vadd.vv v8,v8,v4,其中,vsetvli和vadd是指令名,分别表示矢量参数设置指令和矢量加法指令,v8,v8,v4是操作数,即运算的对象。
122.矢量参数是执行矢量运算指令(如上述vadd.vv v8,v8,v4)时用到的资源配置参数,例如矢量中的元素大小和单次运算的元素个数。它不是如上所述的操作数。操作数是矢量运算的对象。矢量参数是反映了运算时分配的资源(如占寄存器的位数)情况等的参数,如上述t0,x0,e32(下文将详述这些参数的含义)。矢量参数分为立即数型矢量参数和非立即数型矢量参数。
123.立即数型矢量参数是指在矢量参数设置指令中直接给出的矢量参数,无需到任何寄存器寻址。如上述vsetvli t0,x0,e32中的e32,其表示矢量中的元素大小为32位。该信息在指令中直接写出,不用到其它寄存器寻址。非立即数型矢量参数是指在矢量参数设置指令中仅给出存储真实的矢量参数的地址,要到该地址寻址才能获得的矢量参数。如上述vsetvli t0,x0,e32中的t0和x0,其分别表示单次运算的元素个数和在一个矢量寄存器中最多能存放的元素个数。在一个矢量寄存器中最多能存放的元素个数x0其实也可以由矢量寄存器的位宽除以矢量中的元素大小获得。如果矢量寄存器的位宽为128位,矢量中的元素大小为16位,则矢量寄存器中最多能同时放8个元素。单次运算最大执行的元素个数为8。在上述矢量寄存器能够同时容纳最多8个元素的情况下,如果有20个元素需要运算(例如需要计算20种不同商品的利润),则第一批可以单次计算8个元素(每种商品的单价、销售额、利润率为一个元素),即8个元素放置在一个矢量中进行矢量运算;第二批可以单次计算8个元素,即8个元素放置在一个矢量中进行矢量运算;第三批单次计算剩余的4个元素,即剩下的4个元素放置在一个矢量中进行矢量运算。对于第一、二批来说,单次运算的元素个数为8;对于第三批来说,单次运算的元素个数为4。上述情况下,对于三个批次,x0都等于8;对于前两个批次,t0=8;对于最后一个批次,t0=4。对于t0和x0,其数值没有直接写在矢量参数设置指令中,在指令中仅给出了其寄存器标识t0和x0,因此,要根据该标识到寄存器中进行寻址,才能找到其真正的数值,因此是非立即数型矢量参数。
124.虽然上述例子中,立即数型矢量参数包括矢量中的元素大小,非立即数型矢量参数包括单次运算的元素个数。但也可以相反设置,即将单次运算的元素个数设置成立即数型矢量参数,矢量中的元素大小设置成非立即数型矢量参数。
125.矢量寄存器是寄存器堆126、126’中的一个寄存器,专用于存放矢量运算中的矢量。
126.矢量运算指令vadd.vv v8,v8,v4的执行要受上述矢量参数设置指令vsetvli t0,x0,e32的制约。矢量运算指令vadd.vv v8,v8,v4的执行要按照矢量参数设置指令vsetvli t0,x0,e32规定的矢量中的元素大小、单次运算的元素个数来执行。因此,现有技术中,要等到矢量参数设置指令vsetvli t0,x0,e32执行完,才能执行矢量运算指令vadd.vv v8,v8,v4。
127.本公开实施例中,考虑到矢量参数设置指令中的立即数型矢量参数能够从矢量参数设置指令直接读出,可以由矢量参数预测单元129、129’根据所述矢量参数设置指令预测立即数型矢量参数,然后让矢量运算子单元12122、12122’根据预测的立即数型矢量参数先执行矢量运算指令,而不用等待矢量参数设置子单元12121、12121’执行完矢量参数设置指令。
128.矢量参数预测单元129、129’根据所述矢量参数设置指令预测立即数型矢量参数的方法可以是直接从矢量参数设置指令读出,如上述矢量参数设置指令vsetvli t0,x0,e32中的e32。
129.然后,指令译码单元125、125’对取回的矢量参数设置指令和矢量运算指令分别进行译码。译码的过程在之前的图2、4-5的描述中详细介绍,故不赘述。
130.接着,矢量执行单元1212、1212’根据预测的立即数型矢量参数执行译码后的矢量运算指令,而不用等到译码后的矢量参数设置指令执行完毕。矢量执行单元1212、1212’包括矢量参数设置子单元12121、12121’和矢量运算子单元12122、12122’,分别执行上述译码后的矢量参数设置指令和矢量运算指令。矢量运算子单元12122、12122’执行译码后的矢量运算指令时,由于矢量参数设置子单元12121、12121’没执行完,矢量参数设置结果未出来,其执行译码后的矢量运算指令是根据预测的立即数型矢量参数进行的。当然,执行译码后的矢量运算指令,不仅需要立即数型矢量参数,还需要非立即数型矢量参数。本公开实施例中,对于非立即数型矢量参数,矢量运算子单元12122、12122’可以沿用译码后矢量运算指令的前一译码后矢量运算指令中的非立即数型矢量参数作为当前接收到的译码后矢量运算指令中的非立即数型矢量参数。沿用历史上前一译码后矢量运算指令中的非立即数型矢量参数作为当前译码后矢量运算指令中的非立即数型矢量参数的原因是,矢量参数在上下文中具有相对连续性。在前后连续的多个矢量运算指令中,矢量参数保持不变的可能性比改变的可能性大得多。即使矢量参数改变,通常也会在接下来的若干个矢量运算指令中保持不变。因此,这样处理大大提高了矢量运算效率,又使得为了校正错误付出的成本不至于太大。
131.仍以如上所述的顺序接收到矢量参数设置指令vsetvli t0,x0,e32和矢量运算指令vadd.vv v8,v8,v4为例。假设矢量寄存器位宽为128。在矢量运算子单元12122、12122’接收到译码后的矢量参数设置指令vsetvli t0,x0,e32之前,接收到的前一个译码后的矢量参数设置指令的单次运算的元素个数(非立即数型矢量参数)是8。接收到矢量参数设置指令vsetvli t0,x0,e32后,矢量参数预测单元129、129’预测出矢量中的元素大小为32位。这时,矢量运算子单元12122、12122’会以矢量中的元素大小32位、单次运算的元素个数8为矢量参数,在该矢量参数下进行vadd.vv v8,v8,v4的矢量运算。由于这时采用的非立即数型矢量参数,即单次运算的元素个数8是沿用历史的,不准确的,有可能与实际情况不符,因而可能需要校正。
132.在一个实施例中,矢量参数设置子单元12121、12121’内部设置有矢量参数寄存器(未示),或者在寄存器堆126、126’中设置矢量参数寄存器,用于存储历史上作为矢量参数设置子单元12121、12121’的矢量参数设置指令执行结果设置的矢量参数。在一个实施例中,该矢量参数寄存器只存储一条矢量参数设置指令得到的矢量参数,即最近一条矢量参数设置指令得到的矢量参数,一旦新的一条矢量参数设置指令执行后,用其结果更新该矢量参数寄存器。在另一个实施例中,可以保存最近n条矢量参数设置指令得到的矢量参数,在矢量参数寄存器中遵循先进先出法,即一旦新的一条矢量参数设置指令执行后,用其结果覆盖该矢量参数寄存器中最早进入的一条矢量参数设置指令得到的矢量参数。
133.如果所述矢量参数设置子单元12121、12121’执行所述译码后的矢量参数设置指令后设置的非立即数型矢量参数与所述矢量参数寄存器中的非立即数型矢量参数不一致,
这意味着沿用历史上的非立即数型矢量参数是错误的,需要校正。这时,矢量参数设置子单元12121、12121’可以将所述设置的非立即数型矢量参数传递给所述矢量运算子单元12122、12122’,由所述矢量运算子单元12122、12122’丢弃该矢量运算指令的执行结果(即沿用历史上的非立即数型矢量参数进行矢量运算得到的结果),并根据该传递的非立即数型矢量参数和预测的立即数型矢量参数,重新执行该译码后的矢量运算指令,用得到的矢量运算结果覆盖沿用历史上的非立即数型矢量参数进行矢量运算得到的运算结果,从而校正沿用历史上的非立即数型矢量参数进行矢量运算造成的错误。
134.以上述矢量运算子单元12122、12122’以矢量参数预测单元129、129’预测出的矢量中的元素大小32位、沿用的历史上的单次运算的元素个数8为矢量参数,在该矢量参数下进行vadd.vv v8,v8,v4的矢量运算为例。当矢量参数设置子单元12121、12121’执行矢量参数设置指令vsetvli t0,x0,e32时,发现单次运算的元素个数应设置为4,与矢量参数寄存器中存储的单次运算的元素个数8不一致,这时,通知矢量运算子单元12122、12122’丢弃针对vadd.vv v8,v8,v4的推测性矢量运算结果,让矢量运算子单元12122、12122’根据矢量中的元素大小32、单次运算的元素个数4重新进行矢量运算,用该矢量运算结果替换之前的推测性矢量运算结果。
135.另一方面,在一个实施例中,矢量参数设置子单元12121、12121’还用执行译码后的矢量参数设置指令后设置的矢量参数,更新所述矢量参数寄存器。这样,矢量参数寄存器才能永远反映最近一次矢量参数设置指令所设置的矢量参数,才能够为判断当前矢量参数设置指令设置的非立即数型矢量参数与历史上前一次矢量参数设置指令设置的非立即数型矢量参数是否一致形成正确的基础。
136.在上述例子中,当矢量参数设置子单元12121、12121’执行矢量参数设置指令vsetvli t0,x0,e32时,发现矢量中的元素大小为32,单次运算的元素个数为4,将矢量中的元素大小32、单次运算的元素个数4更新到矢量参数寄存器中。
137.如果矢量参数设置子单元12121、12121’执行译码后的矢量参数设置指令后设置的非立即数型矢量参数与所述矢量参数寄存器中的非立即数型矢量参数一致,这意味着沿用历史上的非立即数型矢量参数是正确的,无需校正。但此时,为了让矢量参数寄存器永远反映最近一次矢量参数设置指令所设置的矢量参数,仍需用执行所述译码后的矢量参数设置指令后设置的矢量参数,更新所述矢量参数寄存器,从而为之后的比较奠定正确的基础。
138.例如,当矢量参数设置子单元12121、12121’执行矢量参数设置指令vsetvli t0,x0,e32时,发现矢量中的元素大小为32,单次运算的元素个数为8,与矢量参数寄存器中存储的单次运算的元素个数8一致,此时不通知矢量运算子单元12122、12122’重新运算,但仍要将矢量中的元素大小32、单次运算的元素个数8更新到矢量参数寄存器中。
139.只要矢量参数设置子单元12121、12121’执行完译码后的矢量参数设置指令,不管执行后设置的非立即数型矢量参数与所述矢量参数寄存器中的非立即数型矢量参数是否一致,都要更新矢量参数寄存器,除了为之后的比较奠定正确的基础之外,还是为了为矢量运算子单元12122、12122’推测执行失败提供补救措施。该执行失败不是指沿用历史上的非立即数型矢量参数错误,而是沿用历史上的非立即数型矢量参数进行矢量运算的过程中由于硬件故障、网络通信故障等原因造成失败,无法得到正确执行结果,这时,矢量参数设置子单元12121、12121’往往设置矢量参数已经完毕,将设置的矢量参数存储在矢量参数寄存
器中,只要调用所述矢量参数寄存器中的立即数型和非立即数型矢量参数,让矢量运算子单元12122、12122’重新执行一遍译码后的矢量运算指令即可。
140.另外,矢量参数设置子单元12122、12122’可以在执行译码后的矢量参数设置指令后,检查设置的矢量参数的合法性。合法性是指矢量参数是否符合实际硬件环境,能否在硬件环境下实施。例如,矢量中的元素大小为256,已经超过矢量寄存器的位宽128,在实践中无法执行,就认定为不合法。
141.检查矢量参数的合法性的一个方法是确定该矢量参数是否符合预定合法性标准。例如,合法性标准可以是若干个有效数值,或者是一段取值范围,只有这几个有效数值中的矢量参数,或者落在该取值范围内的矢量参数才被认为是合法的。例如,预定合法性标准是,矢量中的元素大小为32或64,则如果设置的矢量中的元素大小为128就是不合法的。
142.在一个实施例中,在设置的矢量参数不合法的情况下,矢量参数设置子单元12122、12122’可以按照预定规则,将所述矢量参数设置成合法。在合法性标准是若干个有效数值的情况下,预定规则可以是:将所述矢量参数设置成所述若干个有效数值中与所述矢量参数最接近的数值。例如,预定合法性标准是,矢量中的元素大小为32或64,则如果设置的矢量中的元素大小为128,与64更接近,将矢量中的元素大小设置成64。在合法性标准是一段取值范围的情况下,预定规则可以是:将所述矢量参数设置成所述取值范围中与所述矢量参数最接近的端点值。例如,预定合法性标准是,矢量中的元素大小为32-64,则如果设置的矢量中的元素大小为128,与端点值64更接近,将矢量中的元素大小设置成64。
143.本技术还公开了一种片上系统,包括如图1-5所示的处理单元12、12’。
144.根据本公开实施例的矢量运算执行方法
145.如图6所示,根据本公开的一个实施例,还提供了一种矢量运算执行方法,包括:
146.步骤610、顺序获取矢量参数设置指令和矢量运算指令;
147.步骤620、根据所述矢量参数设置指令预测立即数型矢量参数;
148.步骤630、对取回的矢量参数设置指令和矢量运算指令分别进行译码;
149.步骤640、在不等待译码后的矢量参数设置指令执行完毕的情况下,根据预测的立即数型矢量参数执行译码后的矢量运算指令。
150.上述方法实施例的实现细节可以参考前面装置实施例的详细描述。其与装置实施例的实现类似,只是描述角度不同。为了节约篇幅,不再赘述。
151.需要领会,以上所述仅为本公开的优选实施例,并不用于限制本公开,对于本领域技术人员而言,本说明书的实施例存在许多变型。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
152.应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述的比较简单,相关之处参见其他实施例的部分说明即可。
153.应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也
是可以的或者可能是有利的。
154.应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
155.还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献