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

处理器、芯片、电子设备及数据处理方法与流程

2022-08-27 01:02:38 来源:中国专利 TAG:


1.本公开涉及芯片技术领域,尤其涉及处理器、芯片、电子设备及数据处理方法。


背景技术:

2.为提升调度效率,很多处理器会引入硬件多线程的技术。如图形处理器(graphics processing unit,gpu)会同时调度多个线程的执行。线程之间可以组成线程块,协作完成一个整体的计算任务。在协同计算的过程中,不同的线程之间需要进行大量的数据交互,为了提高数据传输带宽,可以采用寄存器堆进行数据复用。例如,在进行卷积运算时,可以先将一块特征图(feature map)存储在寄存器堆上,供运算单元多次使用。然而,在常规的处理器设计中,寄存器堆一般是线程私有的,不同的线程之间无法对寄存器堆上的数据进行复用。


技术实现要素:

3.第一方面,本公开实施例提供一种处理器,所述处理器包括:第一寄存器堆,所述第一寄存器堆包括至少一个第一寄存器组以及至少一个第二寄存器组,所述第一寄存器组和所述第二寄存器组均包括至少一个寄存器,每个第一寄存器组用于分配给一个线程,每个第二寄存器组用于分配给至少两个线程;以及处理单元,用于对多个线程中的每个线程进行调度,并响应于所述多个线程中的目标线程的数据访问请求,访问分配给所述目标线程的寄存器组中的目标寄存器。
4.在一些实施例中,所述目标线程的数据访问请求中携带所述目标寄存器的逻辑地址;所述处理单元用于:将所述逻辑地址映射为所述目标寄存器的物理地址;基于所述物理地址访问所述目标寄存器。
5.在一些实施例中,所述处理单元用于:在所述目标寄存器为所述第一寄存器组中的寄存器的情况下,基于分配给各个在先线程的寄存器的总数量以及所述逻辑地址确定所述物理地址;所述在先线程包括线程编号小于所述目标线程的各个线程;和/或在所述目标寄存器为所述第二寄存器组中的寄存器的情况下,基于分配给各个线程的寄存器的总数量以及所述逻辑地址确定所述物理地址。
6.在一些实施例中,所述第一寄存器堆被划分为至少一个存储单元,每个存储单元均包括至少一个第一寄存器组以及至少一个第二寄存器组;不同的存储单元之间物理隔离,且不同的存储单元对应于不同的线程,一个存储单元包括的第一寄存器组用于分配给对应于所述存储单元的一个线程,一个存储单元包括的第二寄存器组用于分配给对应于所述存储单元的至少两个线程;所述处理单元用于:在所述目标寄存器为所述第一寄存器组中的寄存器的情况下,基于所述目标线程的线程编号以及所述存储单元的数量确定所述目标寄存器所在的存储单元,并基于分配给各个在先线程的寄存器组的总数量、存储单元的数量以及所述逻辑地址确定所述物理地址;所述在先线程包括线程编号小于所述目标线程的各个线程;和/或在所述数据访问请求所访问的寄存器为所述第二寄存器组中的寄存器
的情况下,基于所述逻辑地址以及所述存储单元的数量确定所述目标寄存器所在的存储单元,并基于分配给各个线程的寄存器组的总数量、存储单元的数量以及所述逻辑地址确定所述物理地址。
7.在一些实施例中,所述目标寄存器为所述第一寄存器组中的寄存器;所述处理单元用于:将从所述目标寄存器中读取的数据作为索引信息,并基于所述索引信息对所述第二寄存器组中的寄存器进行访问。
8.在一些实施例中,所述处理单元用于:获取从第二寄存器堆中读取的索引信息;基于从第二寄存器堆中读取的索引信息对所述目标寄存器进行访问。
9.在一些实施例中,所述数据访问请求中包括指示位,所述指示位用于指示是否将从所述第二寄存器堆中读取的数据作为访问所述目标寄存器的索引信息。
10.在一些实施例中,所述处理器还包括:指令通路,用于发送对所述目标寄存器的数据访问请求;以及执行通路,用于获取所述目标寄存器响应于所述数据访问请求传输的数据,并对获取的数据进行运算处理。
11.在一些实施例中,所述指令通路包括:指令读取单元,用于读取所述目标线程发送的数据访问请求;指令译码单元,用于对所述指令读取单元读取的数据访问请求进行译码;指令发射单元,用于将译码后的数据访问请求发送至所述目标寄存器;和/或所述执行通路包括:运算单元,用于对获取的数据进行运算处理;以及访存单元,用于将运算结果输出至内存,和/或将内存中存储的数据输出至所述运算单元进行运算处理。
12.在一些实施例中,各个第一寄存器组包括的寄存器的数量相同。
13.第二方面,本公开实施例提供一种芯片,所述芯片包括本公开任一实施例所述的处理器。
14.第三方面,本公开实施例提供一种电子设备,所述电子设备包括本公开任一实施例所述的芯片。
15.第四方面,本公开实施例提供一种数据处理方法,应用于本公开任一实施例所述的处理器中的处理单元,所述方法包括:对多个线程中的每个线程进行调度;响应于所述多个线程中的目标线程的数据访问请求,访问分配给所述目标线程的寄存器组中的目标寄存器。
16.第五方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现任一实施例所述的方法。
17.本公开实施例将寄存器堆划分为第一寄存器组以及至少一个第二寄存器组,其中,第二寄存器组可以分配给至少两个寄存器组,即,第二寄存器组可以由两个或两个以上线程共同访问,从而实现了线程之间的数据复用;此外,由于每个第一寄存器组仅分配给一个线程,即,第一寄存器组只能由一个线程单独进行访问,从而使不同线程之间的数据仍然具有一定程度的数据隔离。
18.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。
附图说明
19.此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公
开的实施例,并与说明书一起用于说明本公开的技术方案。
20.图1是相关技术中多线程情况下线程访问寄存器堆的方式的示意图。
21.图2是本公开实施例的处理器的结构示意图。
22.图3是本公开实施例的物理地址与逻辑地址的映射关系的示意图。
23.图4a和图4b分别是本公开实施例的寄存器堆的地址映射方式的示意图。
24.图5是本公开实施例的第一寄存器组与第二寄存器组的位置关系的示意图。
25.图6和图7分别是本公开实施例的数据运算过程的示意图。
26.图8是本公开实施例的芯片的示意图。
27.图9是本公开实施例的数据处理方法的流程图。
具体实施方式
28.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
29.在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合。
30.应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
31.为了使本技术领域的人员更好的理解本公开实施例中的技术方案,并使本公开实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本公开实施例中的技术方案作进一步详细的说明。
32.在人工智能或科学计算等领域,高性能处理器的设计非常重要。在密集计算的场景下,要提高处理器的性能,就必须解决存储墙的问题,通过数据复用降低对外部带宽的需求,提高运算单元的利用效率。
33.传统的处理器存储结构大体可以分为外存/缓存/寄存器堆三个层次,带宽情况为:外存《缓存《寄存器堆。其中缓存可以进一步分为多层,如中央处理单元(central processing unit,cpu)的l1/l2缓存等。典型的数据复用是通过缓存实现的,当数据存储在缓存后,可能发生两种复用:1)不同的运算单元访问同一份数据;2)单个运算单元多次访问同一份缓存数据。这样的复用可以有效降低对外存的数据访问。
34.为提升调度效率,很多处理器会引入硬件多线程的技术。如gpu会同时调度多个线程的执行。线程之间可以组成线程组,协作完成一个整体的计算任务。在协同计算的过程中,不同的线程之间需要进行大量的数据交互,在传统的处理器设计中,一般通过片上存储
单元来实现高效的线程间数据交互,如cpu的cache或者gpu的shared memory。
35.然而,在密集计算场景下,有时候片上存储单元的带宽仍然无法满足运算的需求。此时可以进一步采用寄存器堆进行数据复用。例如,在进行卷积运算时,可以先将一块特征图存储在寄存器堆上,供运算单元多次使用。在常规的处理器设计中,寄存器堆一般是线程私有的,因此,只有同一个线程能够复用寄存器堆上的数据,不同的线程之间无法对寄存器堆上的数据进行复用。例如,在图1中,线程1只能够访问寄存器堆中的寄存器1、寄存器2和寄存器3;线程2只能访问寄存器堆中的寄存器4和寄存器5;线程3只能够访问寄存器堆中的寄存器6、寄存器7和寄存器8。这样,同一个寄存器中的数据无法被多个线程复用。
36.基于此,本公开实施例提供一种处理器,参见图2,所述处理器包括:
37.第一寄存器堆201,所述第一寄存器堆201包括至少一个第一寄存器组2011以及至少一个第二寄存器组2012,所述第一寄存器组2011和所述第二寄存器组2012均包括至少一个寄存器r,每个第一寄存器组2011用于分配给一个线程,每个第二寄存器组2012用于分配给至少两个线程;以及
38.处理单元202,用于对多个线程中的每个线程进行调度,并响应于所述多个线程中的目标线程的数据访问请求,对分配给所述目标线程的寄存器组中的目标寄存器进行访问。
39.本公开实施例中的处理器可以是cpu、gpu、神经网络处理器(neural network processing unit,npu)等各种类型的多线程处理器,本公开对处理器的类型不作限制。处理器可以调度多个线程来对数据进行并行处理,以便通过该线程访问目标寄存器。
40.本公开实施例中的第一寄存器堆201可以包括至少两个寄存器组。可以将第一寄存器堆201划分为第一寄存器组2011和第二寄存器组2012,第一寄存器组2011的数量和第二寄存器组2012的数量均大于或等于1,且第一寄存器组2011的数量和第二寄存器组2012的数量可以相等,也可以不相等。第一寄存器组2011可以包括至少一个寄存器,第二寄存器组2012也可以包括至少一个寄存器,第一寄存器组2011包括的寄存器的数量与第二寄存器组2012包括的寄存器的数量可以相等,也可以不相等,且不同的第一寄存器组2011包括的寄存器的数量可以相等,也可以不相等。
41.在一些实施例中,第一寄存器组2011的数量可以基于线程的数量确定,例如,第一寄存器组2011的数量可以与线程的数量相等,这样,每个线程可以分配一个第一寄存器组2011。或者,第一寄存器组2011的数量可以是线程的数量的整数倍,这样,每个线程可以分配一个或多个第一寄存器组2011。为了简洁,图2中以第一寄存器组2011的数量为2,第二寄存器组2012的数量为1,线程数量为2,且每个线程分配一个第一寄存器组为例进行说明,其中r表示寄存器。本领域技术人员可以理解,上述情况仅为示例性说明,在实际应用中,第一寄存器组2011的数量、第二寄存器组2012的数量、线程的数量和/或每个线程被分配的第一寄存器组的数量也可以取其他的数值,此处不再赘述。为了便于说明,下文以每个线程分配一个第一寄存器组,且各个第一寄存器组中包括的寄存器的数量相等为例,对本公开实施例的方案进行说明。
42.可以通过配置信息对第一寄存器组2011的数量、第二寄存器组2012的数量、第一寄存器组2011中寄存器的数量以及第二寄存器组2012中寄存器的数量分别进行配置。在一些实施例中,配置信息只需指定第一寄存器组2011的数量和第二寄存器组2012的数量,而
无需指定具体由哪个或哪些寄存器来组成第一寄存器组2011和第二寄存器组2012,这样,配置灵活性较高。配置信息可以由控制器生成,处理器可以基于配置信息自动指定相应数量的寄存器组成第一寄存器组2011和第二寄存器组2012。在第一寄存器组2011的数量、第二寄存器组2012的数量、第一寄存器组2011中寄存器的数量和第二寄存器组2012中寄存器的数量中的至少一种信息需要更改时,只需要更改相应的配置信息即可。
43.为了便于说明,下面将第一寄存器组2011和第二寄存器组2012统称为寄存器组,下文中提到的寄存器组既可以是第一寄存器组2011,也可以是第二寄存器组2012。
44.一个第一寄存器组2011只能被分配给一个线程,分配以后,该第一寄存器组2011对其他线程不可见。这样,可以实现不同线程之间的数据隔离。每个第二寄存器组2012可以分配给至少两个线程,这样,可以使所述至少两个线程实现数据复用。例如,在图2中,可以将其中一个第一寄存器组2011分配给线程0,将另一个第一寄存器组2011分配给线程1,并将第二寄存器组2012同时分配给线程0和线程1。
45.各个线程均可以访问分配给该线程的寄存器组中的目标寄存器,以便从目标寄存器中读取数据,或者将数据写入目标寄存器。其中,目标寄存器的数量可以大于或等于1。各个线程均可以由处理单元202进行调度,处理单元202在调度一个目标线程时,可以响应于该目标线程的数据访问请求,对分配给所述目标线程的寄存器组中的目标寄存器进行访问。
46.数据访问请求中可以携带目标寄存器的逻辑地址。处理单元需要将所述逻辑地址映射为所述目标寄存器的物理地址,再基于所述物理地址访问所述目标寄存器。其中,一个寄存器的逻辑地址可以用于表示该寄存器在分配给某个线程的寄存器组中的标识信息,一个寄存器的物理地址可以用于表示该寄存器在寄存器堆中的标识信息。各个寄存器的物理地址和逻辑地址均可以采用整数(例如,0,1,2,3,
……
)进行顺序编号。分配给不同的线程的寄存器组中的寄存器的逻辑地址可以相同,但不同寄存器的物理地址一定是不同的。例如,在图3所示的实施例中,物理地址为0、1、2的寄存器为分配给线程0的寄存器组中的寄存器,上述寄存器的逻辑地址分别为0、1、2。而物理地址为3、4、5的寄存器为分配给线程1的寄存器组中的寄存器,上述寄存器的逻辑地址也分别为0、1、2。
47.处理单元202通过将逻辑地址映射为物理地址,可以唯一确定目标寄存器,以便访问正确的寄存器。例如,对线程1而言,在其访问的目标寄存器的逻辑地址为0的情况下,需要将该逻辑地址映射为寄存器在第一寄存器堆201中的物理地址(即3)。在一些实施例中,第一寄存器组中的寄存器与第二寄存器组中的寄存器的逻辑地址可以独立设置。例如,在图2所示的实施例中,分配给线程0的第一寄存器组中的寄存器的逻辑地址可以是从0开始的整数(例如,0,1,2,3,
……
),分配给线程0的第二寄存器组中的寄存器的逻辑地址也可以设置为从0开始的整数(例如,0,1,2,3,
……
)。由于第一寄存器组在寄存器堆中所处的位置与第二寄存器组在寄存器堆中所处的位置是不同的,因此,处理单元202可以基于目标寄存器所属的寄存器组的类型以及目标寄存器所属的寄存器组在寄存器堆中所处的位置,共同确定目标寄存器的物理地址。一个寄存器组的类型用于表征该寄存器组是第一寄存器组还是第二寄存器组。
48.具体来说,在所述目标寄存器为所述第一寄存器组中的寄存器的情况下,可以基于分配给各个在先线程的寄存器的总数量以及所述逻辑地址确定所述物理地址。其中,所
述在先线程包括线程编号(即线程id)小于所述目标线程的各个线程。例如,各个线程的线程id依次为0,1,2等整数,且目标线程的线程id是2,则在先线程包括线程id为0的线程以及线程id为1的线程。可以对分配给每个在先线程的寄存器的数量进行求和,得到分配给各个在先线程的寄存器的总数量。在分配给各个线程的寄存器的数量相等的情况下,可以基于在先线程的数量与分配给单个线程的寄存器的数量之间的乘积,得到分配给各个在先线程的寄存器的总数量。其中,在为每个线程分配k(k为正整数)个第一寄存器组的情况下,分配给单个线程的寄存器的数量即为这k个寄存器组包括的寄存器的总数量。
49.如图4a所示,假设线程的总数量为n,k=1,即,第一寄存器组的总数量也为n,并假设每个第一寄存器组包括的寄存器的数量均为m,第二寄存器组包括的寄存器的数量为p,第二寄存器组由全部n个线程共享,第二寄存器组构成的存储空间也称为共享空间。在所述目标寄存器为所述第一寄存器组中的寄存器的情况下,目标寄存器的物理地址physical_addr可以记为:
50.physical_addr=reg_id thread_id*m;
51.其中,reg_id为目标寄存器的逻辑地址,thread_id为线程id,m为第一寄存器组中寄存器的数量。可以采用加法器与乘法器分别实现上述公式中的加法运算和乘法运算,从而得到物理地址。
52.在所述目标寄存器为所述第二寄存器组中的寄存器的情况下,可以基于分配给各个线程的寄存器的总数量以及所述逻辑地址确定所述物理地址。仍以图4a所示的情况为例,在所述目标寄存器为所述第二寄存器组中的寄存器的情况下,目标寄存器的物理地址physical_addr可以记为:
53.physical_addr=reg_id n*m;
54.其中,n为线程的总数量。
55.在上述实施例中,第二寄存器组中的寄存器的物理地址大于第一寄存器组中的寄存器的物理地址,即,第二寄存器组中的寄存器为寄存器堆中在后的寄存器,第一寄存器组中的寄存器为寄存器堆中在前的寄存器(情况一)。在实际应用中,第二寄存器组中的寄存器的物理地址也可以小于第一寄存器组中的寄存器的物理地址,即,第二寄存器组中的寄存器为寄存器堆中在前的寄存器,第一寄存器组中的寄存器为寄存器堆中在后的寄存器(情况二)。或者,也可以将寄存器堆中处于中间位置的若干个寄存器作为第二寄存器组中的寄存器,将寄存器堆中靠前和靠后的寄存器作为第一寄存器组中的寄存器(情况三)。
56.第一寄存器组和第二寄存器组在寄存器堆中的位置关系的三种分布情况如图5所示。其中,灰色方块表示第二寄存器组中的寄存器,白色方块表示第一寄存器组中的寄存器,方块中的数字表示各个寄存器的物理地址。在不同的位置关系下,物理地址的计算方式也不同。例如,仍假设线程的总数量为n,k=1,即,第一寄存器组的总数量也为n,并假设每个第一寄存器组包括的寄存器的数量均为m,第二寄存器组包括的寄存器的数量为p,第二寄存器组由全部n个线程共享。在上述情况二中,在所述目标寄存器为所述第一寄存器组中的寄存器的情况下,目标寄存器的物理地址physical_addr可以记为:
57.physical_addr=p reg_id thread_id*m;
58.在所述目标寄存器为所述第二寄存器组中的寄存器的情况下,目标寄存器的物理地址等于目标寄存器的逻辑地址。
59.在上述情况三中,在所述目标寄存器为所述第一寄存器组中的寄存器的情况下,假设寄存器堆中位于第二寄存器组之前的第一寄存器组的数量为x,则目标寄存器的物理地址physical_addr可以记为:
60.physical_addr=reg_id thread_id*m,0<thread_id<x;
61.physical_addr=p reg_id thread_id*m,thread_id≥x;
62.在所述目标寄存器为所述第二寄存器组中的寄存器的情况下,目标寄存器的物理地址physical_addr可以记为:
63.physical_addr=reg_id x*m。
64.在一些实施例中,所述第一寄存器堆被划分为至少一个存储单元(bank),每个存储单元均包括至少一个第一寄存器组以及至少一个第二寄存器组;不同的存储单元之间物理隔离,且不同的存储单元对应于不同的线程,一个存储单元包括的第一寄存器组用于分配给对应于所述存储单元的一个线程,一个存储单元包括的第二寄存器组用于分配给对应于所述存储单元的至少两个线程。这种方式称为交织。对于多个bank的寄存器堆,为保证均匀访问,会将共享空间通过交织的方式均匀分配在每个bank上。
65.以图4b为例,共有k个bank,在每个bank上预留p个寄存器的共享空间,整体的共享空间容量为k*p,各个存储单元上的共享存储空间可以分配给任意一个线程。共享空间的逻辑地址为0到k*p-1,共享空间(即第二寄存器组)中的寄存器的逻辑地址在各个bank上可以交织排列,如图所示,bank_0上的第二寄存器组中的寄存器的逻辑地址为k*(0~p-1),即,寄存器编号分别为0,k,2k,
……
,(p-1)*k;bank_1上的第二寄存器组中的寄存器的逻辑地址为1 k*(0~p-1),即,寄存器编号分别为1,k 1,2k 1,
……
,(p-1)*k 1,以此类推。例如,假设k=3,p=5,则bank_0上第二寄存器组中寄存器的编号为0/3/6/9/12,bank_1上第二寄存器组中寄存器的编号为1/4/7/10/13,bank_2上第二寄存器组中寄存器的编号为2/5/8/11/14。当然,本领域技术人员可以理解,交织方式不限于此。
66.每个bank上还预留有各个线程专用的存储空间(即第一寄存器组),例如,bank_0上预留有线程0、线程k、
……
、线程n-k专用的存储空间,bank_1上预留有线程1、线程k 1、
……
、线程n-k 1专用的存储空间。为了便于说明,这里假设一个bank上为各个线程预留的专用的存储空间的大小均为m,即,每个线程在一个bank上的逻辑地址都为0到m-1。预留给一个线程的地址为0到m-1的寄存器组成一个第一寄存器组,即分配给一个线程的第一寄存器组中包括m个寄存器。
67.其中,不同的存储单元对应于不同的线程,以线程数量等于9,存储单元数量等于3为例,则存储单元bank_0对应于线程0、线程3和线程6,存储单元bank_0包括的第一寄存器组可以分别分配给线程0、线程3和线程6。存储单元bank_1对应于线程1、线程4和线程7,则存储单元bank_1包括的第一寄存器组可以分别分配给线程1、线程4和线程7。存储单元bank_2对应于线程2、线程5和线程8,则存储单元bank_2包括的第一寄存器组可以分别分配给线程2、线程5和线程8。当然,除了上述实施例中所述的交织方式之外,还可以采用其他的交织方式,此处不再一一举例。
68.在上述多bank的情况下,若所述目标寄存器为所述第一寄存器组中的寄存器,可以基于所述目标线程的编号以及所述存储单元的数量确定所述目标寄存器所在的存储单元,并基于分配给各个在先线程的寄存器组的总数量、存储单元的数量以及所述逻辑地址
确定所述物理地址;所述在先线程包括线程编号小于所述目标线程的各个线程。例如,所述目标寄存器所在的存储单元的编号physical_bank可以记为:
69.physical_bank=thread_id%k;
70.目标寄存器在对应存储单元上的物理地址physical_addr可以记为:
71.physical_addr=reg_id thread_id/k*m;
72.其中,%表示求余数的操作符,公式中其余符号的物理含义与前述实施例相同。仍以线程数量n等于9,存储单元数量k等于3为例,并假设m=3,则线程编号为0~8,分配给每个线程的第一寄存器组中的寄存器的物理地址为0~2。在目标寄存器为分配给线程0的第一寄存器组中物理地址为1的寄存器的情况下,目标寄存器所在的存储单元的编号为0%3,即bank_0,目标寄存器在bank_0上的物理地址可以记为1 0/3*9=1。在目标寄存器为分配给线程1的第一寄存器组中的物理地址为2的寄存器的情况下,目标寄存器所在的存储单元的编号为1%3,即bank_1,目标寄存器在bank_1上的物理地址可以记为2 1/3*9=5。
73.若所述数据访问请求所访问的寄存器为所述第二寄存器组中的寄存器,可以基于所述逻辑地址以及所述存储单元的数量确定所述目标寄存器所在的存储单元,并基于分配给各个线程的寄存器组的总数量、存储单元的数量以及所述逻辑地址确定所述物理地址。例如,所述目标寄存器所在的存储单元的编号physical_bank可以记为:
74.physical_bank=reg_id%k;
75.目标寄存器在对应存储单元上的物理地址physical_addr可以记为:
76.physical_addr=reg_id/k n/k*m。
77.仍以线程数量n等于9,存储单元数量k等于3,m=3为例,并假设p=5。在目标寄存器为第二寄存器组中编号为6的寄存器的情况下,目标寄存器所在的存储单元的编号为6%3=0,即目标寄存器在bank_0上,目标寄存器的物理地址为6/3 9/3*3=11。
78.在一些实施例中,可以将k设置为2的幂次方,并将k设置为n的整数倍,如果reg_id的值不为整数,可以向下取整,以便得到的物理地址为整数。
79.在基于上述方式确定目标寄存器之后,可以访问目标寄存器,例如,从目标寄存器中读取数据。在一些实施例中,从目标寄存器中读取的数据可以作为另一个寄存器的访问地址,用来访问另一个寄存器中的数据。例如,所述目标寄存器可以为所述第一寄存器组中的寄存器。处理单元202可以先获取目标寄存器的物理地址(即索引寄存器编号),基于索引寄存器编号将从所述目标寄存器中读取的数据作为索引信息(即地址信息,也即图中的索引寄存器值),并基于所述索引信息对所述第二寄存器组中的寄存器进行访问。例如,假设第一寄存器组中的目标寄存器的逻辑地址为a1,通过上述方式可以计算该目标寄存器的物理地址,假设为a2,访问物理地址为a2的寄存器,得到其中的数据a3,将a3作为第二寄存器组中某个寄存器的逻辑地址,并基于a3计算该寄存器的物理地址,假设为地址a4,然后可以访问地址为a4的寄存器。上述过程可参见图6,指令通路可以基于多线程上下文信息(context)读取多个线程发送的指令(即前述数据访问请求),并对数据访问请求进行译码后,发送至执行通路。其中,所述数据访问请求可用于访问第一寄存器组中的目标寄存器。在获取到目标寄存器中的数据之后,将该数据作为索引信息来访问第二寄存器组中的寄存器。这种方式称为间接寻址。
80.上述方案可拓展到包含并行计算单元的处理器,如包含单指令多数据结构
(single instruction multiple data,simd)单元的cpu或者gpu中。参见图7,处理单元202可以先获取第二寄存器堆中需要访问的寄存器的物理地址(即索引寄存器编号),基于索引寄存器编号获取从第二寄存器堆中读取的索引信息(即图中的索引寄存器值);基于从第二寄存器堆中读取的索引信息对所述目标寄存器进行访问。这里的目标寄存器既可以是第一寄存器组中的寄存器,也可以是第二寄存器组中的寄存器。本公开实施例的主要思想为:处理器中可以包含两个独立的寄存器堆,其中,第二寄存器堆可以是向量寄存器堆,用于存储并行计算的simd数据或单指令多线程(single instruction multiple threads,simt)数据;第一寄存器堆可以是标量寄存器堆,用于存储简单标量数据或者控制信息。可以用标量寄存器堆读出来的值作为索引来访问向量寄存器堆,然后将从向量寄存器堆中获取的数据送入执行通路。由于核心的运算发生在向量寄存器堆中,因此主要为向量寄存器堆增加共享空间的支持。
81.在一些实施例中,除了进行间接寻址之外,也可以将从寄存器中读取的数据直接用于数据运算,这种方式称为直接寻址。在直接寻址情况下,从第二寄存器堆包括的寄存器或者从第一寄存器组包括的寄存器中读取的数据不再作为索引信息来访问其他的寄存器,而是直接用于进行数据运算(例如,乘法运算、加法运算等)。为了便于区分直接寻址和间接寻址两种情况,所述数据访问请求中可以包括指示位,所述指示位用于指示是否将从所述目标寄存器中读取的数据作为所述索引信息。具体来说,指示位可以包括两个指示状态,在指示位处于第一指示状态的情况下,确定将从所述目标寄存器中读取的数据作为所述索引信息;在指示位处于第二指示状态的情况下,确定不将从所述目标寄存器中读取的数据作为所述索引信息。在一些实施例中,可以通过至少1比特的数据位来表示所述第一指示状态和所述第二至少状态。例如,可以用二进制数据“0”表示第一指示状态,用二进制数据“1”表示第二指示状态。当然,指示状态的表示方式不限于此,本领域技术人员可以根据实际情况采用其他的方式来表示不同的指示状态,此处不再一一列举。
82.在一些实施例中,所述处理器还包括指令通路,用于发送对所述目标寄存器的数据访问请求;以及执行通路,用于获取所述目标寄存器响应于所述数据访问请求传输的数据,并对获取的数据进行运算处理。本公开实施例的方案既可以应用于上述直接寻址场景,也可以应用于上述间接寻址场景。
83.具体来说,所述指令通路可以包括:指令读取单元,用于读取所述目标线程发送的数据访问请求;指令译码单元,用于对所述指令读取单元读取的数据访问请求进行译码;指令发射单元,用于将译码后的数据访问请求发送至所述目标寄存器。目标寄存器可以将存储的数据输出至执行通路进行运算处理,也可以将存储的数据作为索引信息返回给指令发射单元,以使指令发射单元基于索引信息将相应的寄存器中存储的数据发送至执行通路进行运算处理。
84.在一些实施例中,所述执行通路包括:运算单元,用于对获取的数据进行运算处理;以及访存单元,用于将运算结果输出至内存,和/或将内存中存储的数据输出至所述运算单元进行运算处理。运算单元可包括一个或多个子运算单元,例如加法运算单元、乘法运算单元、卷积乘运算单元等,运算单元中包括的子运算单元的数量和类型可以基于实际需求设置。访存单元用于实现运算单元与内存之间的数据传输,在寄存器堆中不包括运算所需的数据时,可以通过访存单元访问内存来获取相应数据。进一步地,从标量寄存器中获取
的数据也可以作为需要运算的数据输出至标量执行单元进行处理。
85.参见图8,本公开实施例还提供一种芯片,所述芯片包括处理器801,所述处理器801可以采用上述任一实施例中所述的处理器。在一些实施例中,所述芯片可以应用于ai加速卡中。在一些实施例中,所述芯片还包括控制器802,用于对以下至少一种信息进行配置:所述第一寄存器组包括的寄存器的第一数量信息,所述第二寄存器组包括的寄存器的第二数量信息,所述第一寄存器组的数量,所述第二寄存器组的数量。
86.本公开实施例的细节详见前述处理器的实施例,此处不再赘述。
87.本公开实施例还提供一种电子设备,包括上述任一实施例中所述的芯片。
88.参见图9,本公开实施例还提供一种数据处理方法,应用于本公开任一实施例所述的处理器中的处理单元,所述方法包括:
89.步骤901:对多个线程中的每个线程进行调度;
90.步骤902:响应于所述多个线程中的目标线程的数据访问请求,访问分配给所述目标线程的寄存器组中的目标寄存器。
91.在一些实施例中,所述目标线程的数据访问请求中携带所述目标寄存器的逻辑地址;所述响应于所述多个线程中的目标线程的数据访问请求,访问分配给所述目标线程的寄存器组中的目标寄存器,包括:将所述逻辑地址映射为所述目标寄存器的物理地址;基于所述物理地址访问所述目标寄存器。
92.在一些实施例中,所述将所述逻辑地址映射为所述目标寄存器的物理地址,包括:在所述目标寄存器为所述第一寄存器组中的寄存器的情况下,基于分配给各个在先线程的寄存器的总数量以及所述逻辑地址确定所述物理地址;所述在先线程包括线程编号小于所述目标线程的各个线程;和/或在所述目标寄存器为所述第二寄存器组中的寄存器的情况下,基于分配给各个线程的寄存器的总数量以及所述逻辑地址确定所述物理地址。
93.在一些实施例中,所述第一寄存器堆被划分为至少一个存储单元,每个存储单元均包括至少一个第一寄存器组以及至少一个第二寄存器组;不同的存储单元之间物理隔离,且不同的存储单元对应于不同的线程,一个存储单元包括的第一寄存器组用于分配给对应于所述存储单元的一个线程,一个存储单元包括的第二寄存器组用于分配给对应于所述存储单元的至少两个线程;所述将所述逻辑地址映射为所述目标寄存器的物理地址,包括:在所述目标寄存器为所述第一寄存器组中的寄存器的情况下,基于所述目标线程的线程编号以及所述存储单元的数量确定所述目标寄存器所在的存储单元,并基于分配给各个在先线程的寄存器组的总数量、存储单元的数量以及所述逻辑地址确定所述物理地址;所述在先线程包括线程编号小于所述目标线程的各个线程;和/或在所述数据访问请求所访问的寄存器为所述第二寄存器组中的寄存器的情况下,基于所述逻辑地址以及所述存储单元的数量确定所述目标寄存器所在的存储单元,并基于分配给各个线程的寄存器组的总数量、存储单元的数量以及所述逻辑地址确定所述物理地址。
94.在一些实施例中,所述目标寄存器为所述第一寄存器组中的寄存器;所述响应于所述多个线程中的目标线程的数据访问请求,访问分配给所述目标线程的寄存器组中的目标寄存器,包括:将从所述目标寄存器中读取的数据作为索引信息,并基于所述索引信息对所述第二寄存器组中的寄存器进行访问。
95.在一些实施例中,所述响应于所述多个线程中的目标线程的数据访问请求,访问
分配给所述目标线程的寄存器组中的目标寄存器,包括:获取从第二寄存器堆中读取的索引信息;基于从第二寄存器堆中读取的索引信息对所述目标寄存器进行访问。
96.在一些实施例中,所述数据访问请求中包括指示位,所述指示位用于指示是否将从所述第二寄存器堆中读取的数据作为访问所述目标寄存器的索引信息。
97.在一些实施例中,所述方法还包括:通过指令通路发送对所述目标寄存器的数据访问请求;通过执行通路获取所述目标寄存器响应于所述数据访问请求传输的数据,并对获取的数据进行运算处理。
98.在一些实施例中,所述通过指令通路发送对所述目标寄存器的数据访问请求,包括:通过所述指令通路中的指令读取单元读取所述目标线程发送的数据访问请求;通过所述指令通路中的指令译码单元对所述指令读取单元读取的数据访问请求进行译码;通过所述指令通路中的指令发射单元将译码后的数据访问请求发送至所述目标寄存器;和/或所述通过执行通路获取所述目标寄存器响应于所述数据访问请求传输的数据,并对获取的数据进行运算处理,包括:通过所述执行通路中的运算单元对获取的数据进行运算处理;以及通过所述执行通路中的访存单元将运算结果输出至内存,和/或将内存中存储的数据输出至所述运算单元进行运算处理。
99.在一些实施例中,各个第一寄存器组包括的寄存器的数量相同。
100.本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述任一实施例所述的方法。
101.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
102.通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
103.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
104.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实
施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
105.以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。
再多了解一些

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

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

相关文献