数据处理方法和装置、电子设备和计算机可读存储介质与流程

文档序号:33425164发布日期:2023-03-11 01:51阅读:62来源:国知局
数据处理方法和装置、电子设备和计算机可读存储介质与流程

1.本公开的实施例涉及一种数据处理方法、数据处理装置、电子设备和计算机可读存储介质。


背景技术:

2.随着计算机技术的发展,电子设备日新月异,同时对显示技术的要求不断增高,例如,对gpu(graphics processing unit,图形处理器)的处理能力的要求不断提高。由于gpu具备大规模并行处理能力,现在越来越多应用将其用于大规模的并行计算。gpu可以包括多个并行的计算模块,每个计算模块可以处理多个线程任务。


技术实现要素:

3.本公开至少一个实施例提供一种数据处理方法,该数据处理方法用于数据处理装置,其中,所述数据处理装置包括多个计算模块,所述多个计算模块中的每个包括多个线程执行单元和所述多个线程执行单元共用的共享内存,所述多个计算模块包括第一计算模块和第二计算模块,所述数据处理方法包括:通过所述第一计算模块的共享内存和所述第二计算模块的共享内存之间建立的数据传输通道,直接传输所述第一计算模块运行的第一工作组和所述第二计算模块运行的第二工作组之间的待交互的数据。
4.例如,在本公开一实施例提供的数据处理方法中,所述待交互的数据为所述第一工作组和所述第二工作组的共享数据。
5.例如,在本公开一实施例提供的数据处理方法中,所述待交互的数据为所述第一工作组和所述第二工作组之间需要同步的数据。
6.例如,在本公开一实施例提供的数据处理方法中,所述数据传输通道通过直接存储器访问的方式进行数据交互。
7.例如,在本公开一实施例提供的数据处理方法中,所述第一工作组包含的线程的数量和所述第二工作组包含的线程的数量相同。
8.例如,本公开一实施例提供的数据处理方法还包括:接收包括所述第一工作组和所述第二工作组的待分发工作组;确定目标分发模式;基于所述目标分发模式,分发所述待分发工作组。
9.例如,在本公开一实施例提供的数据处理方法中,确定目标分发模式,包括:获取所述待分发工作组的配置信息;从至少两个分发模式中选取与所述配置信息相匹配的分发模式,作为所述目标分发模式,其中,所述至少两个分发模式包括第一分发模式和第二分发模式,在所述第一分发模式下,将所述待分发工作组分发至所述多个计算模块中的一个计算模块,在所述第二分发模式下,将所述待分发工作组分发至所述多个计算模块中的n个计算模块,所述n个计算模块中的至少部分计算模块的共享内存之间具有数据传输通道,以使所述n个计算模块中的任意两个计算模块能够通过所述数据传输通道进行交互,其中,n为大于1的整数。
10.例如,在本公开一实施例提供的数据处理方法中,所述配置信息包括所述待分发工作组的线程数量和/或所述待分发工作组的每个线程的处理数据量。
11.例如,在本公开一实施例提供的数据处理方法中,确定目标分发模式,包括:从存储单元获取模式选定信息,其中,所述模式选定信息表征用户选定的分发模式的类型;从至少两个分发模式中选取与所述分发模式选定信息相匹配的分发模式,作为所述目标分发模式。
12.例如,在本公开一实施例提供的数据处理方法中,基于所述目标分发模式,分发所述待分发工作组,包括:响应于所述目标分发模式为所述第二分发模式,将所述待分发工作组切分为n个工作组;将所述n个工作组分别分发至所述n个计算模块。
13.例如,在本公开一实施例提供的数据处理方法中,所述n个工作组包括所述第一工作组和所述第二工作组,所述n个计算模块包括所述第一计算模块和所述第二计算模块;将所述n个工作组分别分发至所述n个计算模块,包括:将所述第一工作组分发至所述第一计算模块;将所述第二工作组分发至所述第二计算模块。
14.例如,在本公开一实施例提供的数据处理方法中,将所述n个工作组分别分发至所述n个计算模块,包括:将所述多个计算模块分成包括n个计算模块的模块组;将所述待分发工作组分发至一个所述模块组包含的n个计算模块。
15.例如,在本公开一实施例提供的数据处理方法中,基于所述目标分发模式,分发所述待分发工作组,还包括:在将所述n个工作组分别分发至所述n个计算模块之前,确定所述n个计算模块是否满足所述n个工作组的资源需求;在所述n个计算模块满足所述n个工作组的资源需求的情况下,将所述n个工作组分别分发至所述n个计算模块。
16.例如,在本公开一实施例提供的数据处理方法中,所述多个计算模块中的每个还包括多个寄存器,针对每个所述计算模块,所述多个寄存器与所述共享内存和所述多个线程执行单元进行交互;确定所述n个计算模块是否满足所述n个工作组的资源需求,包括:确定所述n个计算模块包含的寄存器数量是否满足所述n个工作组的数量需求;和/或确定所述n个计算模块包含的共享内存的容量是否满足所述n个工作组的容量需求。
17.例如,在本公开一实施例提供的数据处理方法中,确定所述n个计算模块包含的寄存器数量是否满足所述n个工作组的数量需求,包括以下中的至少一个:确定所述n个计算模块包含的寄存器的总数量是否大于或等于所述待分发工作组所需的寄存器数量;确定所述n个计算模块中的每个计算模块包含的寄存器数量是否大于或等于所述n个工作组中分发到所述计算模块上的工作组所需的寄存器数量。
18.例如,在本公开一实施例提供的数据处理方法中,确定所述n个计算模块包含的共享内存的容量是否满足所述n个工作组的容量需求,包括:确定所述n个计算模块包含的n个共享内存的总容量是否大于或等于所述待分发工作组所需的内存容量。
19.例如,在本公开一实施例提供的数据处理方法中,所述第一计算模块还包括第一指令调度单元,所述第二计算模块还包括第二指令调度单元;通过所述第一计算模块的共享内存和所述第二计算模块的共享内存之间建立的数据传输通道,直接传输所述第一计算模块运行的第一工作组和所述第二计算模块运行的第二工作组之间的待交互的数据,包括:所述第一指令调度单元向所述第二指令调度单元发送访问指令;所述第二指令调度单元基于所述访问指令向所述第二计算模块的共享内存发送数据传输命令;所述第二计算模
块的共享内存基于所述数据传输命令,将与所述访问指令相对应的数据通过所述数据传输通道发送至所述第一计算模块的共享内存,其中,所述待交互的数据包括与所述访问指令相对应的数据。
20.例如,在本公开一实施例提供的数据处理方法中,所述第一指令调度单元向所述第二指令调度单元发送访问指令,包括:所述第一指令调度单元通过所述第一指令调度单元和所述第二指令调度单元之间建立的命令传输通道,向所述第二指令调度单元发送所述访问指令。
21.例如,在本公开一实施例提供的数据处理方法中,通过所述第一计算模块的共享内存和所述第二计算模块的共享内存之间建立的数据传输通道,直接传输所述第一计算模块运行的第一工作组和所述第二计算模块运行的第二工作组之间的待交互的数据,还包括:响应于所述第一计算模块的共享内存存储与所述访问指令相对应的数据,所述第一计算模块的共享内存传输数据传递完毕信息至所述第一指令调度单元。
22.本公开至少一个实施例提供一种数据处理装置,包括多个计算模块,其中,所述多个计算模块中的每个包括多个线程执行单元和所述多个线程执行单元共用的共享内存;其中,所述多个计算模块包括第一计算模块和第二计算模块,所述第一计算模块的共享内存和所述第二计算模块的共享内存之间具有数据传输通道,所述数据传输通道配置为直接传输所述第一计算模块运行的第一工作组和所述第二计算模块运行的第二工作组之间的待交互的数据。
23.例如,本公开一实施例提供的数据处理装置还包括模式控制单元,其中,所述模式控制单元配置为:接收包括所述第一工作组和所述第二工作组的待分发工作组;确定目标分发模式;基于所述目标分发模式,分发所述待分发工作组。
24.例如,本公开一实施例提供的数据处理装置还包括存储单元,其中,所述存储单元配置为存储模式选定信息,其中,所述模式选定信息表征用户选定的模式的类型;所述模式控制单元进一步配置为:从至少两个分发模式中选取与所述模式选定信息相匹配的分发模式,作为所述目标分发模式。
25.本公开至少一个实施例提供一种电子设备,包括处理器;存储器,存储有一个或多个计算机程序模块;其中,所述一个或多个计算机程序模块被配置为由所述处理器执行,用于实现本公开任一实施例提供的数据处理方法。
26.本公开至少一个实施例提供一种计算机可读存储介质,存储有非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时可以实现本公开任一实施例提供的数据处理方法。
附图说明
27.为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
28.图1示出了本公开至少一实施例提供的一种gpu运算的编程模型的示意图;
29.图2示出了本公开至少一实施例提供的一种gpu的硬件架构的示意图;
30.图3示出了本公开至少一实施例提供的一种数据处理装置的示意图;
31.图4示出了本公开至少一实施例提供的一种数据处理方法的流程图;
32.图5示出了本公开至少一个实施例提供的另一种数据处理方法的流程图;
33.图6示出了本公开至少一个实施例提供的分发模式的示意图;
34.图7为本公开一些实施例提供的一种电子设备的示意框图;
35.图8为本公开一些实施例提供的另一种电子设备的示意框图;以及
36.图9示出了本公开至少一个实施例提供的一种计算机可读存储介质的示意图。
具体实施方式
37.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
38.除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
39.图1示出了本公开至少一实施例提供的一种gpu运算的编程模型的示意图。
40.如图1所示,可以将线程网格定义为多个工作组的集合,例如工作组(0,0)和工作组(0,1)等。工作组可以理解为是gpu内执行同样程序代码的多个线程组成的一个线程组。一个工作组内可以包含若干个并行执行的线程,例如,每个工作组包括的多个线程可以包括线程(0,0)、线程(0,1)、

