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

内核函数传输方法、装置及设备

2022-05-18 04:47:08 来源:中国专利 TAG:


1.本技术实施例涉及计算机技术领域,尤其涉及一种内核函数传输方法、装置及设备。


背景技术:

2.电子设备上可以安装应用程序,并通过应用程序显示图像,以满足用户看视频、打游戏等需求。
3.电子设备中包括中央处理器和图像处理器。在应用程序显示图像时,电子设备中的中央处理器可以向图像处理器发送指令,以使图像处理器根据指令显示图像。然而,在上述过程中,中央处理器向图像处理器发送指令的发送时间通常大于图像处理器根据指令显示图像的执行时间,图像处理器需要等待中央处理器发送指令,存在闲置的时间,导致图像处理器的运行效率低。


技术实现要素:

4.本技术实施例提供一种内核函数传输方法、装置及设备,用以提高图像处理器的运行效率。
5.第一方面,本技术实施例提供一种内核函数传输方法,包括:
6.中央处理器根据待发送至图像处理器的多个内核函数确定融合内核函数;
7.所述中央处理器确定所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数;
8.所述中央处理器向所述图像处理器同步所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数,以使所述图像处理器根据所述依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数,对所述多个内核函数进行处理。
9.在一种可能的实施方式中,所述中央处理器向所述图像处理器同步所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数,包括:
10.所述中央处理器通过远程直接数据存取rdma的方式向所述图像处理器同步所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数。
11.在一种可能的实施方式中,所述中央处理器确定所述融合内核函数对应的发射参数,包括:
12.所述中央处理器对所述多个内核函数对应的线程块和线程网格进行统一化处理;
13.所述中央处理器对线程块中离散的线程束进行补齐处理。
14.在一种可能的实施方式中,中央处理器确定待发送至图像处理器的多个内核函
数,包括:
15.所述中央处理器确定多个待选内核函数;
16.所述中央处理器确定每个待选内核函数的运行时间和所述多个待选内核函数之间的依赖关系;
17.所述中央处理器根据每个待选内核函数的运行时间和所述多个待选内核函数之间的依赖关系,在所述多个待选内核函数中确定所述多个内核函数。
18.第二方面,本技术实施例提供一种内核函数传输方法,包括:
19.图像处理器从中央处理器获取多个内核函数之间的依赖关系、每个内核函数的函数参数、融合函数对应的发射参数和所述融合函数对应的处理线程数,所述融合内核函数为对所述多个内核函数进行融合后的函数;
20.所述图像处理器确定所述融合内核函数对应的多个线程标识;
21.所述图像处理器根据所述融合内核函数对应的多个线程标识和所述融合内核函数对应的处理线程数,确定每个处理线程对应的内核函数;
22.所述图像处理器根据多个内核函数之间的依赖关系、每个内核函数的函数参数、每个处理线程对应的内核函数和所述融合函数对应的发射参数,对所述多个内核函数进行处理。
23.在一种可能的实施方式中,所述图像处理器根据多个内核函数之间的依赖关系、每个内核函数的函数参数和每个处理线程对应的内核函数,对所述多个内核函数进行处理,包括:
24.所述图像处理器根据所述多个内核函数之间的依赖关系,确定所述多个内核函数的执行顺序;
25.所述图像处理器根据每个内核函数的函数参数,按照所述执行顺序,对所述多个内核函数进行处理。
26.在一种可能的实施方式中,针对任意一个处理线程;所述图像处理器根据所述处理线程对应的内核函数的函数参数,对所述内核函数进行处理,包括:
27.所述图像处理器根据所述内核函数的函数参数,调用所述处理线程,以实现通过所述处理线程执行所述内核函数。
28.在一种可能的实施方式中,所述图像处理器根据所述内核函数的函数参数,调用所述处理线程,以实现通过所述处理线程执行所述内核函数之后,还包括:
29.将处理线程的标识添加至所述内核函数对应的完成数组中,以指示所述处理线程执行完成。
30.在一种可能的实施方式中,所述图像处理器从中央处理器获取多个内核函数之间的依赖关系、每个内核函数的函数参数和融合函数对应的处理线程数,包括:
31.所述图像处理器通过远程直接数据存取rdma的方式从所述中央处理器获取所述多个内核函数之间的依赖关系、每个内核函数的函数参数和融合函数对应的处理线程数。
32.第三方面,本技术实施例提供一种内核函数的传输装置,包括:第一确定模块、第二确定模块和同步模块,其中,
33.所述第一确定模块用于,根据待发送至图像处理器的多个内核函数确定融合内核函数;
34.所述第二确定模块用于,确定所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数;
35.所述同步模块用于,向所述图像处理器同步所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数,以使所述图像处理器根据所述依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数,对所述多个内核函数进行处理。
36.在一种可能的实施方式中,所述同步模块具体用于:
37.通过远程直接数据存取rdma的方式向所述图像处理器同步所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数。
38.在一种可能的实施方式中,所述第二确定模块具体用于:
39.对所述多个内核函数对应的线程块和线程网格进行统一化处理;
40.对线程块中离散的线程束进行补齐处理。
41.在一种可能的实施方式中,所述第一确定模块具体用于:
42.确定多个待选内核函数;
43.确定每个待选内核函数的运行时间和所述多个待选内核函数之间的依赖关系;
44.根据每个待选内核函数的运行时间和所述多个待选内核函数之间的依赖关系,在所述多个待选内核函数中确定所述多个内核函数。
45.第四方面,本技术实施例提供一种内核函数的传输装置,包括:获取模块、第一确定模块、第二确定模块和处理模块,其中,
46.所述获取模块用于,从中央处理器获取多个内核函数之间的依赖关系、每个内核函数的函数参数、融合函数对应的发射参数和所述融合函数对应的处理线程数,所述融合内核函数为对所述多个内核函数进行融合后的函数;
47.所述第一确定模块用于,确定所述融合内核函数对应的多个线程标识;
48.所述第二确定模块用于,根据所述融合内核函数对应的多个线程标识和所述融合内核函数对应的处理线程数,确定每个处理线程对应的内核函数;
49.所述处理模块用于,根据多个内核函数之间的依赖关系、每个内核函数的函数参数、每个处理线程对应的内核函数和所述融合函数对应的发射参数,对所述多个内核函数进行处理。
50.在一种可能的实施方式中,所述处理模块具体用于:
51.根据所述多个内核函数之间的依赖关系,确定所述多个内核函数的执行顺序;
52.根据每个内核函数的函数参数,按照所述执行顺序,对所述多个内核函数进行处理。
53.在一种可能的实施方式中,所述处理模块具体用于:
54.根据所述内核函数的函数参数,调用所述处理线程,以实现通过所述处理线程执行所述内核函数。
55.在一种可能的实施方式中,所述处理模块具体用于:
56.将处理线程的标识添加至所述内核函数对应的完成数组中,以指示所述处理线程
执行完成。
57.在一种可能的实施方式中,所述获取模块具体用于:
58.通过远程直接数据存取rdma的方式从所述中央处理器获取所述多个内核函数之间的依赖关系、每个内核函数的函数参数和融合函数对应的处理线程数。
59.第五方面,本技术实施例提供一种电子设备,包括:中央处理器和内核处理器;
60.所述中央处理器用于执行权利要求第一方面任一项所述的方法;
61.所述内核处理器用于执行权利要求第二方面任一项所述的方法。
62.第六方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当所述计算机执行指令被处理器执行时用于实现第一方面任一项所述的内核函数的传输方法。
63.第七方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当所述计算机执行指令被处理器执行时用于实现第二方面任一项所述的内核函数的传输方法。
64.第八方面,本技术实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面任一项所示的内核函数的传输方法。
65.第九方面,本技术实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第二方面任一项所示的内核函数的传输方法。
66.在本技术实施例中,中央处理器可以根据运行时间、依赖关系识别出可以进行融合的多个内核函数,并对多个内核函数中包括的线程块和线程网格进行统一化处理,对线程块中包括的线程进行补齐处理。中央处理器可以将处理过的多个内核函数进行融合,得到融合内核函数,并向图像处理器同步多个内核函数之间的依赖关系、每个内核函数的函数参数、融合内核函数对应的发射参数和融合内核函数对应的处理线程数。图像处理器可以根据处理线程的标识自动识别出融合之前的多个内核函数,并根据多个内核函数之间的依赖关系、每个内核函数的函数参数调用处理线程,执行多个内核函数。由于图像处理器可以自识别出融合之前的多个内核函数,并对多个内核函数依次进行处理,降低了图像处理器的闲置时间,从而可以提高图像处理器的运行效率。
附图说明
67.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
68.图1为相关技术中的中央处理器的发送时间和图像处理器的执行时间的示意图;
69.图2为本技术实施例提供的的一种内核函数的传输方法的流程示图;
70.图3为本技术实施例提供的内核函数、线程网格、线程块、线程束和线程的关系示意图;
71.图4为本技术实施例提供的一种内核函数之间的依赖关系的示意图;
72.图5为本技术实施例提供的一种内核函数的传输原理示意图;
73.图6为本技术实施例提供的另一种内核函数的传输方法的流程示意图;
74.图7为本技术实施例提供的一种内核函数的传输装置的结构示意图;
75.图8为本技术实施例提供的另一种内核函数的传输装置的结构示意图;
76.图9为本技术实施例提供一种电子设备的结构示意图。
具体实施方式
77.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
78.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
79.本技术实施例提供一种内核函数的传输方法、装置及设备,用以提高电子设备中图像处理器的运行效率。
80.电子设备中可以安装应用程序,并通过应用程序显示图像。当应用程序显示图像时,电子设备的中央处理器(central processing unit,cpu)可以向图像处理器(graphics processing unit,gpu)发送内核函数,以使图像处理器可以根据内核函数显示图像。
81.为了便于理解本技术的技术方案,首先结合图1对中央处理器的发射时间与图像处理器的执行时间进行说明。
82.图1为相关技术中的中央处理器的发送时间和图像处理器的执行时间的示意图。请参见图1,中央处理器第1次发送内核函数从t0时刻开始,直至t1时刻完成发送,第1次发送时长为t
1-t0。当图像处理器在t1时刻接收到中央处理器第1次发送的内核函数时,图像处理器从t1时刻开始根据内核函数显示图像,直至t2时刻完成显示,第1次执行时长为t
2-t1。中央处理器第2次发送内核函数从t1时刻开始,直至t3时刻完成发送,第2次发送时长为t
3-t1。当图像处理器在t3时刻接收到中央处理器第2次发送的内核函数之后,图像处理器从t3时刻开始根据内核函数显示图像,直至t4时刻完成显示,第2次执行时长为t
4-t3。
83.在上述过程中,当图像处理器在t2时刻完成第1次执行时,需从t2时刻等待δt时长,直至t3时刻接收到中央处理器发送的第2次内核函数,再开始执行第2次内核函数,则δt=t
3-t2,δt为图像处理器的闲置时长。由于中央处理器的发送时长大于图像处理器的执行时长,图像处理器存在闲置时长,导致图像处理器的运行效率不高。
84.基于上述分析,发明人创造性的提出了如下技术构思,对内核函数进行自识别和融合,减少多次发送内核函数的启动开销,提高图像处理器的运行效率。
85.在本技术实施例中,中央处理器可以根据运行时间、依赖关系识别出可以进行融合的多个内核函数,并对多个内核函数中包括的线程块和线程网格进行统一化处理,对线程块中包括的线程进行补齐处理。中央处理器可以将处理过的多个内核函数进行融合,得
到融合内核函数,并向图像处理器同步多个内核函数之间的依赖关系、每个内核函数的函数参数、融合内核函数对应的发射参数和融合内核函数对应的处理线程数。图像处理器可以根据处理线程的标识自动识别出融合之前的多个内核函数,并根据多个内核函数之间的依赖关系、每个内核函数的函数参数调用处理线程,执行多个内核函数。由于图像处理器可以自识别出融合之前的多个内核函数,并对多个内核函数依次进行处理,降低了图像处理器的闲置时间,从而可以提高图像处理器的运行效率。
86.下面,对通过具体实施例对本技术所示的内核函数的传输方法进行详细说明。需要说明的是,下面几个实施例可以单独存在,也可以相互结合,对于相同或相似的内容,在不同的实施例中不再重复说明。
87.图2为本技术实施例提供的的一种内核函数的传输方法的流程示图。请参见图2,该方法可以包括:
88.s201、根据待发送至图像处理器的多个内核函数确定融合内核函数。
89.中央处理器是电子设备的核心配件,可以用于读取指令并执行指令。
90.图像处理器又称显示芯片,是在电子设备上做图像和图形相关运算工作的微处理器。
91.内核函数(kernel)是图像处理器显示图像时调用的函数。内核函数可以是图像处理器执行的一段代码,是中央处理器向图像处理器发送的最小单元函数。一个内核函数可以包括大量的并发线程。
92.在计算机编程中,为了方便程序员设计软件,软件架构可以由线程网格(grid)、线程块(block)、线程束(warp)和线程(thread)组成,其中,
93.线程是操作系统能够进行运算调度的最小单位。一条线程指的是进程中一个单一顺序的控制流,每条线程可以并行执行不同的任务。一个内核函数可以包含大量并行的线程,内核函数中的线程数等于线程块数量和每个线程块中线程数的乘积。
94.线程束是将线程块中的线程按组划分得到的一组线程,每组包括32个线程。每个线程束中的所有线程执行相同的命令。
95.线程块是由若干个线程组成的块。该组线程驻留在相同的图像处理器核心中,并共享该核心的内存资源。对于一个确定的内核函数,包含的各个线程块的维度相同。线程块的维度可以为一维、二维或者三维。例如,线程块的维度可以为一维[256],代表该线程块中包括256个线程。
[0096]
线程网格是由所有的线程块组成的网格。线程网格的维度可以为一维、二维或三维。例如,线程网格的维度可以为一维[4],代表该线程网格中包括4个线程块。线程网格的维度也可以为二维[2*2],代表该线程网格中包括2*2=4个线程块。
[0097]
下面,结合图3,对内核函数、线程网格、线程块、线程束和线程的关系进行说明。
[0098]
图3为本技术实施例提供的内核函数、线程网格、线程块、线程束和线程的关系示意图。请参见图3,一个内核函数可以对应一个线程网格,一个线程网格可以包括若a个线程块,一个线程块可以包括b个线程,则该内核函数中包括的线程为a*b个,其中32个线程可以组成一个线程束。
[0099]
可以通过如下方式确定待发送至图像处理器的多个内核函数,包括:中央处理器确定多个待选内核函数;中央处理器确定每个待选内核函数的运行时间和多个待选内核函
数之间的依赖关系;中央处理器根据每个待选内核函数的运行时间和多个待选内核函数之间的依赖关系,在多个待选内核函数中确定多个内核函数。
[0100]
当电子设备中的应用程序显示图像时,中央处理器可以识别出应用程序中包括的内核函数。例如,若中央处理器识别出应用程序中包括5个待选的内核函数,可以分别标记kernel 0、kernel 1、kernel 2、kernel 3、kernel 4。中央处理器可以分析每个待选内核函数的运行时间和多个待选内核函数之间的依赖关系。若分析得出,其中kernel 0、kernel 1和kernel 2的运行时间分别为1毫秒,且kernel 2依赖于kernel 0和kernel 1,则可以将kernel 0、kernel 1和kernel 2作为一组待融合的内核函数,可以根据kernel 0、kernel 1和kernel 2确定融合内核函数。
[0101]
可选的,可以将运行时间、依赖关系等作为预设规则,用于确定待融合的内核函数。预设规则还可以定义为:
[0102]
(1)待融合的一组内核函数均为运行时间较短的内核函数。运行时间可以通过技术人员的领域知识或者通过技术人员离线测试获得;
[0103]
(2)任一个内核函数中不能包含超过块粒度大小的线程同步,例如grid_group同步。
[0104]
若一个内核函数对应n个线程,可以将每个线程的线程标识可以记为tid0、tid1、......、tid n-1。例如,若根据kernel 0、kernel 1和kernel 2确定融合内核函数,中央处理器可以分析得到kernel 0、kernel 1和kernel 2的函数参数、线程网格维度和线程块维度,如表1所示:
[0105]
表1
[0106]
内核函数函数参数线程网格维度线程块维度kernel 0(arg00,arg01)[2*2][256]kernel 1(arg10)[4][319]kernel 2(arg20,arg21)[8]256.[0107]
则kernel 0中包括2*2*256=1024个线程,kernel 1中包括4*319=1276个线程,kernel 2中包括8*256=2048个线程。其中,每个线程都有对应的线程标识,可以标记为tid。例如,kernel 0中包括1024个线程,则在kernel 0中线程的线程标识可以分别为tid0、tid1、......、tid1023,其中,tid0代表kernel 0中的第1个线程。
[0108]
s202、确定多个内核函数之间的依赖关系、每个内核函数的函数参数、融合内核函数对应的发射参数和融合内核函数对应的处理线程数。
[0109]
依赖关系是指多个内核函数之间的联系。例如,内核函数之间的执行顺序等。
[0110]
下面,结合图4,对kernel 0、kernel 1和kernel 2之间的依赖关系进行说明。
[0111]
图4为本技术实施例提供的一种内核函数之间的依赖关系的示意图。请参见图4,kernel 0和kernel 1没有依赖的内核函数,且kernel 0和kernel 1相互独立。kernel 2依赖于kernel 0和kernel 1,则说明只有当kernel 0和kernel 1执行完之后,才能执行kernel 2。
[0112]
可选的,中央处理器可以通过邻接表的形式记录多个内核函数之间的依赖关系。具体的,可以使用一个包含i个地址的数组dependency,第i个地址可以记录第i个内核函数的依赖关系,可以包括对应的依赖函数个数和每个依赖函数的标识。第i个地址可以表示为
《依赖个数di,依赖kernel i0,...,依赖kernel i
di-1
》。其中,依赖个数di代表第i个kernel依赖的kernel个数,依赖kernel i0代表第i个kernel依赖的kernel 0,依赖kernel i
di
代表第i个kernel依赖的kernel d
i-1

