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

CUDA多线程处理方法、系统及相关设备与流程

2022-02-22 18:02:21 来源:中国专利 TAG:

cuda多线程处理方法、系统及相关设备
技术领域
1.本技术涉及计算机技术领域,尤其涉及一种cuda多线程处理方法、系统及相关设备。


背景技术:

2.cuda(compute unified device architecture,统一计算设备架构)是显卡厂商英伟达(nvidia)推出的运算平台,其采用c语言作为编程语言提供大量的高性能计算指令开发能力。cuda中的计算离不开核函数(kernel)和线程(thread),一个核函数对应一个线程网格(grid),一个线程网格包含若干个线程块(thread block),一个线程块包含若干个线程。核函数执行线程之前,通常需要生成线程的索引,在采用低复杂度硬件的情况下,需要大量时钟周期才能生成一个线程块中的所有索引,生成索引的时延越大,会导致核函数的执行时延变大,从而会影响cuda中并行处理的效率。


技术实现要素:

3.针对上述问题,本技术提供了一种cuda多线程处理方法、系统及相关设备,有利于提升cuda中并行处理的效率。
4.为实现上述目的,本技术实施例第一方面提供了一种cuda多线程处理方法,应用于索引生成器,该方法包括:
5.获取核函数对应的配置信息;
6.在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;
7.根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中;
8.在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;
9.根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中。
10.结合第一方面,在一种可能的实施方式中,配置信息包括线程块的维度信息和预先设定的迭代步长的三维索引,根据配置信息生成线程的三维索引,包括:
11.根据线程块的维度信息得到线程块中任意一个线程的三维索引;
12.采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引。
13.结合第一方面,在一种可能的实施方式中,采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引,包括:
14.采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三
维索引进行迭代,生成线程块中第一目标线程的三维索引,第一目标线程与任意一个线程之间的间隔满足迭代步长;
15.采用线程块的维度信息、迭代步长和迭代步长的三维索引,对第一目标线程的三维索引进行迭代,生成线程块中第二目标线程的三维索引,第二目标线程与第一目标线程之间的间隔满足迭代步长;
16.重复执行采用线程块的维度信息、迭代步长和迭代步长的三维索引,对线程块中的目标线程的三维索引进行迭代,生成与目标线程之间的间隔满足迭代步长的线程的三维索引的操作,得到线程块中的线程的三维索引,目标线程为线程块中已生成三维索引的线程。
17.结合第一方面,在一种可能的实施方式中,线程块的维度信息包括线程块在x方向的维度信息和y方向的维度信息,第一目标线程的三维索引包括第一目标线程在x方向的索引、y方向的索引和z方向的索引,采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,生成线程块中第一目标线程的三维索引,包括:
18.采用线程块在x方向的维度信息、y方向的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在x方向的索引;
19.采用线程块在x方向的维度信息、y方向的维度信息和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在y方向的索引和第一目标线程在z方向的索引。
20.结合第一方面,在一种可能的实施方式中,配置信息包括生成的三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,根据配置信息对生成的三维索引进行压缩打包,包括:
21.按照在x方向最高位为1的位置对生成的三维索引中x维度的索引进行压缩打包;
22.按照在y方向最高位为1的位置对生成的三维索引中y方向的维度信息进行压缩打包;以及,
23.按照在z方向最高位为1的位置对生成的三维索引中z维度的索引进行压缩打包。
24.结合第一方面,在一种可能的实施方式中,核函数为调用频繁的核函数,配置信息包括核函数的专用存储器地址,将压缩打包后的三维索引存储在存储器中,包括:
25.将压缩打包后的三维索引存储在核函数的专用存储器地址中。
26.结合第一方面,在一种可能的实施方式中,核函数为调用不频繁的核函数,配置信息包括共用存储器地址,将压缩打包后的三维索引存储在存储器中,包括:
27.将压缩打包后的三维索引存储在共用存储器地址中。
28.结合第一方面,在一种可能的实施方式中,根据配置信息生成线程的三维索引,包括:
29.根据配置信息,在每个时钟周期生成预设数量个线程的三维索引。
30.本技术实施例第二方面提供了一种索引生成器,该索引生成器包括配置过滤器、与配置过滤器耦合的迭代器和与迭代器耦合的格式打包模块;其中,
31.配置过滤器,配置为获取核函数对应的配置信息;
32.迭代器,配置为在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;
33.格式打包模块,配置为根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中;
34.配置过滤器,还配置为在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;
35.格式打包模块,还配置为根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中。
36.结合第二方面,在一种可能的实施方式中,配置信息包括线程块的维度信息和预先设定的迭代步长的三维索引,迭代器,具体配置为:
37.根据线程块的维度信息得到线程块中任意一个线程的三维索引;
38.采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引。
39.结合第二方面,在一种可能的实施方式中,迭代器,具体配置为:
40.采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,生成线程块中第一目标线程的三维索引,第一目标线程与任意一个线程之间的间隔满足迭代步长;
41.采用线程块的维度信息、迭代步长和迭代步长的三维索引,对第一目标线程的三维索引进行迭代,生成线程块中第二目标线程的三维索引,第二目标线程与第一目标线程之间的间隔满足迭代步长;
42.重复执行采用线程块的维度信息、迭代步长和迭代步长的三维索引,对线程块中的目标线程的三维索引进行迭代,生成与目标线程之间的间隔满足迭代步长的线程的三维索引的操作,得到线程块中的线程的三维索引,目标线程为线程块中已生成三维索引的线程。
43.结合第二方面,在一种可能的实施方式中,线程块的维度信息包括线程块在x方向的维度信息和y方向的维度信息,第一目标线程的三维索引包括第一目标线程在x方向的索引、y方向的索引和z方向的索引,迭代器,具体配置为:
44.采用线程块在x方向的维度信息、y方向的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在x方向的索引;
45.采用线程块在x方向的维度信息、y方向的维度信息和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在y方向的索引和第一目标线程在z方向的索引。
46.结合第二方面,在一种可能的实施方式中,配置信息包括生成的三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,格式打包模块,具体配置为:
47.按照在x方向最高位为1的位置对生成的三维索引中x维度的索引进行压缩打包;
48.按照在y方向最高位为1的位置对生成的三维索引中y方向的维度信息进行压缩打包;以及,
49.按照在z方向最高位为1的位置对生成的三维索引中z维度的索引进行压缩打包。
50.结合第二方面,在一种可能的实施方式中,核函数为调用频繁的核函数,配置信息包括核函数的专用存储器地址,格式打包模块,具体配置为:
51.将压缩打包后的三维索引存储在核函数的专用存储器地址中。
52.结合第二方面,在一种可能的实施方式中,核函数为调用不频繁的核函数,配置信息包括共用存储器地址,格式打包模块,具体配置为:
53.将压缩打包后的三维索引存储在共用存储器地址中。
54.结合第二方面,在一种可能的实施方式中,迭代器,具体配置为:
55.根据配置信息,在每个时钟周期生成预设数量个线程的三维索引。
56.本技术实施例第三方面提供了一种cuda多线程处理系统,该系统包括索引生成器、存储器和图形处理器(gpu),gpu包括调度器和gpu计算核心;
57.索引生成器,配置为获取核函数对应的配置信息;在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中;在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中;
58.存储器,配置为存储索引生成器压缩打包后的三维索引,或压缩打包后的历史三维索引;
59.调度器,配置为将压缩打包后的三维索引或压缩打包后的历史三维索引,以及核函数的指令,调度给gpu计算核心;
60.gpu计算核心,配置为从存储器中读取压缩打包后的三维索引或压缩打包后的历史三维索引,并进行解压缩操作,执行指令和解压缩后得到的三维索引或解压缩后得到的历史三维索引。
61.结合第三方面,在一种可能的实施方式中,配置信息包括线程块的维度信息和预先设定的迭代步长的三维索引,索引生成器,具体配置为:
62.根据线程块的维度信息得到线程块中任意一个线程的三维索引;
63.采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引。
64.结合第三方面,在一种可能的实施方式中,索引生成器,具体配置为:
65.采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,生成线程块中第一目标线程的三维索引,第一目标线程与任意一个线程之间的间隔满足迭代步长;
66.采用线程块的维度信息、迭代步长和迭代步长的三维索引,对第一目标线程的三维索引进行迭代,生成线程块中第二目标线程的三维索引,第二目标线程与第一目标线程之间的间隔满足迭代步长;
67.重复执行采用线程块的维度信息、迭代步长和迭代步长的三维索引,对线程块中的目标线程的三维索引进行迭代,生成与目标线程之间的间隔满足迭代步长的线程的三维索引的操作,得到线程块中的线程的三维索引,目标线程为线程块中已生成三维索引的线程。
68.结合第三方面,在一种可能的实施方式中,线程块的维度信息包括线程块在x方向的维度信息和y方向的维度信息,第一目标线程的三维索引包括第一目标线程在x方向的索
引、y方向的索引和z方向的索引,索引生成器,具体配置为:
69.采用线程块在x方向的维度信息、y方向的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在x方向的索引;
70.采用线程块在x方向的维度信息、y方向的维度信息和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在y方向的索引和第一目标线程在z方向的索引。
71.结合第三方面,在一种可能的实施方式中,配置信息包括生成的三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,索引生成器,具体配置为:
72.按照在x方向最高位为1的位置对生成的三维索引中x维度的索引进行压缩打包;
73.按照在y方向最高位为1的位置对生成的三维索引中y方向的维度信息进行压缩打包;以及,
74.按照在z方向最高位为1的位置对生成的三维索引中z维度的索引进行压缩打包。
75.结合第三方面,在一种可能的实施方式中,核函数为调用频繁的核函数,配置信息包括核函数的专用存储器地址,索引生成器,具体配置为:
76.将压缩打包后的三维索引存储在核函数的专用存储器地址中。
77.结合第三方面,在一种可能的实施方式中,核函数为调用不频繁的核函数,配置信息包括共用存储器地址,索引生成器,具体配置为:
78.将压缩打包后的三维索引存储在共用存储器地址中。
79.结合第三方面,在一种可能的实施方式中,索引生成器,具体配置为:
80.根据配置信息,在每个时钟周期生成预设数量个线程的三维索引。
81.结合第三方面,在一种可能的实施方式中,调度器的工作模式为增量模式,增量模式包括线程的三维索引的调度在时间维度是递增的及指令的调度在gpu计算核心维度是递增的。
82.结合第三方面,在一种可能的实施方式中,gpu计算核心,具体配置为:
83.采用在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,对压缩打包后的三维索引或压缩打包后的历史三维索引进行解压缩操作。
84.本技术实施例第四方面提供了一种电子设备,该电子设备包括输入设备和输出设备,进一步包括处理器,适于实现一条或多条指令;以及,计算机可读存储介质,所述计算机可读存储介质存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行如上述第一方面所述方法中的步骤。
85.本技术实施例第五方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一条或多条指令,所述一条或多条指令适于由处理器加载并执行如上述第一方面所述方法中的步骤。
86.本技术实施例第六方面提供了一种计算机程序产品,其中,该计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,该计算机程序可操作来使计算机执行如上述第一方面中的步骤。
87.本技术的上述方案至少包括以下有益效果:
88.本技术实施例中,通过获取核函数对应的配置信息;在历史配置信息中不存在与
配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中;在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中。这样通过索引生成器以较低的时延生成线程的三维索引,有利于减少复杂算法生成三维索引所带来的时间开销,使索引的生成速度与核函数的执行速度保持协调,从而有利于避免核函数(或gpu计算核心)需要等待索引生成的情况,提升了核函数的执行效率,进而有利于提升cuda中并行处理的效率。另外,当历史配置信息中存在与核函数的配置信息相匹配的目标历史配置信息,则索引生成器无需生成新的三维索引,可直接复用历史三维索引,节省了生成新的三维索引所带来的时间开销,从而有利于降低核函数的执行时延,进而有利于提升cuda中并行处理的效率。同时,索引生成器无需执行复杂的算法便能以较低的时延生成新的三维索引,降低了硬件复杂度,有利于节省硬件成本。
附图说明
89.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
90.图1为本技术实施例提供的一种线程网格和线程块的示意图;
91.图2为本技术实施例提供的一种线程块和线程块中线程的示意图;
92.图3为本技术实施例提供的一种cuda多线程处理方法的流程示意图;
93.图4为本技术实施例提供的另一种cuda多线程处理方法的流程示意图;
94.图5为本技术实施例提供的一种压缩打包后的三维索引的格式示意图;
95.图6为本技术实施例提供的一种核函数和对应存储器地址的示意图;
96.图7为本技术实施例提供的一种索引生成器的结构示意图;
97.图8为本技术实施例提供的一种cuda多线程处理系统的结构示意图;
98.图9为本技术实施例提供的一种增量调度的示意图;
99.图10为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
100.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
101.本技术说明书、权利要求书和附图中出现的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地进一步包括没有列出的步骤或单元,或可选地进一步包括对于这些过程、方法、产品或设备固有的其它步骤或单元。此外,术语“第
一”、“第二”和“第三”等是用于区别不同的对象,而并非用于描述特定的顺序。
102.在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本技术所描述的实施例可以与其它实施例相结合。
103.以下结合附图对本技术相关技术进行说明。cuda语言是一种通用并行计算编程语言,通过编写核函数来描述单个线程的行为,一个核函数对应一个线程网格,一个线程网格由多个线程块构成,一个线程块又由多个线程构成。其中,线程网格和线程块的关系可如图1所示,(g
x
,gy,gz)表示线程网格在x,y,z三个方向的维度信息,(d
x
,dy,dz)表示线程块在x,y,z三个方向的维度信息。其中,线程块和线程的关系可如图2所示,图2中的黑色方块即表示线程块中的一个线程,(x,y,z)表示线程块中的线程在x,y,z三个方向的索引。在核函数执行之前,通常需要提前生成线程的三维索引,并将其写入寄存器中,以供gpu调用和执行。
104.应理解,线程块中第n个线程的三维索引(xn,yn,zn)与线程块的维度信息(d
x
,dy,dz)存在如下关系:
105.n=xn y
ndx
z
ndxdy
ꢀꢀ
(1)
106.对公式(1)进行变换可得:
107.xn=n%d
x
ꢀꢀ
(2)
[0108][0109][0110]
其中,“%”为取模运算,可见,通过公式(2)、公式(3)和公式(4)计算三维索引(xn,yn,zn)需要2次除法和2次取模运算,而除法和取模运算在硬件层面的实现相对复杂,由此就会造成生成索引的时延较高,最终影响到核函数的执行效率和cuda中并行处理的效率。
[0111]
基于此,本技术实施例提供一种cuda多线程处理方法,以解决现有cuda多线程并行处理中生成线程的三维索引的时延较高的问题,以低复杂度的硬件架构、低时延生成三维索引,提升核函数的执行效率,从而提升硬件(比如芯片)的处理效率。具体而言,本技术利用核函数的配置信息对已知的三维索引(xn,yn,zn)进行迭代,以生成新的三维索引,通过迭代法将原来的除法和取模运算替换为简单的比较(compare)和加/减法计算,在降低算法复杂度的同时,还有利于降低硬件的复杂度。
[0112]
请参见图3,图3为本技术实施例提供的一种cuda多线程处理方法的流程示意图,该cuda多线程处理方法可应用于索引生成器,如图3所示,包括步骤301-303:
[0113]
301:获取核函数对应的配置信息。
[0114]
本技术实施例中,可将每个核函数的配置信息下发给索引生成器,该配置信息可包括存储器地址、线程块的维度信息和预先设定的迭代步长的三维索引。进一步的,该配置信息还可包括生成的三维索引的压缩格式信息,该压缩格式信息用于对该三维索引进行压缩打包。具体的,压缩格式信息可以是该三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,其中,在x方向最高位为1的位置用于指示生成的三维索引中x方向的索引所占的位数,在y方向最高位为1的位置用于指示生成的三维索引中y方向的索引所占的位数,在z方向最高位为1的位置用于指示生成的三维索引中z方向的
索引所占的位数。
[0115]
302:根据配置信息执行预设迭代算法,生成线程块中线程的三维索引。
[0116]
本技术实施例中,在从配置队列中获取到核函数对应的配置信息后,将该配置信息与历史缓存中的历史配置信息进行匹配,若历史配置信息中不存在与该配置信息相匹配的目标历史配置信息,则执行迭代算法,基于该配置信息生成线程的三维索引,并将该配置信息放入历史缓存中。比如:获取到的配置信息可以为(存储器地址address,线程块在x方向的维度信息d
x
,线程块在y方向的维度信息dy,线程块在z方向的维度信息dz,迭代步长在x方向的索引xc,迭代步长在y方向的索引yc,迭代步长在z方向的索引zc),由于迭代步长的三维索引(xc,yc,zc)是根据线程块的维度信息(d
x
,dy,dz)和迭代步长c计算出来的,在与历史配置信息进行匹配时,只需对比(address,d
x
,dy,dz)四个参数即可。
[0117]
本技术实施例中,根据线程块中线程的三维索引与线程块的维度信息(d
x
,dy,dz)之间的关系,即公式(1),对于线程块中任意一个线程的三维索引,均能通过对公式(1)进行变换得到。比如:对于线程块中的第1个线程,根据公式(2)、公式(3)和公式(4)可以得到第1个线程的三维索引
[0118]
x1=1%d
x