等等。每个线程都可以对应使用一个私有的寄存器。一个工作组内还可以定义有共享内存(share memory),共享内存对同一个工作组的所有线程是可见的,共享内存可以理解为工作组内的不同线程都可以访问的存储器,通过共享内存,工作组内的不同线程之间可以完成数据的传递和交换,这样就提高了数据的重用性。
41.图2示出了本公开至少一实施例提供的一种gpu的硬件架构的示意图。
42.如图2所示,与图1所示的gpu编程模型相对应,gpu的硬件架构可以有相对应的硬件模块。硬件架构可以包括多个计算模块,例如包括计算模块0和计算模块1等。计算模块例如是算术逻辑单元alu(arithmetic logic unit),是gpu内最小单位的计算部件。每个计算模块可以包括共享内存和多个并行的线程执行单元,该多个并行的线程执行单元均与共享内存连接以进行通信。线程执行单元用于执行线程任务,每个线程执行单元可以同时执行一个或多个线程任务,例如,同一个线程执行单元可以被分时复用以执行多个线程任务。共享内存和线程执行单元之间可以具有进行数据暂存的寄存器(即线程的私有寄存器)。每个计算模块还可以包括指令调度单元和指令缓存单元,指令调度单元可以从指令缓存单元里读取指令,还可以负责指令的发射,指令依赖关系的判断,指令跳转以及一部分指令执行的操作。
43.如图2所示,除了多个计算模块之外,gpu还可以包括与该多个计算模块的线程执行单元通信的多个一级缓存和与该多个一级缓存通信的二级缓存,二级缓存与gpu外部的全局内存进行通信。全局内存可以是设备内存和系统内存。在另一些实施例中,gpu还可以包括三级缓存等其他缓存单元。此外,gpu还可以包括与多个计算模块通信的命令解析/工作组分发模块。
44.如图1和图2所示,主控制器与全局内存和gpu的命令解析/工作组分发模块通信,主控制器可以把程序的运算数据准备好放到全局内存里,还可以将程序的命令数据通过驱动程序下发给gpu的命令解析/工作组分发模块。命令解析/工作组分发模块解析完命令后,可以将接收到的线程网格分割成工作组下发到计算模块。gpu内有多个计算模块,根据编程协议,一个工作组只能运行在一个计算模块上。在一些示例中,可以使一个计算模块运行多个工作组。gpu通过数据读取指令,将各种类型的数据从全局内存首先装载到gpu的缓存(例如一级缓存、二级缓存),然后再从缓存(例如一级缓存、二级缓存)装载到计算模块的寄存器或者是共享内存里。
45.存储在共享内存里的数据用于计算时,当计算上的延迟大于或等于下一批数据从全局内存装载到共享内存的延迟时,gpu的计算部件就能保持繁忙状态,此时gpu硬件的利用率最高。同一计算模块的工作组内的线程可以通过共享内存进行数据交换以提高数据的重用性,但不同计算模块之间相互是隔离的,因此,不同计算模块运行的工作组不能相互访问对方的共享内存。由于每个工作组即使执行的指令一样,由于访存响应速度的不固定,所以工作组的完成时间不一定是一样的,这就造成不同的工作组在gpu内存活的时间是随机的,虽然理论上这些工作组可以通过一级或者二级缓存进行数据交换,但由于这种随机性的存在,想要控制指定的一些工作组在一级或者二级缓存进行数据交换比较困难,特别是想利用一级缓存就进行数据交换以达到节省二级缓存带宽的目的就更困难了,因此通常需要经过全局内存进行数据交换。并且,二级缓存的容量是有限的,一旦数据无法从二级缓存上找到,那么这些数据也需要到全局内存去读取,因此,计算模块需要频繁地访问全局内存。
46.gpu工作时为了保持计算延迟和全局数据读取延迟能够相互掩盖,一般会按照一定比例将两种指令捆绑起来分多批次的执行来完成某一个计算任务。为了提高gpu的性能,可以通过增加计算模块中的线程执行单元的数量,来缩短运算指令的时间。当运算的延迟小于全局数据的读取延迟时,为了保证gpu的线程执行单元还能够一直处于繁忙状态,可以增加计算模块与一级或二级缓存的带宽甚至是缓存和全局内存之间的带宽,以提高数据装载速度。但是增加带宽对于硬件的开销非常大,特别是gpu访问全局内存这条路径非常长,芯片的制造成本较大。因此,需要一种能够降低对全局内存读取路径上的带宽需求,并且能够提高数据读取速度,进而提高线程执行单元的运行效率的方案。
47.本公开至少一个实施例提供一种数据处理方法、数据处理装置、电子设备和计算机可读存储介质。该数据处理方法用于数据处理装置,该数据处理装置包括多个计算模块,该多个计算模块中的每个包括多个线程执行单元和该多个线程执行单元共用的共享内存,该多个计算模块包括第一计算模块和第二计算模块,该数据处理方法包括:通过该第一计算模块的共享内存和该第二计算模块的共享内存之间建立的数据传输通道,直接传输该第一计算模块运行的第一工作组和该第二计算模块运行的第二工作组之间的待交互的数据。
48.该数据处理装置在不同的计算模块的共享内存之间增加了直接读取通路(即数据传输通道),该数据处理方法利用该直接读取通路(即数据传输通道),实现了不同计算模块的工作组之间的直接数据传递,无需再从一级缓存、二级缓存甚至是全局内存绕行,减少了对全局内存的读取次数,也减少了对一级缓存、二级缓存的读取次数,缩短了数据读取路径,加快了数据读取速度,降低了全局内存读取路径上的带宽需求,在不需要增加数据传输带宽的情况下提高了数据读取速度,进而提高了线程执行单元的运行效率。此外,还增加了数据的重用性,减小了访存带宽的需求,可使用软件进行控制,易于控制。
49.图3示出了本公开至少一实施例提供的一种数据处理装置的示意图。
50.如图3所示,数据处理装置可以包括gpu,在其他实施例中,数据处理装置还可以包括cpu(central processing unit,中央处理器)、tpu(tensor processing unit,张量处理器)等其他数据处理器。在以下实施例中,以gpu为例进行说明。该数据处理装置包括多个计算模块,例如包括计算模块a1、计算模块a2和其他并行的计算模块。每个计算模块可以包括多个线程执行单元和该多个线程执行单元共用的共享内存,该多个线程执行单元可以并行执行。该共享内存的作用可以参见上述共享内存,计算模块的多个线程执行单元可以与共享内存通信,以使计算模块运行的工作组中的多个线程可以通过共享内存交换数据。例如,计算模块a1包括多个线程执行单元111和该多个线程执行单元111共用的共享内存112,计算模块a2包括多个线程执行单元121和该多个线程执行单元121共用的共享内存122。
51.例如,为了便于说明,本公开的一些实施例中以两个计算模块为例进行说明,例如,该多个计算模块包括第一计算模块和第二计算模块,该第一计算模块和第二计算模块可以是多个计算模块中的任意两个计算模块,以下以第一计算模块例如为图3所示的计算模块a1,第二计算模块例如为图3所示的计算模块a2为例进行说明。例如,第一计算模块和第二计算模块上可以各自运行一个或多个工作组,第一计算模块上例如运行有第一工作组,第二计算模块上例如运行有第二工作组。
52.例如,该多个计算模块的至少两个计算模块的共享内存之间建立有数据传输通道。例如,至少在第一计算模块的共享内存和第二计算模块的共享内存之间具有数据传输通道。如图3所示,计算模块a1的共享内存112与计算模块a2的共享内存122之间建立有数据传输通道c1。例如,该数据传输通道可以是通过直接存储器访问(direct memory access,dma)的方式进行数据交互。
53.图4示出了本公开至少一实施例提供的一种数据处理方法的流程图。
54.如图4所示,该方法可以包括步骤s210~s220。
55.步骤s210:获取第一计算模块运行的第一工作组和第二计算模块运行的第二工作组之间待交互的数据。
56.步骤s220:通过该第一计算模块的共享内存和该第二计算模块的共享内存之间建立的数据传输通道,直接传输该待交互的数据。例如,该待交互的数据可以通过该数据传输通道直接从第一计算模块的共享内存传输至该第二计算模块的共享内存,也可以通过该数据传输通道直接从第二计算模块的共享内存传输至该第一计算模块的共享内存。
57.例如,不同工作组之间需要进行数据交互。一种示例中,不同工作组可以共享一份数据,例如,第一工作组和第二工作组共享一份数据,这种情况下,第二工作组所在的计算模块可以先从其他内存(例如全局内存)读取该数据,然后可以将该数据共享至第一工作
组,这样,第一工作组无需再次从全局内存读取数据。因此,步骤s210中的待交互的数据可以为第一工作组和第二工作组的共享数据。另一种示例中,一些工作组之间需要进行数据同步,例如,第二工作组的计算结果需要同步至第一工作组,以使第一工作组基于第二工作组的计算结果进行下一步运算,因此,步骤s210中的待交互的数据可以为第一工作组和第二工作组之间需要同步的数据。
58.例如,对于运行在同一个计算模块中的不同工作组可以通过共享内存进行数据交互,而对于运行在不同计算模块上的工作组,在步骤s210中计算模块(例如第一计算模块和/或第二计算模块)可以获取待交互的数据,并将待交互的数据存储于计算模块的共享内存中(例如第一计算模块的共享内存112和/或第二计算模块的共享内存122),以为步骤s220做准备。例如,若计算模块a2上的第二工作组的数据需要同步至计算模块a1上的第一工作组,则计算模块a2可以获取第二工作组的数据并将其存储于计算模块a2的共享内存122中,以为数据传输做准备。若待交互的数据为共享数据,则计算模块a2可以先从其他内存(例如全局内存)读取共享数据并将共享数据存储于共享内存122中。若待交互的数据为同步数据,则计算模块a2可以通过线程执行单元计算得到第二工作组的计算结果并将计算结果存储于共享内存122中。
59.例如,如图3所示,第一计算模块还包括第一指令调度单元114,该第二计算模块还包括第二指令调度单元124。在需要将数据从第二计算模块传输至第一计算模块的情况下,步骤s220可以包括:该第一指令调度单元114向该第二指令调度单元124发送访问指令;该第二指令调度单元124基于该访问指令向该第二计算模块的共享内存122发送数据传输命令;该第二计算模块的共享内存122基于该数据传输命令,将与该访问指令相对应的数据通过该数据传输通道发送至该第一计算模块的共享内存112,其中,该待交互的数据包括与该访问指令相对应的数据。
60.例如,如图3所示,第一指令调度单元114和第二指令调度单元124之间可以建立有命令传输通道c2,在第一计算模块的共享内存112需要访问第二计算模块的共享内存122的情况下,该第一指令调度单元114可以通过命令传输通道c2,向该第二指令调度单元122发送该访问指令。访问指令可以包括访问命令、访问地址以及偏移地址等信息,访问地址只是首地址的情况下,还需要一个偏移地址,两部分组合起来形成实际要访问的地址。
61.例如,第二指令调度单元124接收第一指令调度单元114发送的访问指令后,可以生成数据传输命令并将数据传输命令发送至第二计算模块的共享内存122,数据传输命令可以包含访问地址等信息。第二计算模块的共享内存122响应于该数据传输命令,可以从相应地址将数据读取出来,然后通过共享内存之间的数据传输通道将读取的数据发给第一计算模块的共享内存112,第一计算模块将接收到的数据写入到共享内存112。
62.例如,响应于第一计算模块的共享内存112存储与该访问指令相对应的数据之后,该第一计算模块的共享内存112传输数据传递完毕信息至该第一指令调度单元114。例如,在一些实施例中,数据传递完毕信息还可以被传输至第二计算模块。
63.例如,当把数据写入计算模块a1的共享内存112之后,计算模块a1的共享内存112可以回传一个数据传递完毕的信息给到计算模块a1的第一指令调度单元114,表示当前这条访问指令执行完毕。
64.例如,访问指令是由指令调度单元发出的,在发射指令之后,指令调度单元还需要
获取指令执行完毕的消息,所以在共享内存接收并写入数据之后可以回传一个数据传递完毕的信息通知到指令调度单元,以使指令调度单元获知指令执行完毕的消息。发射指令的指令调度单元配置为接收数据传递完毕的消息,例如,若计算模块a1的指令调度单元发射访问指令,那么访问的数据传输完毕后,将指令执行完毕的信息回传给计算模块a1的指令调度单元。若是由计算模块a2的指令调度单元发射访问指令,那么访问的数据传输完毕后,将指令执行完毕的信息回传给计算模块a2的指令调度单元。
65.本公开实施例的数据处理方法,利用在不同的计算模块的共享内存之间增加的直接读取通路(即数据传输通道),实现了不同计算模块的工作组之间的直接数据传递,无需再从一级缓存、二级缓存甚至是全局内存绕行,减少了对全局内存的读取次数,也减少了对一级缓存、二级缓存的读取次数,缩短了数据读取路径,加快了数据读取速度,降低了全局内存读取路径上的带宽需求,并且提高了数据读取速度,进而提高了线程执行单元的运行效率。
66.图5示出了本公开至少一个实施例提供的另一种数据处理方法的流程图。
67.如图5所示,例如,在一些实施例中,数据处理方法还可以包括步骤s310~s330。
68.步骤s310:接收包括该第一工作组和该第二工作组的待分发工作组。
69.步骤s320:确定目标分发模式。
70.步骤s330:基于该目标分发模式,分发该待分发工作组。
71.例如,该步骤s310~s330可以在上述步骤s210~s220之前执行。例如可以先对包括第一工作组和第二工作组的待分发工作组进行分发,以将第一工作组和第二工作组分别分发至第一计算模块和第二计算模块,然后再对第一计算模块和第二计算模块执行上述的步骤s210~s220。步骤s310~s330例如可以由分发模块执行,该分发模块例如可以是图3所示的命令解析/工作组分发模块130。
72.例如,在一种编程协议中,共享内存可能仅允许在同一工作组内进行数据交互,上述的第一计算模块的共享内存和第二计算模块的共享内存之间进行的数据交互被认为是共享内存进行的数据交互,因此,也需要在同一个工作组内进行。一种解决方式是更改编程协议,将编程协议更改为共享内存允许不同工作组之间进行数据交互,这种方式增加了人力成本和时间成本。本公开实施例提供了一种解决方式:在不更改编程协议的情况下,若想实现上述步骤s210~步骤s220的方案,可以将需要分发至不同计算模块的第一工作组和第二工作组看作一个大的工作组(即待分发工作组),即将第一工作组和第二工作组视为一个大工作组包含的两个子工作组。并且,将第一计算模块和第二计算模块看作一个大的计算模块,即将第一计算模块和第二计算模块视为一个大计算模块包含的两个子计算模块。将第一计算模块的共享内存和第二计算模块的共享内存看作一个大的共享内存,即将第一计算模块的共享内存和第二计算模块的共享内存视为一个大共享内存包含的两个子共享内存。这样,在分别运行在第一计算模块和第二计算模块上的第一工作组和第二工作组之间需要进行数据交互时,由于第一工作组和第二工作组归属于一个统一的大工作组,所以可以在共享内存之间实现数据传输,能够满足上述编程协议,无需更改编程协议,可以节省时间和人力。
73.例如,在步骤s310中,可以由gpu中的命令解析/工作组分发模块30接收上述待分发工作组,命令解析/工作组分发模块30可以将该待分发工作组拆分为第一工作组(可视为
第一子工作组)和第二工作组(可视为第二子工作组),并分别下发至第一计算模块和第二计算模块,然后根据步骤s210~s220实现第一工作组和第二工作组之间的数据交互。
74.例如,在一些实施例中,除了上述情况之外,可能还存在其他场景或者其他待分发工作组,不同场景或者不同类型的待分发工作组可能对分发模式的需求不同。因此,除了这种将待分发工作组分发至两个计算模块的分发模式之外,还可以设置其他一种或多种分发模式,以满足不同场景或者不同待分发工作组的分发需求。
75.例如,可以设置至少两个分发模式,该至少两个分发模式包括第一分发模式和第二分发模式,在该第一分发模式下,将该待分发工作组分发至多个计算模块中的一个计算模块,在该第二分发模式下,将待分发工作组分发至多个计算模块中的n个计算模块,该n个计算模块中的至少部分计算模块的共享内存之间具有数据传输通道,以使该n个计算模块中的任意两个计算模块能够通过该数据传输通道进行交互,其中,n为大于1的整数。
76.例如,在第一分发模式下,一个待分发工作组仅允许下发至一个计算模块。在第二分发模式下,一个待分发工作组允许下发至两个或以上的计算模块。在一些实施例中,第二分发模式可以再具体分为多种分发模式,每种分发模式可以规定分发的计算模块的具体数量,例如,一种分发模式下,允许将一个待分发工作组下发至两个计算模块,另一种分发模式下,允许将一个待分发工作组下发至四个计算模块,等等。本公开实施例为了描述方便,利用第二分发模式来概括该多种分发模式。
77.例如,在步骤s320中,从该至少两个分发模式中确定一种分发模式作为目标分发模式。在步骤s330中,根据该目标分发模式,分发待分发工作组,例如,若目标分发模式为第一分发模式,则将待分发工作组下发至一个计算模块,若目标分发模式为第二分发模式,则将待分发工作组下发至n个计算模块。
78.例如,在一些实施例中,可以在该n个计算模块中的每两个计算模块之间建立数据传输通道,以使每两个计算模块的共享内存均可以直接进行数据交互。例如,n个计算模块包括相邻的计算模块a1~a4,计算模块a1和a2之间、a1和a3之间、a1和a4之间、a2和a3之间、a2和a4之间以及a3和a4之间均建立有数据传输通道。
79.例如,在另一些实施例中,可以在该n个计算模块中的部分计算模块之间建立有数据传输通道,只要保证每两个计算模块之间能够直接或间接地进行数据交互即可,间接是指通过中间的计算模块进行交互。例如,n个计算模块包括相邻的计算模块a1~a4,则可以在a1和a2之间、a2和a3之间和a3和a4之间建立数据传输通道即可,这样每两个计算模块均可以实现数据交互,例如,当需要在计算模块a1和计算模块a3之间进行数据交互时,则首先将数据从计算模块a1(或计算模块a3)通过a1和a2(或a3和a2)之间建立数据传输通道传输至计算模块a2,然后,将数据从计算模块a2通过a2和a3(或a1和a2)之间建立数据传输通道传输至计算模块a3(或计算模块a1)。
80.例如,数据处理装置还可以包括模式控制单元,模式控制单元可以实现为控制电路,模式控制单元可以集成在命令解析/工作组分发模块30中。该模式控制单元配置执行上述步骤s310~s330。
81.例如,在一些实施例中,可以根据待分发工作组自身的属性来选择分发模式。步骤s320可以包括:获取该待分发工作组的配置信息;从该至少两个分发模式中选取与该配置信息相匹配的分发模式,作为该目标分发模式。
82.例如,该配置信息可以包括该待分发工作组的线程数量和/或该待分发工作组的每个线程的处理数据量。
83.例如,在待分发工作组的线程数量不大于数量阈值和/或每个线程的处理数据量不大于数据量阈值的情况下,选择第一分发模式作为目标分发模式。在待分发工作组的线程数量大于数量阈值和/或每个线程的处理数据量大于数据量阈值的情况下,选择第二分发模式作为目标分发模式。
84.例如,在第二分发模式下,还可以根据待分发工作组的线程数量和/或该待分发工作组的每个线程的处理数据量,来确定分发的计算模块的数量。例如,根据包含的线程数量与数量阈值的比值和/或每个线程的处理数据量与数据量阈值的比值,来确定分发的计算模块的数量。
85.例如,数量阈值例如为1024,数据量阈值例如为矩阵的1个数据单元对应的数据量。矩阵的元素可以分为多个数据块,每个数据块可以理解为一个数据单元,例如,对于16*16的矩阵,可以将矩阵划分为16个4*4的数据块,则每个4*4的数据块可以理解为一个数据单元。例如,若某个待分发工作组的线程数量为2048,每个线程对矩阵的1个数据单元进行运算,由于待分发工作组的线程数量为数量阈值的2倍,因此选择第二分发模式,并且将待分发工作组下发至两个计算模块。若某个待分发工作组的线程数量为1024,每个线程对2个数据单元进行运算,由于待分发工作组中每个线程的处理数据量是数据量阈值的2倍,因此可以选择第二分发模式,并且将待分发工作组下发至两个计算模块。
86.例如,在另一些实施例中,步骤s320可以包括:从存储单元获取模式选定信息,其中,该模式选定信息表征用户选定的分发模式的类型;从至少两个分发模式中选取与该分发模式选定信息相匹配的分发模式,作为该目标分发模式。
87.例如,模式选定信息可以是人为设定的。数据处理装置还可以包括存储单元,存储单元例如可以实现为寄存器,以下称为模式寄存器,该存储单元可以集成在命令解析/工作组分发模块30中。该存储单元配置为存储上述模式选定信息。模式控制单元可以进一步配置为:从至少两个分发模式中选取与该模式选定信息相匹配的分发模式,作为目标分发模式。
88.例如,分发模式例如包括:
89.模式0:一个工作组只能分发到1个计算模块;
90.模式1:一个工作组分发到相邻的2个计算模块;
91.模式2:一个工作组分发到相邻的4个计算模块,依此类推。
92.例如,用户可以选定一种分发模式,若用户设定模式2,则可以将模式2的标识信息存储于模式寄存器中,在分发待分发工作组之前,可先从模式寄存器读取模式2的标识信息,确定目标分发模式为模式2,然后可以根据模式2来分发待分发工作组。
93.需要说明的是,模式0为第一分发模式,模式1和模式2均为第二分发模式。
94.例如,在另一些实施例中,用户可以为某个或某些待分发工作组配置分发模式,将设置的分发模式的信息包含在待分发工作组的配置信息中,也就是说,可以人为配置某个或某些工作组的分发模式。在分发该工作组之前,可以先读取工作组的配置信息,以确定对应的分发模式。
95.图6示出了本公开至少一个实施例提供的分发模式的示意图。
96.如图6所示,wg_dispatch_mode表示增加的模式寄存器,若wg_dispatch_mode存储的信息表示个一个工作组分发至四个计算模块,则可以将待分发工作组分为子工作组0~3,并分别分发至计算模块a0~a3。
97.例如,步骤s330可以包括:响应于该目标分发模式为该第二分发模式,将该待分发工作组切分为n个工作组;将该n个工作组分别分发至该n个计算模块。
98.例如,n个工作组包括第一工作组和第二工作组,n个计算模块包括第一计算模块和第二计算模块;将n个工作组分别分发至n个计算模块,包括:将第一工作组分发至所述第一计算模块;将第二工作组分发至第二计算模块。
99.例如,可以将待分发工作组平均分为n个工作组,“平均分”可以理解为平均分配线程数。例如,若待分发工作组包含2048个线程,若将该待分发工作组分为两个工作组,例如分为第一工作组和第二工作组,则该第一工作组包含的线程的数量和该第二工作组包含的线程的数量相同,均包含1024个线程。然后,可以将该第一工作组分发至第一计算模块,将该第二工作组分发至该第二计算模块。
100.例如,上述的将该n个工作组分别分发至该n个计算模块可以包括:将该多个计算模块分成包括n个计算模块的模块组;将该待分发工作组分发至一个该模块组包含的n个计算模块。
101.例如,在一些实施例中,可以将每相邻n个计算模块划分为一个模块组,例如,若gpu包括计算模块a1~a10共十个计算模块,若当前目标分发模式为将工作组分发至两个计算模块,则可以将每相邻两个计算模块划分为一个模块组,例如,a1和a2形成一个第一模块组,a3和a4形成一个第二模块组,等等。可以将待分发工作组分发至其中的一个模块组,例如分发至第一模块组,具体分发至第一模块组包含的计算模块a1和a2。
102.例如,在另一些实施例中,在当前空闲的多个计算模块中,按照计算模块的排列顺序,将每n个空闲的计算模块作为一个模块组。例如,若gpu包括计算模块a1~a10共十个计算模块,当前空闲的计算模块为计算模块a3、a4、a6和a8,则可以将计算模块a3和a4作为一个第一模块组,将计算模块a6和a8作为一个第二模块组,然后可以将待分发工作组分发至其中一个模块组,例如分发至第一模块组,具体分发至第一模块组包含的计算模块a3和a4。
103.例如,在将该n个工作组分别分发至该n个计算模块之前,可以先确定该n个计算模块是否满足该n个工作组的资源需求;在该n个计算模块满足该n个工作组的资源需求的情况下,将该n个工作组分别分发至该n个计算模块。
104.例如,每个计算模块还包括多个寄存器,针对每个计算模块,该多个寄存器与该共享内存和该多个线程执行单元进行交互。如图3所示,计算模块a1包括多个寄存器113,计算模块a2包括多个寄存器123,寄存器可以与线程执行单元一一对应。例如,确定该n个计算模块是否满足该n个工作组的资源需求,可以包括:确定该n个计算模块包含的寄存器数量是否满足该n个工作组的数量需求;和/或确定该n个计算模块包含的共享内存的容量是否满足该n个工作组的容量需求。
105.例如,确定该n个计算模块包含的寄存器数量是否满足该n个工作组的数量需求,包括:确定该n个计算模块包含的寄存器的总数量是否大于或等于该待分发工作组所需的寄存器数量;和/或,确定该n个计算模块中的每个计算模块包含的寄存器数量是否大于或等于该n个工作组中分发到该计算模块上的工作组所需的寄存器数量。
106.例如,确定该n个计算模块包含的共享内存的容量是否满足该n个工作组的容量需求,可以包括:确定该n个计算模块包含的n个共享内存的总容量是否大于或等于该待分发工作组所需的内存容量。
107.例如,将待分发工作组分发至第一计算模块和第二计算模块,若待分发工作组需要100个寄存器和16kb的内存资源,则需要第一计算模块和第二计算模块包含的总的寄存器的数量不小于100,且第一计算模块的共享内存的剩余存储容量和第二计算模块的共享内存的剩余存储容量之和不小于16kb。若将待分发工作组平均分为第一工作组和第二工作组,则第一工作组和第二工作组各自需要50个寄存器,需要第一计算模块和第二计算模块各自包含的寄存器的数量不小于50。由于第一计算模块的共享内存和第二计算模块的共享内存之间可以进行数据传输,所以第一计算模块的共享内存和第二计算模块的共享内存的总容量满足待分发工作组的容量需求即可。
108.为了使不同计算模块之间的共享内存能够互通,本公开实施例在不同计算模块之间建立有专门的共享内存数据通路和命令通路。根据本公开的实施例,可以将一个工作组分配到若干个计算模块上,并且在计算模块间增加共享内存直接读取通路(dma)的方式,实现了在计算模块间的直接数据传递,减少了对全局内存的读取次数,降低了全局内存读取路径上的带宽需求。
109.一级/二级缓存对于软件来说不能直接控制,而共享内存却是软件可以精准控制的。因为工作组内的线程对于软件程序来说是可见的,所以即使是这些线程执行在不同计算模块上,软件程序也可以将这些计算模块进行统一调度达到数据共享的目的。
110.一个大的工作组相当于若干个工作组,相比于原来分配到不同计算模块上的若干个工作组之间数据共享效率低下的情况,通过本公开实施例的数据处理方法,一个大的运行在多个计算模块上的工作组软件程序能够更加可控的实现精确的数据共享,对减少访存带宽的控制也更容易。
111.本公开实施例还提供了一种数据处理装置,可参考图3,该数据处理装置100包括多个计算模块,其中,该多个计算模块中的每个包括多个线程执行单元和该多个线程执行单元共用的共享内存。该多个计算模块包括第一计算模块和第二计算模块,该第一计算模块的共享内存和该第二计算模块的共享内存之间具有数据传输通道,该数据传输通道配置为直接传输该第一计算模块运行的第一工作组和该第二计算模块运行的第二工作组之间的待交互的数据。
112.例如,该数据处理装置还包括模式控制单元,模式控制单元配置为:接收包括所述第一工作组和所述第二工作组的待分发工作组;确定目标分发模式;基于该目标分发模式,分发该待分发工作组。
113.例如,该数据处理装置还包括存储单元,其中,该存储单元配置为存储模式选定信息,其中,该模式选定信息表征用户选定的模式的类型。该模式控制单元进一步配置为:从至少两个分发模式中选取与该模式选定信息相匹配的分发模式,作为该目标分发模式。
114.例如,该第一计算模块还包括第一指令调度单元,该第二计算模块还包括第二指令调度单元;该第一指令调度单元配置为向该第二指令调度单元发送访问指令;该第二指令调度单元配置为基于该访问指令向该第二计算模块的共享内存发送数据传输命令;该第二计算模块的共享内存基于该数据传输命令,将与该访问指令相对应的数据通过该数据传
输通道发送至该第一计算模块的共享内存,其中,该待交互的数据包括与该访问指令相对应的数据。
115.例如,该第一指令调度单元和该第二指令调度单元之间建立有命令传输通道,该第一指令调度单元配置为通过该命令传输通道向该第二指令调度单元发送该访问指令。
116.例如,该第一计算模块的共享内存配置为响应于存储与该访问指令相对应的数据,传输数据传递完毕信息至该第一指令调度单元。
117.例如,该数据处理装置100可以参见图3至图6以及上述关于数据处理装置的描述,在此不再赘述。
118.数据处理装置的各个组件可以通过总线系统和/或其它形式的连接机构(未示出)互连。例如,这些模块可以通过硬件(例如电路)模块、软件模块或二者的任意组合等实现,以下实施例与此相同,不再赘述。例如,可以通过中央处理单元(cpu)、图像处理器(gpu)、张量处理器(tpu)、现场可编程逻辑门阵列(fpga)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元以及相应计算机指令来实现这些单元。应当注意,图3所示的数据处理装置的组件和结构只是示例性的,而非限制性的,根据需要,数据处理装置也可以具有其他组件和结构。
119.例如,数据处理装置的各个组件可以为硬件、软件、固件以及它们的任意可行的组合。例如,可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。关于上述各个单元的具体实现形式,本公开的实施例对此不作限制。
120.例如,数据处理装置100的各个组件可以包括存储在存储器中的代码和程序;处理器可以执行该代码和程序以实现如上所述的数据处理装置的各个组件的一些功能或全部功能。例如,数据处理装置100的各个组件可以是专用硬件器件,用来实现如上所述的数据处理装置100的各个组件的一些或全部功能。例如,数据处理装置100的各个组件可以是一个电路板或多个电路板的组合,用于实现如上所述的功能。在本公开实施例中,该一个电路板或多个电路板的组合可以包括:(1)一个或多个处理器;(2)与处理器相连接的一个或多个非暂时的存储器;以及(3)处理器可执行的存储在存储器中的固件。
121.需要说明的是,本公开的实施例中,关于数据处理装置100的具体功能可以参考关于数据处理方法的相关描述,此处不再赘述。图3所示的数据处理装置100的组件和结构只是示例性的,而非限制性的,根据需要,该数据处理装置100还可以包括其他组件和结构。该数据处理装置100可以包括更多或更少的电路或单元,并且各个电路或单元之间的连接关系不受限制,可以根据实际需求而定。各个电路或单元的具体构成方式不受限制,可以根据电路原理由模拟器件构成,也可以由数字芯片构成,或者以其他适用的方式构成。
122.本公开的至少一个实施例还提供了一种电子设备,该电子设备包括处理器和存储器,存储器存储有一个或多个计算机程序模块。一个或多个计算机程序模块被配置为由处理器执行,用于实现上述的数据处理方法。
123.图7为本公开一些实施例提供的一种电子设备的示意框图。如图7所示,该电子设备400包括处理器410和存储器420。存储器420存储有非暂时性计算机可读指令(例如一个或多个计算机程序模块)。处理器410用于运行非暂时性计算机可读指令,非暂时性计算机可读指令被处理器410运行时执行上文所述的数据处理方法中的一个或多个步骤。存储器420和处理器410可以通过总线系统和/或其它形式的连接机构(未示出)互连。关于该数据
处理方法的各个步骤的具体实现以及相关解释内容可以参见上述数据处理方法的实施例,重复之处在此不作赘述。
124.应当注意,图7所示的电子设备400的组件只是示例性的,而非限制性的,根据实际应用需要,该电子设备400还可以具有其他组件。
125.例如,处理器410和存储器420之间可以直接或间接地互相通信。
126.例如,处理器410和存储器420可以通过网络进行通信。网络可以包括无线网络、有线网络、和/或无线网络和有线网络的任意组合。处理器410和存储器420之间也可以通过系统总线实现相互通信,本公开对此不作限制。
127.例如,处理器410和存储器420可以设置在服务器端(或云端)。
128.例如,处理器410可以控制电子设备400中的其它组件以执行期望的功能。例如,处理器410可以是中央处理单元(cpu)、图形处理单元(gpu)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元。例如,中央处理单元(cpu)可以为x86或arm架构等。处理器410可以为通用处理器或专用处理器,可以控制电子设备400中的其它组件以执行期望的功能。
129.例如,存储器420可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(rom)、硬盘、可擦除可编程只读存储器(eprom)、便携式紧致盘只读存储器(cd-rom)、usb存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块,处理器410可以运行一个或多个计算机程序模块,以实现电子设备400的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。
130.例如,在一些实施例中,电子设备400可以为服务器、手机、平板电脑、笔记本电脑、可穿戴电子设备等。
131.例如,电子设备400可以包括显示面板,显示面板可以为矩形面板、圆形面板、椭圆形面板或多边形面板等。另外,显示面板不仅可以为平面面板,也可以为曲面面板,甚至球面面板。
132.例如,电子设备400可以具备触控功能,即电子设备400可以为触控装置。
133.需要说明的是,本公开的实施例中,电子设备400的具体功能和技术效果可以参考上文中关于数据处理方法的描述,此处不再赘述。
134.图8为本公开一些实施例提供的另一种电子设备的示意框图。该电子设备500例如适于用来实施本公开实施例提供的数据处理方法。电子设备500可以是终端设备等。需要注意的是,图8示出的电子设备500仅仅是一个示例,其不会对本公开实施例的功能和使用范围带来任何限制。
135.如图8所示,电子设备500可以包括处理装置(例如中央处理器、图形处理器等)510,其可以根据存储在只读存储器(rom)520中的程序或者从存储装置580加载到随机访问存储器(ram)530中的程序而执行各种适当的动作和处理。在ram 530中,还存储有电子设备500操作所需的各种程序和数据。处理装置510、rom 520以及ram530通过总线540彼此相连。输入/输出(i/o)接口550也连接至总线540。
136.通常,以下装置可以连接至i/o接口550:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置560;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置570;包括例如磁带、硬盘等的存储装置580;以及通信装置590。通信装置590可以允许电子设备500与其他电子设备进行无线或有线通信以交换数据。虽然图8示出了具有各种装置的电子设备500,但应理解的是,并不要求实施或具备所有示出的装置,电子设备500可以替代地实施或具备更多或更少的装置。
137.例如,根据本公开的实施例,上述数据处理方法可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包括用于执行上述数据处理方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置590从网络上被下载和安装,或者从存储装置580安装,或者从rom 520安装。在该计算机程序被处理装置510执行时,可以实现本公开实施例提供的数据处理方法中限定的功能。
138.本公开的至少一个实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有非暂时性计算机可读指令,当非暂时性计算机可读指令由计算机执行时可以实现上述的数据处理方法。
139.图9为本公开一些实施例提供的一种存储介质的示意图。如图9所示,存储介质600存储有非暂时性计算机可读指令610。例如,当非暂时性计算机可读指令610由计算机执行时执行根据上文所述的数据处理方法中的一个或多个步骤。
140.例如,该存储介质600可以应用于上述电子设备400中。例如,存储介质600可以为图7所示的电子设备400中的存储器420。例如,关于存储介质600的相关说明可以参考图7所示的电子设备400中的存储器420的相应描述,此处不再赘述。
141.虽然图9示出了具有各种装置的计算机系统,但应理解的是,并不要求计算机系统具备所有示出的装置,可以替代地,计算机系统可以具备更多或更少的装置。
142.以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
143.此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
144.尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
145.对于本公开,还有以下几点需要说明:
146.(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通
常设计。
147.(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
148.以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1