[0113]
例如,若kernel 0与1没有依赖,kernel 2依赖于kernel 0和kernel 1,则kernel 0、kernel和kernel 2的依赖关系可以用一个包含3个地址的dependency数组表示。其中,kernel 0与1的地址分别为第1个地址、第2个地址,在dependency数组中对应的位置记录为null。kernel 2的地址为第3个地址,则可以表示为《2,0,1》,代表kernel 2依赖的函数有2个,分别为kernel 0和kernel 1,如表2所示:
[0114]
表2
[0115]
地址序号地址内容第1个地址null第2个地址null第3个地址《2,0,1》
[0116]
可选的,可以将多个内核函数的函数参数存储为参数数组args-arrays,函数参数数组args-arrays可以通过一个包含n个地址的数组表示,其中第n个地址可以代表第n个内核函数的函数参数,可以包括第n个kernel的所有函数参数,可以表示为(arg n0,arg nx),其中所有函数参数连续摆放。
[0117]
例如,若kernel 0、kernel 1和kernel 2为一组待融合的内核函数,则可以将kernel 0、kernel 1和kernel 2的函数参数存储为一个包含3个地址的参数数组args-arrays。其中第1个地址可以代表kernel 0的所有函数参数,即(arg00,arg01);第2个地址可以代表kernel 1的所有函数参数,即(arg10);第3个地址可以代表kernel 2的所有函数参数,即(arg20,arg21)。该参数数组args-arrays可以如表3所示:
[0118]
表3
[0119]
地址序号地址内容第1个地址(arg00,arg01)第2个地址(arg10)第3个地址(arg20,arg21)
[0120]
可以通过如下方式确定融合内核函数对应的发射参数,包括:中央处理器对多个内核函数对应的线程块和线程网格进行统一化处理;中央处理器对线程块中离散的线程束进行补齐处理。
[0121]
统一化处理包括:线程块和线程网格在维度上的统一、线程块包括的线程数统一。
[0122]
(1)统一多个内核函数对应的线程块的维度和线程网格的维度,可以将多个内核函数对应的线程块的维度和线程网格的维度从二维、三维转化为一维。例如,kernel 0中线程块的维度为二维[2*2],则可以转化为一维[4]。
[0123]
(2)统一线程块中的线程数。如果各个内核函数中的线程块包括的线程数不一致,则统一为其中最大者,并使用空线程补齐空余。例如,若kernel 0中的线程块包括256个线程,kernel 1中的线程块包括319线程,kernel 2中的线程块包括256个线程,则取最大的线程数为319,分别向kernel 0、kernel 2的线程块中再补充63个空线程,使kernel 0、kernel 2的线程块分别包括319个线程。
[0124]
若线程不能被划分为完整的线程束,则需要中央处理器对多个内核函数对应的线程束进行补齐处理,使得融合内核函数的每个线程束经过的条件分支相同。一个线程束包括32个线程,可以将每个内核函数的线程数向上补齐为线程束的整数倍。例如,kernel 1中线程块包括319线程,由于319不能被32整除,则需将线程数向上补齐为320个线程。其中,任意连续的32个线程都只会得到同一个函数的下标,该32个线程有着同样的二分搜索条件分支路径,因此不会发生分支离散的情况。
[0125]
通过上述统一化处理和补齐处理,则可以得到处理后的kernel 0、kernel 1和kernel 2的的函数参数、线程网格维度和线程块维度,如表4所示:
[0126]
表4
[0127]
内核函数函数参数线程网格维度线程块维度kernel 0(arg00,arg01)[4][320]kernel 1(arg10)[4][320]kernel 2(arg20,arg21)[8][320]
[0128]
则中央处理器可以将处理过后多个内核函数的线程块维度和线程网格维度确定为融合内核函数对应的发射参数。
[0129]
对多个内核函数进行统一化处理和补齐处理后,可以根据多个内核函数对应的处理线程数,确定融合内核函数的处理线程数。融合后的内核函数对应的处理线程数包含融合之前的内核函数的处理线程数之和。
[0130]
例如,融合内核函数包括经过统一化处理和补齐处理后的kernel 0、kernel 1和kernel 2。经处理过的kernel 0、kernel 1分别包括4个线程块,每个线程块包括320个处理线程,则kernel 0、kernel 1的处理线程数均为4*320=1280;kernel 2包括8个线程块,分别包括320个处理线程,则kernel 2的处理线程数为8*320=2560。则融合内核函数可以包括16个线程块,每个线程块包括320个线程,则融合内核函数对应的处理线程数为kernel 0、kernel 1和kernel 2对应的处理线程数之和,即为1280 1280 2560=5120。融合内核函数中处理线程的标识可以表示为(tid0,tid1,......,tid5119)。
[0131]
前缀和是一个数组的某项元素之前(包括此项元素)的所有数组元素的和。前缀和算法可以用于快速的查询某个区间。
[0132]
可选的,通过前缀和数组cdf记录融合内核函数对应的处理线程数。前缀和数组cdf可以表示为其中,k1表示第0个内核函数的线程数,k2表示第1个内核函数的线程数,ki表示第i-1个内核函数的线程数,k的下标可以记为φ。
[0133]
例如,若融合内核函数对应的处理线程数为1280 1280 2560=5120,则可以通过处理线程数的前缀和数组cdf记录为:
[0134]
cdf=[0,1280,1280 1280,1280 1280 2560]=[0,1280,2560,5120]
[0135]
s203、同步多个内核函数之间的依赖关系、每个内核函数的函数参数、融合内核函数对应的发射参数和融合内核函数对应的处理线程数。
[0136]
可选的,中央处理器可以通过远程直接数据存取rdma的方式向图像处理器同步多个内核函数之间的依赖关系、每个内核函数的函数参数和融合内核函数对应的处理线程
数。
[0137]
gpu direct远程直接数据存取(remote direct memory access,rdma)技术是一种将图像处理器内存暴露给其他设备的技术。例如,计算机的网卡可以绕过中央处理器和内存直接访问图像处理器内存。
[0138]
当中央处理器可以将多个内核函数之间的依赖关系存储为dependency数组,可以将每个内核函数的函数参数存储为args-arrays参数数组,并且可以通过前缀和数组cdf记录融合内核函数的处理线程数。可以将得到dependency数组、args-arrays数组和前缀和数组cdf通过接口总线(peripheral component interface extend,pcie),利用gpu direct rdma技术传输至图像处理器的全局内存中。其中,全局内存是图像处理器芯片的片外内存,读取延迟较长。
[0139]
中央处理器可以向图像处理器发送的融合内核函数对应的发射参数和融合内核函数对应的处理线程数。发射参数包括融合内核函数的线程网格维度和线程块维度。
[0140]
相应的,图像处理器可以利用远程直接数据存取技术,即gpu direct rdma技术直接从中央处理器中获取dependency数组、args-arrays参数数组和cdf数组的数据,从而可以获取多个内核函数之间的依赖关系、每个内核函数的函数参数和融合函数对应的处理线程数。
[0141]
s204、确定融合内核函数对应的多个线程标识。
[0142]
融合内核函数中包括的每个处理线程可以确定自身对应的线程标识。
[0143]
例如,若融合内核函数中处理线程数为5120,则融合内核函数中的处理线程可以确定自身的线程标识,可以表示分别tid0,tid1,......,tid5119。
[0144]
s205、根据融合内核函数对应的多个线程标识和融合内核函数对应的处理线程数,确定每个处理线程对应的内核函数。
[0145]
可以通过如下方式确定每个处理线程对应的内核函数:图像处理器可以根据线程标识tid,使各个线程在前缀和数组cdf中使用图像处理器定制化的二分搜索,并发地找到最后一个小于等于tid的元素,该元素的下标为φ;图像处理器可以确定各个线程对应融合之前的内核函数的某个线程。若线程标识为tid的线程原本服务于第φ个kernel,则确定该线程是原第φ个kernel中的第(tid-cdf[φ])号线程。该kernel的函数参数可以从args-arrays参数数组中获得。
[0146]
例如,若线程标识为tid=2000。图像处理器可以根据tid=2000在前缀和数组cdf=[0,1280,2560,5120]中通过二分查找的方式找到最后一个小于等于tid的元素为1280,元素1280的下标为φ=1,则可以自动识别出tid=2000的线程对应的原内核函数为kernel 1,该线程作为kernel 1中的第2000-1280=720号线程。图像处理器可以在args-arrays参数数组中获得kernel 1的函数参数为(arg10)。
[0147]
s206、根据多个内核函数之间的依赖关系、每个内核函数的函数参数和每个处理线程对应的内核函数,对多个内核函数进行处理。
[0148]
当图像处理器根据线程标识在前缀和数组cdf中确定融合之前的多个内核函数之后,图像处理器可以在args-array参数数组中获得每个内核函数的函数参数,可以在dependency数组中获得多个内核函数之间的依赖关系。
[0149]
图像处理器根据多个内核函数之间的依赖关系、每个内核函数的函数参数和每个
处理线程对应的内核函数,对多个内核函数进行处理,包括图像处理器根据多个内核函数之间的依赖关系,确定多个内核函数的执行顺序;图像处理器根据每个内核函数的函数参数,按照执行顺序,对多个内核函数进行处理。
[0150]
例如,若图像处理器确定kernel 0、kernel 1和kernel 2之间的依赖关系为:kernel 2依赖于kernel 0和kernel 1。则可以确定该3个内核函数的执行顺序为:先执行kernel 0和kernel 1,再执行kernel 2。图像处理器可以根据kernel 0的函数参数(arg00,arg01)、kernel 1的函数参数(arg10)和kernel 2的函数参数(arg20,arg21),按照执行顺序,对kernel 0、kernel 1和kernel 2进行处理。
[0151]
当图像处理器根据内核函数的函数参数调用处理线程时,每个线程块中的前n个线程负责从图像处理器的全局内存中读取args-arrays参数数组、cdf前缀和数组至本线程块的共享内存,后续访问则直接从图像处理器的共享内存中读取。共享内存是图像处理器芯片的片上内存,读取延迟低。
[0152]
图像处理器根据内核函数的函数参数,调用处理线程,以实现通过处理线程执行内核函数。例如,图像处理器可以根据kernel 1的函数参数(arg10),调用kernel 1对应的1280个线程,以执行kernel 1。
[0153]
图像处理器根据内核函数的函数参数,调用处理线程,执行内核函数之后,还包括将处理线程的标识添加至内核函数对应的完成数组中,以指示处理线程执行完成。
[0154]
图像处理器可以在共享内存中维护一个长度为n个整数的数组finished,用以记录对应于第i个kernel中已经执行完毕的线程数,初始化为全0。finished数组可以如表5所示:
[0155]
表5
[0156]
0000
[0157]
当每一个线程块执行完成后,可以在finished数组的对应位置加上该线程块中包括的线程数。具体的,每一个线程块在图像处理器的共享内存中设置一个初始化为0的计数器,线程块中的每个线程束运行结束时,将该计数器自动增加32。当一整个线程块运行结束后,该计数器的值使用fetch_and_add函数原子地加到finished数组对应位置上。
[0158]
如果某kernel i依赖于《依赖个数di,依赖kernel i0,...,依赖kernel i
di-1
》,则在任务开始时,kernel i首先使用前di个线程对finished数组进行轮询,直到finished数组满足:
[0159][0160]
例如,若kernel 2依赖于kernel 0和kernel 1,则在kernel 2任务开始时,kernel 2首先使用前2个线程轮询finished数组,直到finished数组满足:
[0161][0162]
此时代表kernel 0和kernel 1均已执行完成,接下来可以正常执行kernel 2。
[0163]
在处理完多个内核函数的依赖关系后,融合函数的每个线程从自识别的结果中对
应到在原kernel中的线程,再调用该kernel的函数参数,正常执行kernel的任务。
[0164]
在本技术实施例中,中央处理器可以根据运行时间、依赖关系识别出可以进行融合的多个内核函数,并对多个内核函数中包括的线程块和线程网格进行统一化处理,对线程块中包括的线程进行补齐处理。中央处理器可以将处理过的多个内核函数进行融合,得到融合内核函数,并向图像处理器同步多个内核函数之间的依赖关系、每个内核函数的函数参数、融合内核函数对应的发射参数和融合内核函数对应的处理线程数。图像处理器可以根据处理线程的标识自动识别出融合之前的多个内核函数,并根据多个内核函数之间的依赖关系、每个内核函数的函数参数调用处理线程,执行多个内核函数。由于图像处理器可以自识别出融合之前的多个内核函数,并对多个内核函数依次进行处理,降低了图像处理器的闲置时间,从而可以提高图像处理器的运行效率。
[0165]
下面,结合图5对本技术实施例提供的内核函数的传输原理进行说明。
[0166]
图5为本技术实施例提供的一种内核函数的传输原理示意图。请参见图5,以kernel 0、kernel 1和kernel 2为例说明。
[0167]
若kernel 0、kernel 1和kernel 2为融合内核函数的原内核函数。在融合之前,kernel 0中的线程块为二维[2*2],每个线程块包括256个线程,函数参数为(arg00,arg01)。kernel 1中的线程块为一维[4],每个线程块包括319线程,函数参数为(arg10)。kernel 2中的线程块为一维[8],每个线程块包括256个线程,函数参数为(arg20,arg21)。中央处理器可以对kernel 0、kernel 1和kernel 2中的线程块和线程数进行统一化处理和补齐处理,使得每个线程块均为一维,且每个线程块均包括320个线程。经过融合处理,kernel 0、kernel 1和kernel 2可以融合为kernel,则kernel可以包括16个线程块,每个线程块包括320个线程,kernel中包括5120个线程,对应的函数参数包括(arg00,arg01)、(arg10)和(arg20,arg21)。kernel的处理线程数可以通过前缀和数组记录为cdf=[0,1280,2560,5120]。若kernel中某个线程的线程标识为tid=2000,则根据kernel的第2000号线程确定融合之前的原内核函数。
[0168]
图像处理器可以根据tid=2000在前缀和数组cdf=[0,1280,2560,5120]中通过二分查找的方式找到最后一个小于等于tid的元素为1280,元素1280的下标为φ=1,则可以自动识别出tid=2000的线程对应的原内核函数为kernel 1,该线程作为kernel 1中的第2000-1280=720号线程。图像处理器可以在args-arrays参数数组中获得kernel 1的函数参数为(arg10),进而图像处理器可以根据该函数参数调用处理线程,执行kernel 1的任务。
[0169]
在本技术实施例中,中央处理器可以对多个内核函数进行识别、处理并融合,得到融合内核函数的相关数据,并向图像处理器同步融合内核函数的相关数据。图像处理器可以根据融合内核函数的线程标识,自动识别出融合之前的多个内核函数,并根据函数参数、依赖关系等调用处理线程,对多个内核函数进行处理,降低了图像处理器的闲置时间,从而可以提高图像处理器的运行效率。
[0170]
在图2所示实施例的基础上,下面,结合图6,对上述内核函数的传输方法进行进一步详细说明。
[0171]
图6为本技术实施例提供的另一种内核函数的传输方法的流程示意图,请参见图6,该方法可以包括:
[0172]
s601、根据待发送至图像处理器的多个内核函数确定融合内核函数。
[0173]
中央处理器可以根据内核函数的运行时间、依赖关系等预设规则确定待融合的多个内核函数。例如,中央处理器可以识别出应用程序中的5个待选的内核函数,其中3个内核函数的运行时间相近、具备依赖关系,且其中任意一个内核函数不包含超过块粒度大小的线程同步,则可以将该3个内核函数确定为一组待融合的内核函数,根据该3个内核函数可以确定融合函数。
[0174]
内核函数的运行时间可以通过技术人员的领域知识或者通过技术人员离线测试获得。
[0175]
具体过程可以参见s201,此处不再赘述。
[0176]
s602、确定多个内核函数之间的依赖关系、每个内核函数的函数参数。
[0177]
中央处理器可以分析得出多个内核函数之间的依赖关系,并可以通过dependency数组记录多个内核函数之间的依赖关系。中央处理器可以分析得到每个内核函数的函数参数,并通过args-arrays参数数组存储每个内核函数的函数参数。
[0178]
s603、确定融合函数对应的发射参数。
[0179]
中央处理器可以对多个内核函数的线程块维度和线程网格维度进行统一化处理和补齐处理,根据处理过后的多个内核函数的线程块维度和线程网格维度确定融合内核函数的发射参数。发射参数包括线程块维度和线程网格维度。
[0180]
s604、根据融合内核函数的处理线程数计算线程数的前缀和数组。
[0181]
中央处理器还可以通过线程数的前缀和数组cdf,记录融合内核函数对应的处理线程数。前缀和数组cdf可以表示为线程数。前缀和数组cdf可以表示为其中,k1表示第0个内核函数的线程数,k2表示第1个内核函数的线程数,ki表示第i-1个内核函数的线程数。
[0182]
s605、同步多个内核函数之间的依赖关系、每个内核函数的函数参数、融合内核函数对应的发射参数和融合内核函数的处理线程数的前缀和数组。
[0183]
中央处理器可以通过pcie总线,利用gpu direct rdma技术,将dependency数组、args-arrays数组和前缀和数组cdf传输至图像处理器的全局内存,便于图像处理器根据dependency数组、args-arrays数组和前缀和数组cdf,获取多个内核函数之间的依赖关系、每个内核函数的函数参数和融合内核函数对应的处理线程数。
[0184]
在图像处理器获取数据时,中央处理器可以直接向暴露出的图像处理器内存做拷贝,减少了拷贝操作的延迟。在实际工作中,可以使用基于gpu direct rdma技术的快速gpu内存复制库,通过内存映射存储引擎(memory mapped storage engine,mmap)接口创建图像处理器内存的用户空间映射,并在此映射中再自行划分各个数组的空间。该映射通过内存映射输入/输出(memory-mapped input/out,mmio)由中央处理器正常读写。对于小数据的拷贝,有着比图像处理器直接存储器访问(direct memory access,dma)引擎拷贝更低的延迟。
[0185]
s606、确定融合内核函数对应的多个线程标识。
[0186]
融合内核函数中包括的每个处理线程可以确定自身对应的线程标识。
[0187]
例如,若融合内核函数中处理线程数为5120,则融合内核函数中的处理线程可以确定自身的线程标识可以表示分别tid0,tid1,......,tid5119。
[0188]
s607、根据融合内核函数对应的多个线程标识和融合内核函数对应的处理线程数,确定每个处理线程对应的内核函数。
[0189]
图像处理器可以根据线程标识在前缀和数组cdf中,使用图像处理器定制化的二分搜索,并发地找到最后一个小于等于tid的元素的下标φ,从而确定该线程对应融合之前的内核函数的某个线程。
[0190]
当图像处理器根据融合内核函数对应的多个线程标识确定每个处理线程对应的内核函数时,每个线程块中的前n个线程负责从图像处理器的全局内存中读取前缀和数组cdf至本线程块的共享内存,后续访问则直接从图像处理器的共享内存中读取。共享内存是图像处理器芯片的片上内存,读取延迟低。
[0191]
具体过程可以参见s205,此处不再赘述。
[0192]
s608、根据多个内核函数之间的依赖关系,确定多个内核函数的执行顺序。
[0193]
图像处理器可以根据dependency数组获取多个内核函数的依赖关系。例如,若kernel 0、kernel 1和kernel 2之间的依赖关系为:kernel 2依赖于kernel 0和kernel 1。则图像处理器可以根据dependency数组确定该3个内核函数的执行顺序为:先执行kernel 0和kernel 1,再执行kernel 2。
[0194]
s609、根据内核函数的函数参数,对多个内核函数进行处理。
[0195]
当确定内核函数的执行顺序之后,图像处理器可以获取内核函数的函数参数,调用处理流程,对多个内核函数进行处理。
[0196]
若确定融合之前的内核函数分别为kernel 0、kernel 1和kernel 2,则图像处理器可以在args-array参数数组中,获得kernel 0的函数参数为(arg00,arg01)、kernel 1的函数参数为(arg10)和kernel 2的函数参数为(arg20,arg21),按照执行顺序,调用处理线程,对kernel 0、kernel 1和kernel 2进行处理。如对kernel 1进行处理,则图像处理器可以根据kernel 1的函数参数(arg10),调用kernel 1对应的1280个线程,以执行kernel 1。
[0197]
当图像处理器根据内核函数的函数参数调用处理线程时,每个线程块中的前n个线程负责从图像处理器的全局内存中读取args-arrays参数数组至本线程块的共享内存,后续访问则直接从图像处理器的共享内存中读取。
[0198]
s610、将处理线程的标识添加至内核函数对应的完成数组中,以指示处理线程执行完成。
[0199]
图像处理器可以在共享内存中维护一个长度为n个整数的数组finished,用以记录对应于第i个kernel中已经执行完毕的线程数,初始化为全0。
[0200]
当内核函数中每一个线程块执行完成后,可以在finished数组的对应位置加上该线程块中包括的线程数。具体的,每一个线程块在图像处理器的共享内存中设置一个初始化为0的计数器,线程块中的每个线程束运行结束时,将该计数器自动增加32。当一整个线程块运行结束后,该计数器的值使用fetch_and_add函数原子地加到finished数组对应位置上,直至该内核函数中的所有处理线程执行完成,则代表该内核函数执行完成,可以执行下一个内核函数。
[0201]
例如,例如,若kernel 2依赖于kernel 0和kernel 1,则在kernel 2任务开始时,kernel 2首先使用前2个线程轮询finished数组,直到finished数组满足:
[0202][0203]
此时代表kernel 0和kernel 1均已执行完成,接下来可以正常执行kernel 2。
[0204]
在本技术实施例中,中央处理器可以根据运行时间、依赖关系识别出可以进行融合的多个内核函数,并对多个内核函数中包括的线程块和线程网格进行统一化处理,对线程块中包括的线程进行补齐处理。中央处理器可以将处理过的多个内核函数进行融合,得到融合内核函数,并向图像处理器同步多个内核函数之间的依赖关系、每个内核函数的函数参数、融合内核函数对应的发射参数和融合内核函数对应的处理线程数。图像处理器可以根据处理线程的标识自动识别出融合之前的多个内核函数,并根据多个内核函数之间的依赖关系、每个内核函数的函数参数调用处理线程,执行多个内核函数。由于图像处理器可以自识别出融合之前的多个内核函数,并对多个内核函数依次进行处理,降低了图像处理器的闲置时间,从而可以提高图像处理器的运行效率。
[0205]
图7为本技术实施例提供的一种内核函数的传输装置的结构示意图。请参见图7,该内核函数的传输装置10可以包括:包括:第一确定模块11、第二确定模块12和同步模块13,其中,
[0206]
所述第一确定模块11用于,根据待发送至图像处理器的多个内核函数确定融合内核函数;
[0207]
所述第二确定模块12用于,确定所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数;
[0208]
所述同步模块13用于,向所述图像处理器同步所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数,以使所述图像处理器根据所述依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数,对所述多个内核函数进行处理。
[0209]
需要说明的是,本技术实施例提供的装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0210]
在一种可能的实施方式中,所述同步模块13具体用于:
[0211]
通过远程直接数据存取rdma的方式向所述图像处理器同步所述多个内核函数之间的依赖关系、每个内核函数的函数参数、所述融合内核函数对应的发射参数和所述融合内核函数对应的处理线程数。
[0212]
在一种可能的实施方式中,所述第二确定模块12具体用于:
[0213]
对所述多个内核函数对应的线程块和线程网格进行统一化处理;
[0214]
对线程块中离散的线程束进行补齐处理。
[0215]
在一种可能的实施方式中,所述第一确定模块11具体用于:
[0216]
确定多个待选内核函数;
[0217]
确定每个待选内核函数的运行时间和所述多个待选内核函数之间的依赖关系;
[0218]
根据每个待选内核函数的运行时间和所述多个待选内核函数之间的依赖关系,在所述多个待选内核函数中确定所述多个内核函数。
[0219]
需要说明的是,本技术实施例提供的装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0220]
图8为本技术实施例提供的另一种内核函数的传输装置的结构示意图。请参见图8,该内核函数的传输装置20可以包括:获取模块21、第一确定模块22、第二确定模块23和处理模块24,其中,
[0221]
所述获取模块21用于,从中央处理器获取多个内核函数之间的依赖关系、每个内核函数的函数参数、融合函数对应的发射参数和所述融合函数对应的处理线程数,所述融合内核函数为对所述多个内核函数进行融合后的函数;
[0222]
所述第一确定模块22用于,确定所述融合内核函数对应的多个线程标识;
[0223]
所述第二确定模块23用于,根据所述融合内核函数对应的多个线程标识和所述融合内核函数对应的处理线程数,确定每个处理线程对应的内核函数;
[0224]
所述处理模块24用于,根据多个内核函数之间的依赖关系、每个内核函数的函数参数、每个处理线程对应的内核函数和所述融合函数对应的发射参数,对所述多个内核函数进行处理。
[0225]
需要说明的是,本技术实施例提供的装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0226]
在一种可能的实施方式中,所述处理模块24具体用于:
[0227]
根据所述多个内核函数之间的依赖关系,确定所述多个内核函数的执行顺序;
[0228]
根据每个内核函数的函数参数,按照所述执行顺序,对所述多个内核函数进行处理。
[0229]
在一种可能的实施方式中,所述处理模块24具体用于:
[0230]
根据所述内核函数的函数参数,调用所述处理线程,以实现通过所述处理线程执行所述内核函数。
[0231]
在一种可能的实施方式中,所述处理模块24具体用于:
[0232]
将处理线程的标识添加至所述内核函数对应的完成数组中,以指示所述处理线程执行完成。
[0233]
在一种可能的实施方式中,所述获取模块21具体用于:
[0234]
通过远程直接数据存取rdma的方式从所述中央处理器获取所述多个内核函数之间的依赖关系、每个内核函数的函数参数和融合函数对应的处理线程数。
[0235]
需要说明的是,本技术实施例提供的装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0236]
本技术实施例提供一种电子设备的结构示意图,请参见图9,该电子设备30可以包括中央处理器31和内核处理器32。示例性地,中央处理器31、内核处理器32,各部分之间通过总线33相互连接。
[0237]
所述中央处理器31用于执行如上述方法实施例所示的内核函数的传输方法;
[0238]
所述内核处理器32用于执行如上述方法实施例所示的内核函数的传输方法。
[0239]
实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一可读取存储器中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储器(存储介质)包括:只读存储器(英文:read-only memory,缩写:
rom)、ram、快闪存储器、硬盘、固态硬盘、磁带(英文:magnetic tape)、软盘(英文:floppy disk)、光盘(英文:optical disc)及其任意组合。
[0240]
本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当所述计算机执行指令被处理器执行时用于实现上述方法实施例所述的内核函数的传输方法。
[0241]
本技术实施例还可提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,可实现上述方法实施例所示的内核函数的传输方法。
[0242]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0243]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0244]
显然,本领域的技术人员可以对本技术实施例进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术实施例的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
[0245]
在本技术中,术语“包括”及其变形可以指非限制性的包括;术语“或”及其变形可以指“和/或”。本技术中术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。本技术中,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
再多了解一些

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

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

相关文献