[0119][0120][0121]
假设该任意一个线程为第n个线程,第m个线程与第n个线程之间的间隔满足迭代步长c,则存在如下关系:
[0122]
c=m-n
ꢀꢀ
(5)
[0123]
其中,迭代步长c为一固定常量,在已知第n个线程的三维索引的情况下,采用线程块的维度信息(d
x
,dy,dz)、迭代步长c的三维索引(xc,yc,zc)和迭代步长c,可对第n个线程的三维索引进行迭代,生成第m个线程的三维索引。比如:通过对第1个线程的三维索引进行迭代可生成第1 c个线程的三维索引,通过对第2个线程的三维索引进行迭代可生成第2 c个线程的三维索引,通过对第m个线程的三维索引进行迭代可生成第m c个线程的三维索引。这样通过对已知线程的三维索引进行迭代,便能生成线程块中所有线程的三维索引。
[0124]
303:根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中。
[0125]
本技术实施例中,由于配置信息中包括生成的三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,则可以按照x,y,z每个方向最高为1的位置对生成的三维索引中对应方向的索引进行压缩打包,得到压缩打包后的三维索引。
[0126]
应理解,线程的三维索引通常是存储在寄存器中,但是对于多数核函数而言,三维索引是用来计算线程输入和输出数据的偏移的,使用并不频繁。相较于昂贵的寄存器资源,本技术将压缩打包后的三维索引存储在存储器中,这样并不会影响并行计算的性能,且有利于节省寄存器资源开销。
[0127]
可以看出,本技术实施例通过获取核函数对应的配置信息;根据配置信息执行预设迭代算法,生成线程块中线程的三维索引;根据配置信息对生成的三维索引进行压缩打
包,并将压缩打包后的三维索引存储在存储器中。这样采用更为简单的迭代算法生成线程的三维索引,有利于降低三维索引的生成时延,从而提升了核函数的执行效率,进而有利于提升cuda中并行处理的效率。
[0128]
请参见图4,图4为本技术实施例提供的另一种cuda多线程处理方法的流程示意图,该cuda多线程处理方法可应用于索引生成器,如图4所示,包括步骤401-405:
[0129]
401:获取核函数对应的配置信息;
[0130]
本技术实施例中,该配置信息可包括存储器地址、线程块的维度信息和预先设定的迭代步长的三维索引。进一步的,该配置信息还可包括生成的三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置。
[0131]
402:在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;
[0132]
本技术实施例中,示例性的,根据配置信息生成线程的三维索引,包括:
[0133]
根据线程块的维度信息得到线程块中任意一个线程的三维索引。具体的,通过对公式(1)进行变换,即可得到线程块中任意一个线程的三维索引。
[0134]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引。
[0135]
示例性的,采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引,包括:
[0136]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,生成线程块中第一目标线程的三维索引,第一目标线程与任意一个线程之间的间隔满足迭代步长;
[0137]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对第一目标线程的三维索引进行迭代,生成线程块中第二目标线程的三维索引,第二目标线程与第一目标线程之间的间隔满足迭代步长;
[0138]
重复执行采用线程块的维度信息、迭代步长和迭代步长的三维索引,对线程块中的目标线程的三维索引进行迭代,生成与目标线程之间的间隔满足迭代步长的线程的三维索引的操作,得到线程块中的线程的三维索引,目标线程为线程块中已生成三维索引的线程。
[0139]
具体的,假设任意一个线程为第n个线程,第一目标线程为第m个线程,在已知第n个线程的三维索引(xn,yn,zn)的情况下,采用线程块在x方向的维度信息d
x
、y方向的维度信息dy、迭代步长c和迭代步长的三维索引(xc,yc,zc),对第n个线程的三维索引(xn,yn,zn)进行迭代,得到第m个线程在x方向的索引xm。根据公式(1)、公式(2)和公式(5)有:
[0140]
xm=m%d
x
[0141]
=(n c)%d
x
[0142]
=(xn y
ndx
z
ndxdy
xc ycd
x
zcd
xdy
)%d
x
[0143]
=(xn xc)%d
x
ꢀꢀ
(6)
[0144]
应理解,xn和xc都小于d
x
,则公式(6)可化简为:
[0145]
[0146]
对比公式(2)和公式(7)不难发现,通过迭代算法只需加法、减法和比较运算就能得到第m个线程在x方向的索引xm,而无需采用复杂的除法和取模运算。
[0147]
具体的,采用线程块在x方向的维度信息d
x
、y方向的维度信息dy和迭代步长c的三维索引(xc,yc,zc),对第n个线程的三维索引(xn,yn,zn)进行迭代,得到第m个线程在y方向的索引ym。根据公式(1)、公式(3)和公式(5)有:
[0148][0149]
其中,表示向下取整,应理解,yn和yc都小于dy,则公式(8)可化简为:
[0150][0151]
同理,对比公式(3)和公式(9)不难发现,只需加法、减法和比较运算就能得到第m个线程在y方向的索引ym。
[0152]
具体的,采用线程块在x方向的维度信息d
x
、y方向的维度信息dy和迭代步长c的三维索引(xc,yc,zc),对第n个线程的三维索引(xn,yn,zn)进行迭代,得到第m个线程在z方向的索引zm。根据公式(1)、公式(4)和公式(5)有:
[0153][0154]
应理解,由于线程块包括三个维度,则当dy≥2时,则公式(10)可化简为:
[0155][0156]
同理,对比公式(4)和公式(11)不难发现,只需加法、减法和比较运算就能得到第m个线程在z方向的索引zm。
[0157]
应理解,在已知第m个线程的三维索引(xm,ym,zm)的情况下,采用线程块的维度信息(d
x
,dy,dz)、迭代步长c和迭代步长的三维索引(xc,yc,zc)对第m个线程进行迭代,可以得到与第m个线程之间的间隔满足迭代步长c的第二目标线程的三维索引,即第m c个线程的三维索引。该实施方式中,对于线程块中已知的任意一个线程的三维索引,均可通过迭代算法得到与该任意一个线程之间的间隔满足迭代步长c的线程的三维索引,重复该操作,即可
生成线程块中的所有线程的三维索引,由于迭代算法将原本的除法和取模运算替换为简单的加法、减法和比较运算,降低了生成三维索引的复杂度,同时也降低了硬件复杂度。
[0158]
403:根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中。
[0159]
示例性的,根据配置信息对生成的三维索引进行压缩打包,包括:
[0160]
按照在x方向最高位为1的位置对生成的三维索引中x维度的索引进行压缩打包;
[0161]
按照在y方向最高位为1的位置对生成的三维索引中y方向的维度信息进行压缩打包;以及,
[0162]
按照在z方向最高位为1的位置对生成的三维索引中z维度的索引进行压缩打包。
[0163]
应理解,对于线程的三维索引(x,y,z),其范围满足:
[0164]
0≤x<d
x
[0165]
0≤y<dy[0166]
0≤z<dz[0167]
线程块在三个方向的维度(d
x
,dy,dz)均小于64k,当寄存器的位宽为16bit时,存储一个线程的三维索引(x,y,z)需要3个16-bit的寄存器,存储1个线程块中的所有三维索引,则需要3d
xdydz
个16-bit的寄存器,因此,用未经压缩的(x,y,z)直接存储,会造成非常昂贵的寄存器开销。
[0168]
定义一个线程块的最大线程数量为s,则有:
[0169]dxdydz
<s
[0170]
基于线程块在x方向的维度信息d
x
可定义生成的线程在x方向最高位为1的位置mx,比如:4的二进制数为100,则最高位为1的位置就是第2位,同理,基于线程块在y方向的维度信息dy可定义生成的线程在y方向最高位为1的位置my,基于线程块在z方向的维度信息dz可定义生成的线程在z方向最高位为1的位置mz。
[0171]
定义ms为s的最高位为1的位置,则有:
[0172]2mx2my2mz
≤xyz<d
xdydz
<s<2
(ms 1)
[0173]2(mx my mz)
<2
(ms 1)
[0174]
(mx my mz)<(ms 1)
[0175]
(mx my mz)≤ms
ꢀꢀ
(12)
[0176]
由公式(12)可知,通过msbits即可存储生成的三维索引(x,y,z),通常情况下,s小于64k,ms=16,即通过1个16-bit寄存器就可存储压缩打包后的三维索引(x,y,z)。如图5示出了一个未处理(un-used)的三维索引(x,y,z),按照(mx,my,mz)分别对其三个方向的索引进行压缩打包后的格式,对于压缩打包后的三维索引按照配置信息中的地址将其存入存储器中。
[0177]
404:在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引。
[0178]
本技术实施例中,若历史配置信息中存在与核函数对应的配置信息相匹配的目标历史配置信息,比如(address,d
x
,dy,dz)四个参数均一致,则无需执行迭代算法,则可从历史缓存中获取到该目标历史配置信息对应的历史三维索引,复用该历史三维索引。
[0179]
405:根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历
史三维索引存储在存储器中。
[0180]
本技术实施例中,目标历史配置信息同样包括历史三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,即指示了历史三维索引在三个方向所占的位数,按照历史三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置分别对其三个方向的索引进行压缩打包,得到压缩打包后的历史三维索引,对于压缩打包后的历史三维索引按照目标历史配置信息中的地址将其存入存储器中。
[0181]
示例性的,当存储器的存储空间大于或等于某个阈值时,用户可为调用频繁的核函数配置专用存储器地址,即配置信息包括该核函数的专用存储器地址,如图6所示,核函数2和核函数3为调用频繁的核函数,则核函数2执行的三维索引有专用存储器地址address2,核函数3执行的三维索引有专用存储器地址address3。则将压缩打包后的三维索引存储在存储器中,包括:
[0182]
将压缩打包后的三维索引存储在核函数的专用存储器地址中。
[0183]
同理,将压缩打包后的历史三维索引存储在存储器中,包括:
[0184]
将压缩打包后的历史三维索引存储在专用存储器地址中。
[0185]
该实施方式中,对于调用频繁的核函数,将其待执行的三维索引存储在专用存储器地址中,则针对该核函数不用重新生成线程的三维索引,有利于降低核函数的执行时延。
[0186]
示例性的,用户可为调用不频繁的核函数配置共用存储器地址,即配置信息包括调用不频繁的核函数的共用存储器地址,如图6所示,核函数1、核函数4和核函数5为调用不频繁的核函数,该类核函数执行的三维索引有共用存储器地址address1。则将压缩打包后的三维索引存储在存储器中,包括:
[0187]
将压缩打包后的三维索引存储在共用存储器地址中。
[0188]
同理,将压缩打包后的历史三维索引存储在存储器中,包括:
[0189]
将压缩打包后的三维索引存储在共用存储器地址中。
[0190]
该实施方式中,对于调用不频繁的核函数,将其待执行的三维索引存储在共用存储器地址中,即便需要重新生成线程的三维索引,但是由于其调用不频繁,其对硬件的性能并不会造成影响。
[0191]
示例性的,当存储器的存储空间小于某个阈值时,用户可为调用不频繁的核函数以及调用频繁的核函数配置共用存储器地址,以节省存储器开销。
[0192]
示例性的,根据配置信息生成线程的三维索引,包括:
[0193]
根据配置信息,在每个时钟周期(cycle)生成预设数量个线程的三维索引。
[0194]
应理解,如果每个时钟周期只生成1个线程的三维索引,硬件复杂度低,但是需要d
xdydz
个时钟周期后才能生成线程块中的所有索引,线程块越大,核函数执行时延越大。如果每个时钟周期生成d
xdydz
个线程的三维索引,1个时钟周期后即可运行核函数,但是硬件复杂度非常高,且线程块越大,硬件复杂度越高。
[0195]
本技术实施例中,每个时钟周期生成预设数量(warp size)个线程的三维索引,比如:warp size可取32,在下一个时钟周期,gpu即可调度上一个时钟周期的warp size个三维索引给核函数执行,这样生成三维索引的,硬件复杂度低,且生成三维索引的顺序与gpu调度的顺序保持特定关系(比如在时间维度递增),如此有利于降低核函数的执行时延。
[0196]
可以看出,本技术实施例中,通过获取核函数对应的配置信息;在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中;在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中。这样通过索引生成器以较低的时延生成线程的三维索引,有利于减少复杂算法生成三维索引所带来的时间开销,使索引的生成速度与核函数的执行速度保持协调,从而有利于避免核函数(或gpu计算核心)需要等待索引生成的情况,提升了核函数的执行效率,进而有利于提升cuda中并行处理的效率。另外,当历史配置信息中存在与核函数的配置信息相匹配的目标历史配置信息,则索引生成器无需生成新的三维索引,可直接复用历史三维索引,节省了生成新的三维索引所带来的时间开销,从而有利于降低核函数的执行时延,进而有利于提升cuda中并行处理的效率。同时,索引生成器无需执行复杂的算法便能以较低的时延生成新的三维索引,降低了硬件复杂度,有利于节省硬件成本。
[0197]
请参见图7,图7为本技术实施例提供的一种索引生成器的结构示意图,如图7所示,该索引生成器包括配置过滤器701、与配置过滤器701耦合的迭代器702和与迭代器702耦合的格式打包模块703,其中:
[0198]
配置过滤器701,配置为获取核函数对应的配置信息;
[0199]
迭代器702,配置为在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;
[0200]
格式打包模块703,配置为根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中;
[0201]
配置过滤器701,还配置为在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;
[0202]
格式打包模块703,还配置为根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中。
[0203]
本技术实施例中,配置信息可包括存储器地址、线程块的维度信息、预先设定的迭代步长的三维索引以及生成的三维索引在x方向最高位为1的位置mx、在y方向最高位为1的位置my和在z方向最高位为1的位置mz。配置过滤器701从配置队列中获取到该配置信息后,将该配置信息与历史缓存中的历史配置信息进行匹配,若历史配置信息中不存在与该配置信息相匹配的目标历史配置信息,则启动迭代器702,由迭代器702根据配置信息生成线程的三维索引,若历史配置信息中存在与该配置信息相匹配的目标历史配置信息,则不启动迭代器702,由配置过滤器701获取目标历史配置信息对应的历史三维索引,以复用该历史三维索引。
[0204]
以下用一个示例对配置过滤器701的工作流程进行说明:
[0205]
1.索引生成器初始状态时,历史缓存为空;
[0206]
2.配置过滤器701从配置队列中获取到配置信息1(address1,d
x
=32,dy=64,dz=1;
[0207]
3.由于历史缓存为空,配置信息1匹配失败,配置过滤器701启动迭代器702生成三
维索引,并将配置信息1放入历史缓存中;
[0208]
4.配置过滤器701从配置队列中获取到配置信息29address2,d
x
=100,dy=2,dz=2;
[0209]
5.配置过滤器701将配置信息2与历史缓存中的历史配置信息进行匹配,配置信息2匹配失败,配置过滤器701启动迭代器702生成三维索引,并将配置信息2放入历史缓存中;
[0210]
6.配置过滤器701从配置队列中获取到配置信息3(address1,d
x
=32,dy=64,dz=1;
[0211]
7.配置过滤器701将配置信息3与历史缓存中的历史配置信息进行匹配,配置信息3与配置信息1匹配成功,对于配置信息3配置过滤器701不启动迭代器702。
[0212]
示例性的,迭代器702具体配置为:
[0213]
根据线程块的维度信息得到线程块中任意一个线程的三维索引;
[0214]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引。
[0215]
本技术实施例中,迭代器702通过对公式(1)进行变换,即可得到线程块中任意一个线程的三维索引。
[0216]
示例性的,迭代器702具体配置为:
[0217]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引,包括:
[0218]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,生成线程块中第一目标线程的三维索引,第一目标线程与任意一个线程之间的间隔满足迭代步长;
[0219]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对第一目标线程的三维索引进行迭代,生成线程块中第二目标线程的三维索引,第二目标线程与第一目标线程之间的间隔满足迭代步长;
[0220]
重复执行采用线程块的维度信息、迭代步长和迭代步长的三维索引,对线程块中的目标线程的三维索引进行迭代,生成与目标线程之间的间隔满足迭代步长的线程的三维索引的操作,得到线程块中的线程的三维索引,目标线程为线程块中已生成三维索引的线程。
[0221]
示例性的,迭代器702具体配置为:
[0222]
采用线程块在x方向的维度信息、y方向的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在x方向的索引;
[0223]
采用线程块在x方向的维度信息、y方向的维度信息和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在y方向的索引和第一目标线程在z方向的索引。
[0224]
本技术实施例中,假设任意一个线程为第n个线程,第一目标线程为第m个线程,迭代器702采用线程块在x方向的维度信息d
x
、y方向的维度信息dy、迭代步长c和迭代步长的三维索引(xc,yc,zc),对第n个线程的三维索引(xn,yn,zn)进行迭代,得到第m个线程在x方向的索引xm。
[0225]
迭代器702采用线程块在x方向的维度信息d
x
、y方向的维度信息dy和迭代步长c的
三维索引(xc,yc,zc),对第n个线程的三维索引(xn,yn,zn)进行迭代,得到第m个线程在y方向的索引ym。
[0226]
迭代器702采用线程块在x方向的维度信息d
x
、y方向的维度信息dy和迭代步长c的三维索引(xc,yc,zc),对第n个线程的三维索引(xn,yn,zn)进行迭代,得到第m个线程在z方向的索引zm。
[0227]
迭代器702在已知第m个线程的三维索引(xm,ym,zm)的情况下,采用线程块的维度信息(d
x
,dy,dz)、迭代步长c和迭代步长的三维索引(xc,yc,zc)对第m个线程进行迭代,可以得到与第m个线程之间的间隔满足迭代步长c的第二目标线程的三维索引,即第m c个线程的三维索引。该实施方式中,迭代器702重复对已知三维索引进行迭代的操作,即可生成所有线程的三维索引,且在迭代过程中采用的均是加法、减法和比较运算,复杂度较低。
[0228]
示例性的,格式打包模块703具体配置为:
[0229]
按照在x方向最高位为1的位置对生成的三维索引中x维度的索引进行压缩打包;
[0230]
按照在y方向最高位为1的位置对生成的三维索引中y方向的维度信息进行压缩打包;以及,
[0231]
按照在z方向最高位为1的位置对生成的三维索引中z维度的索引进行压缩打包。
[0232]
应理解,配置信息中在x方向最高位为1的位置mx用于指示生成的三维索引中x方向的索引所占的位数,在y方向最高位为1的位置my用于指示生成的三维索引中y方向的索引所占的位数,在z方向最高位为1的位置mz用于指示生成的三维索引中z方向的索引所占的位数。格式打包模块703按照(mx,my,mz)分别对三维索引中三个方向的索引进行压缩打包,对于压缩打包后的三维索引按照配置信息中的地址将其存入存储器中。
[0233]
示例性的,核函数为调用频繁的核函数,配置信息包括核函数的专用存储器地址,格式打包模块703,具体配置为:
[0234]
将压缩打包后的三维索引存储在核函数的专用存储器地址中。
[0235]
本技术实施例中,对于调用频繁的核函数,格式打包模块703将其待执行的三维索引存储在专用存储器地址中,则针对该核函数不用重新生成线程的三维索引,有利于降低核函数的执行时延。
[0236]
示例性的,核函数为调用不频繁的核函数,配置信息包括共用存储器地址,格式打包模块703,具体配置为:
[0237]
将压缩打包后的三维索引存储在共用存储器地址中。
[0238]
本技术实施例中,由于核函数的调用并不频繁,则格式打包模块703将其待执行的三维索引存储在共用存储器地址中,对硬件的性能不会造成较大影响。
[0239]
示例性的,迭代器702,具体配置为:
[0240]
根据配置信息,在每个时钟周期生成预设数量个线程的三维索引。
[0241]
本技术实施例中,迭代器702在每个时钟周期生成预设数量(warp size)个线程的三维索引,生成三维索引的顺序与gpu调度的顺序保持特定关系,有利于降低核函数的执行时延。
[0242]
可以看出,在图7所示的索引生成器中,通过获取核函数对应的配置信息;在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索
引存储在存储器中;在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中。这样通过索引生成器以较低的时延生成线程的三维索引,有利于减少复杂算法生成三维索引所带来的时间开销,使索引的生成速度与核函数的执行速度保持协调,从而有利于避免核函数(或gpu计算核心)需要等待索引生成的情况,提升了核函数的执行效率,进而有利于提升cuda中并行处理的效率。另外,当历史配置信息中存在与核函数的配置信息相匹配的目标历史配置信息,则索引生成器无需生成新的三维索引,可直接复用历史三维索引,节省了生成新的三维索引所带来的时间开销,从而有利于降低核函数的执行时延,进而有利于提升cuda中并行处理的效率。同时,索引生成器无需执行复杂的算法便能以较低的时延生成新的三维索引,降低了硬件复杂度,有利于节省硬件成本。
[0243]
请参见图8,图8为本技术实施例提供的一种cuda多线程处理系统的结构示意图,如图8所示,该系统包括索引生成器801、存储器802和图形处理器(gpu)803,gpu803包括调度器8031和gpu计算核心8032;其中:
[0244]
索引生成器801,配置为获取核函数对应的配置信息;在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器802中;在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器802中;
[0245]
存储器802,配置为存储索引生成器压缩打包后的三维索引,或压缩打包后的历史三维索引;
[0246]
调度器8031,配置为将压缩打包后的三维索引或压缩打包后的历史三维索引,以及核函数的指令,调度给gpu计算核心8032;
[0247]
gpu计算核心8032,配置为从存储器802中读取压缩打包后的三维索引或压缩打包后的历史三维索引,并进行解压缩操作,执行指令和解压缩后得到的三维索引或解压缩后得到的历史三维索引。
[0248]
在一种可能的实施方式中,配置信息包括线程块的维度信息和预先设定的迭代步长的三维索引,索引生成器801,具体配置为:
[0249]
根据线程块的维度信息得到线程块中任意一个线程的三维索引;
[0250]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引。
[0251]
在一种可能的实施方式中,索引生成器801,具体配置为:
[0252]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,生成线程块中第一目标线程的三维索引,第一目标线程与任意一个线程之间的间隔满足迭代步长;
[0253]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对第一目标线程的三维索引进行迭代,生成线程块中第二目标线程的三维索引,第二目标线程与第一目标线程之间的间隔满足迭代步长;
[0254]
重复执行采用线程块的维度信息、迭代步长和迭代步长的三维索引,对线程块中的目标线程的三维索引进行迭代,生成与目标线程之间的间隔满足迭代步长的线程的三维索引的操作,得到线程块中的线程的三维索引,目标线程为线程块中已生成三维索引的线程。
[0255]
在一种可能的实施方式中,线程块的维度信息包括线程块在x方向的维度信息和y方向的维度信息,第一目标线程的三维索引包括第一目标线程在x方向的索引、y方向的索引和z方向的索引,索引生成器801,具体配置为:
[0256]
采用线程块在x方向的维度信息、y方向的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在x方向的索引;
[0257]
采用线程块在x方向的维度信息、y方向的维度信息和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在y方向的索引和第一目标线程在z方向的索引。
[0258]
在一种可能的实施方式中,配置信息包括生成的三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,索引生成器801,具体配置为:
[0259]
按照在x方向最高位为1的位置对生成的三维索引中x维度的索引进行压缩打包;
[0260]
按照在y方向最高位为1的位置对生成的三维索引中y方向的维度信息进行压缩打包;以及,
[0261]
按照在z方向最高位为1的位置对生成的三维索引中z维度的索引进行压缩打包。
[0262]
在一种可能的实施方式中,核函数为调用频繁的核函数,配置信息包括核函数的专用存储器地址,索引生成器801,具体配置为:
[0263]
将压缩打包后的三维索引存储在核函数的专用存储器地址中。
[0264]
在一种可能的实施方式中,核函数为调用不频繁的核函数,配置信息包括共用存储器地址,索引生成器801,具体配置为:
[0265]
将压缩打包后的三维索引存储在共用存储器地址中。
[0266]
在一种可能的实施方式中索引生成器801,具体配置为:
[0267]
根据配置信息,在每个时钟周期生成预设数量个线程的三维索引。
[0268]
其中,索引生成器801的工作流程在图4-图7所示的实施例中已有相关说明,且能达到相同或相似的有益效果,此处不再赘述。
[0269]
在一种可能的实施方式中,调度器8031的工作模式为增量模式,增量模式包括线程的三维索引的调度在时间维度是递增的及指令的调度在gpu计算核心8032维度是递增的。
[0270]
应理解,cuda中线程的调度是以线程束(warp)为单位的,比如每次调度warp size个线程,但是由于生成三维索引与调度三维索引之间不存在特定关系,gpu在调度线程束方面是非增量的。
[0271]
本技术实施例中,索引生成器801每个时钟周期生成一个线程束的三维索引,则调度器8031对核函数的指令和线程束的调度可以呈增量模式,具体体现为线程束的三维索引的调度在时间维度是递增的,核函数的指令的调度gpu计算核心8032维度是递增的。如图9所示,索引生成器801在时钟周期0生成线程束0的索引;在时钟周期1生成线程束1的索引,存储器802中存储有线程束0的索引;在时钟周期2生成线程束2的索引,存储器802中存储有
线程束0的索引和线程束1的索引;在时钟周期3生成线程束3的索引,存储器802中存储有线程束0的索引、线程束1的索引和线程束2的索引;在时钟周期4生成线程束4的索引,存储器802中存储有线程束0的索引、线程束1的索引、线程束2的索引和线程束3的索引。
[0272]
应理解,核函数通常包括多条指令,这些指令由gpu上的指令分发器进行分发,再由调度器8031对分发的指令进行调度。假设gpu计算核心8032包括计算核心0、计算核心1、计算核心2和计算核心3,核函数的指令包括指令0、指令1、指令2和指令3,调度器8031的调度具体体现为:在时钟周期1将线程束0的索引和指令0调度给计算核心0处理,在时钟周期2将线程束1的索引和指令0调度给计算核心0处理、将线程束0的索引和指令1调度给计算核心1处理,在时钟周期3将线程束2的索引和指令0调度给计算核心0处理、将线程束1的索引和指令1调度给计算核心1处理和将线程束0的索引和指令2调度给计算核心2处理,在时钟周期4将线程束3的索引和指令0调度给计算核心0处理、将线程束2的索引和指令1调度给计算核心1处理、将线程束1的索引和指令2调度给计算核心2处理和将线程束0的索引和指令3调度给计算核心3处理。
[0273]
该实施方式中,通过图9不难看出,调度器8031对线程的三维索引的调度在时间维度是递增的,对核函数指令的调度在gpu计算核心8032维度是递增的,这样的调度模式只存在一个时钟周期的时延,索引生成器每个时钟周期仅需输出预设数量(warp size)个线程的三维索引,gpu计算核心8032在下一个时钟周期就可处理该三维索引,时延明显降低。
[0274]
在一种可能的实施方式中,gpu计算核心8032,具体配置为:
[0275]
采用在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,对压缩打包后的三维索引或压缩打包后的历史三维索引进行解压缩操作。
[0276]
本技术实施例中,生成的三维索引在x方向最高位为1的位置mx、在y方向最高位为1的位置my和在z方向最高位为1的位置mz同样作为配置信息给到gpu803,比如:可以是由索引生成器801发送给gpu803,也可以是由用户配置给gpu803,gpu计算核心8032接受调度器8031的调度,从存储器802中读取压缩打包后的三维索引或压缩打包后的历史三维索引,采用(mx,my,mz)对压缩打包后的三维索引或压缩打包后的历史三维索引进行解压缩操作,然后采用调度器8031调度的核函数指令执行解压缩后得到的三维索引或解压缩后得到的历史三维索引。
[0277]
可以看出,在图8所示的cuda多线程处理系统中,通过索引生成器801获取核函数对应的配置信息;在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中;在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中;通过存储器802存储索引生成器压缩打包后的三维索引,或压缩打包后的历史三维索引;通过调度器8031将压缩打包后的三维索引或压缩打包后的历史三维索引,以及核函数的指令,调度给gpu计算核心8032;通过gpu计算核心8032从存储器中读取压缩打包后的三维索引或压缩打包后的历史三维索引,并进行解压缩操作,执行指令和解压缩后得到的三维索引或解压缩后得到的历史三维索引。这样通过索引生成器801以较低的时延生成线程的三维索引,有利于减少复杂算法生成三维索引所带来的时间开销,使索引的生成速度与核函数的执行速度保持协调,
从而有利于避免核函数(或gpu计算核心)需要等待索引生成的情况,提升了核函数的执行效率,进而有利于提升cuda中并行处理的效率。另外,当历史配置信息中存在与核函数的配置信息相匹配的目标历史配置信息,则索引生成器801无需生成新的三维索引,可直接复用历史三维索引,节省了生成新的三维索引所带来的时间开销,从而有利于降低核函数的执行时延,进而有利于提升cuda中并行处理的效率。同时,索引生成器801无需执行复杂的算法便能以较低的时延生成新的三维索引,降低了硬件复杂度,有利于节省硬件成本。调度器8031的调度有利于保证gpu计算核心8032以低时延执行核函数的指令和对应的三维索引,同样有利于提升cuda中并行处理的效率。
[0278]
请参见图10,图10为本技术实施例提供的一种电子设备的结构示意图,如图10所示,该电子设备至少包括处理器1001、输入设备1002、输出设备1003以及计算机可读存储介质1004。其中,电子设备内的处理器1001、输入设备1002、输出设备1003以及计算机可读存储介质1004可通过总线或其他方式连接。
[0279]
计算机可读存储介质1004可以存储在电子设备的存储器中,所述计算机可读存储介质1004用于存储计算机程序,所述计算机程序包括程序指令,所述处理器1001用于执行所述计算机可读存储介质1004存储的程序指令。处理器1001(或称cpu(central processing unit,中央处理器))是电子设备的计算核心以及控制核心,其适于实现一条或多条指令,具体适于加载并执行一条或多条指令从而实现相应方法流程或相应功能。
[0280]
在一个实施例中,本技术实施例提供的电子设备的处理器1001可以用于进行一系列cuda多线程处理:
[0281]
获取核函数对应的配置信息;
[0282]
在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;
[0283]
根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中;
[0284]
在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;
[0285]
根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中。
[0286]
再一个实施例中,配置信息包括线程块的维度信息和预先设定的迭代步长的三维索引,处理器1001执行根据配置信息生成线程的三维索引,包括:
[0287]
根据线程块的维度信息得到线程块中任意一个线程的三维索引;
[0288]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引。
[0289]
再一个实施例中,处理器1001执行采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,以生成线程块中的线程的三维索引,包括:
[0290]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,生成线程块中第一目标线程的三维索引,第一目标线程与任意一个线程之间的间隔满足迭代步长;
[0291]
采用线程块的维度信息、迭代步长和迭代步长的三维索引,对第一目标线程的三维索引进行迭代,生成线程块中第二目标线程的三维索引,第二目标线程与第一目标线程之间的间隔满足迭代步长;
[0292]
重复执行采用线程块的维度信息、迭代步长和迭代步长的三维索引,对线程块中的目标线程的三维索引进行迭代,生成与目标线程之间的间隔满足迭代步长的线程的三维索引的操作,得到线程块中的线程的三维索引,目标线程为线程块中已生成三维索引的线程。
[0293]
再一个实施例中,线程块的维度信息包括线程块在x方向的维度信息和y方向的维度信息,第一目标线程的三维索引包括第一目标线程在x方向的索引、y方向的索引和z方向的索引,处理器1001执行采用线程块的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,生成线程块中第一目标线程的三维索引,包括:
[0294]
采用线程块在x方向的维度信息、y方向的维度信息、迭代步长和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在x方向的索引;
[0295]
采用线程块在x方向的维度信息、y方向的维度信息和迭代步长的三维索引,对任意一个线程的三维索引进行迭代,得到第一目标线程在y方向的索引和第一目标线程在z方向的索引。
[0296]
再一个实施例中,配置信息包括生成的三维索引在x方向最高位为1的位置、在y方向最高位为1的位置和在z方向最高位为1的位置,处理器1001执行根据配置信息对生成的三维索引进行压缩打包,包括:
[0297]
按照在x方向最高位为1的位置对生成的三维索引中x维度的索引进行压缩打包;
[0298]
按照在y方向最高位为1的位置对生成的三维索引中y方向的维度信息进行压缩打包;以及,
[0299]
按照在z方向最高位为1的位置对生成的三维索引中z维度的索引进行压缩打包。
[0300]
再一个实施例中,核函数为调用频繁的核函数,配置信息包括核函数的专用存储器地址,处理器1001执行将压缩打包后的三维索引存储在存储器中,包括:
[0301]
将压缩打包后的三维索引存储在核函数的专用存储器地址中。
[0302]
再一个实施例中,核函数为调用不频繁的核函数,配置信息包括共用存储器地址,处理器1001执行将压缩打包后的三维索引存储在存储器中,包括:
[0303]
将压缩打包后的三维索引存储在共用存储器地址中。
[0304]
再一个实施例中,处理器1001执行根据配置信息生成线程的三维索引,包括:
[0305]
根据配置信息,在每个时钟周期生成预设数量个线程的三维索引。
[0306]
可以看出,在图10所示的电子设备中,通过获取核函数对应的配置信息;在历史配置信息中不存在与配置信息相匹配的目标历史配置信息的情况下,根据配置信息生成线程的三维索引;根据配置信息对生成的三维索引进行压缩打包,并将压缩打包后的三维索引存储在存储器中;在历史配置信息中存在目标历史配置信息的情况下,获取目标历史配置信息对应的历史三维索引;根据目标历史配置信息对历史三维索引进行压缩打包,并将压缩打包后的历史三维索引存储在存储器中。这样通过索引生成器以较低的时延生成线程的三维索引,有利于减少复杂算法生成三维索引所带来的时间开销,使索引的生成速度与核函数的执行速度保持协调,从而有利于避免核函数(或gpu计算核心)需要等待索引生成的
情况,提升了核函数的执行效率,进而有利于提升cuda中并行处理的效率。另外,当历史配置信息中存在与核函数的配置信息相匹配的目标历史配置信息,则索引生成器无需生成新的三维索引,可直接复用历史三维索引,节省了生成新的三维索引所带来的时间开销,从而有利于降低核函数的执行时延,进而有利于提升cuda中并行处理的效率。同时,索引生成器无需执行复杂的算法便能以较低的时延生成新的三维索引,降低了硬件复杂度,有利于节省硬件成本。
[0307]
示例性的,上述电子设备可以是电脑、笔记本电脑、平板电脑、服务器等设备。电子设备可包括但不仅限于处理器1001、输入设备1002、输出设备1003以及计算机可读存储介质1004。还可以包括内存、电源、应用客户端模块等。输入设备1002可以是键盘、触摸屏、射频接收器等,输出设备1003可以是扬声器、显示器、射频发送器等。本领域技术人员可以理解,所述示意图仅仅是电子设备的示例,并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。
[0308]
需要说明的是,由于电子设备的处理器1001执行计算机程序时实现上述的cuda多线程处理方法中的步骤,因此上述cuda多线程处理方法的实施例均适用于该电子设备,且均能达到相同或相似的有益效果。
[0309]
本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质是信息处理设备或信息发送设备或信息接收设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机可读存储介质既可以包括终端中的内置存储介质,当然也可以包括终端所支持的扩展存储介质。计算机可读存储介质提供存储空间,该存储空间存储了终端的操作系统。并且,在该存储空间中还存放了适于被处理器加载并执行的一条或多条的指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机可读存储介质可以是高速ram存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器;可选的,还可以是至少一个位于远离前述处理器的计算机可读存储介质。在一个实施例中,可由处理器加载并执行计算机可读存储介质中存放的一条或多条指令,以实现上述有关cuda多线程处理方法中的相应步骤。
[0310]
本技术实施例还提供了一种计算机程序产品,其中,该计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,该计算机程序可操作来使计算机执行如上述cuda多线程处理方法中的步骤。该计算机程序产品可以为一个软件安装包。
[0311]
以上对本技术实施例进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

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

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

相关文献