一种带掩码的规约操作优化方法、装置、设备及介质转让专利

申请号 : CN202311585448.X

文献号 : CN117311988B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 武桓州周洲董兆华

申请人 : 沐曦集成电路(南京)有限公司

摘要 :

本发明公开一种带掩码的规约操作优化方法、装置、设备及介质,属于数据处理领域,方法基于使用场景为线程束中每个线程设置掩码,每个线程获取自身通道值,自身通道值对应线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,每个线程按照步长从大到小进行规约操作,将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作,每个线程获取对应线程束中第一个线程通道中的操作结果,根据每个线程在掩码中的标记返回最终值。该方法利用线程间数据访问替代共享内存读写,通过掩码在比特位上的设置表示线程的分组,在一次计算中可完成多个线程分组的计算,提高规约操作效率,节省存储空间。

权利要求 :

1.一种带掩码的规约操作优化方法,其特征在于,所述方法包括:步骤S1,基于使用场景为线程束中的每个线程设置掩码,所述掩码按顺序标记线程束中对应线程通道是否参与规约操作,并传入每个线程待规约操作的数据,步骤S2,每个线程获取自身通道值,所述自身通道值对应所述线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,所述第一个线程通道值是指当前线程对应掩码中按顺序第一个参与规约计算的线程通道对应的序号,步骤S3,每个线程按照步长从大到小进行规约操作,并将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作,步骤S4,每个线程获取对应线程束中第一个线程通道中的操作结果,步骤S5,根据每个线程在掩码中的标记返回最终值;

其中,所述步骤S3具体为:

步骤S301,初始化步长变量stride值为warp总线程数量的一半,进入步骤S302,步骤S302,判断stride是否大于0,若是则进入步骤S303,若否则进入步骤S4,步骤S303,当前线程自身通道值与stride相加得到的值dest作为需要读取的线程通道值,从该线程通道中获取数据value记作temp,进入步骤S304,步骤S304,判断步骤S303中得到的dest对应在掩码中是否标记为参与规约操作,若是则进入步骤S306,若否则进入步骤S305,步骤S305,步骤S303中获取到的temp重新赋值为默认值,进入步骤S306,步骤S306,当前线程的数据value与temp进行运算,运算结果存储在value中,进入步骤S307,步骤S307,stride值右移1位,进入步骤S302。

2.根据权利要求1所述的方法,其特征在于:

所述掩码可以标记连续多个线程通道参与规约操作,也可以间隔标记多个线程通道参与规约操作。

3.根据权利要求1所述的方法,其特征在于:

当前线程基于线程间数据访问另一个线程的数据。

4.根据权利要求1‑3任一项所述的方法,其特征在于:

所述步骤S5具体为,

步骤S501,判断当前线程通道对应在掩码中是否标记为参与规约操作,若是进入步骤S502,若否进入步骤S503;

步骤S502,返回步骤S4中得到的操作结果;

步骤S503,返回步骤S1中传入的原始数据值。

5.一种带掩码的规约操作优化装置,其特征在于,所述装置包括:初始化模块,基于使用场景为线程束中的每个线程设置掩码,所述掩码按顺序标记线程束中对应线程通道是否参与规约操作,并传入每个线程待规约操作的数据,通道值获取模块,用于每个线程获取自身通道值,所述自身通道值对应所述线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,所述第一个线程通道值是指当前线程对应掩码中按顺序第一个参与规约计算的线程通道对应的序号;

运算模块,用于每个线程按照步长从大到小进行规约操作,并将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作;

结果获取模块,用于每个线程获取对应线程束中第一个线程通道中的操作结果,结果返回模块,用于根据每个线程在掩码中的标记返回最终值;

其中,所述装置还包括:

所述运算模块具体包括,

初始化步长变量模块,用于初始化步长变量stride值为warp总线程数量的一半,第一判断模块,用于判断stride是否大于0,线程通道值获取模块,用于若stride大于0,当前线程自身通道值与stride相加得到的值dest作为需要读取的线程通道值,从该线程通道中获取数据value记作temp,第二判断模块,用于判断dest对应在掩码中是否标记为参与规约操作,重新赋值模块,用于若dest对应在掩码中标记为不参与规约操作,对获取到的temp重新赋值为默认值,第二运算模块,用于当前线程的数据value与temp进行运算,运算结果存储在value中,第三运算模块,用于stride值右移1位。

6.根据权利要求5所述的装置,其特征在于,所述装置还包括:所述结果返回模块具体包括,

第三判断模块,用于判断当前线程通道对应在掩码中是否标记为参与规约操作,第一返回模块,用于基于第三判断模块的判断结果返回对应的操作结果。

7.根据权利要求5‑6任一项所述的装置,其特征在于:

所述掩码可以标记连续多个线程通道参与规约操作,也可以间隔标记多个线程通道参与规约操作。

8.一种电子设备,其特征在于:包括存储有可执行程序代码的存储器以及与所述存储器耦合的处理器;其中,所述处理器调用所述存储器中存储的可执行程序代码,执行如权利要求1‑4任一项所述的方法。

9.一种计算机可读存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器运行时执行如权利要求1‑4任一项所述的方法。

说明书 :

一种带掩码的规约操作优化方法、装置、设备及介质

技术领域

[0001] 本公开实施例涉及数据处理领域,具体地涉及一种带掩码的规约操作优化方法、装置、设备及介质。

背景技术

[0002] 规约是GPU编程中将计算并行化处理从而完成高性能计算的方式,目前主流的GPU编程模型提供了用于算术求和、求最大最小值、逻辑与、逻辑或和逻辑非的规约计算API。在GPU并行编程中,规约算法通常由一组并行运行的线程利用共享内存共同完成运算,且这组线程得到的结果也一致。现有技术中规约算法无法在一次调用中完成多个线程分组的计算,并且占用有限的共享内存,已有的规约API也无法较好的处理线程分组的计算。如何在规约操作中提高并行运算的效率以及节省存储空间,是亟待解决的问题。

发明内容

[0003] 本发明的目的在于提供一种带掩码的规约操作优化方法、装置、设备及介质,以便于至少部分地解决上述问题。
[0004] 根据本公开的一个方面,提出一种带掩码的规约操作优化方法,包括:
[0005] 步骤S1,基于使用场景为线程束中的每个线程设置掩码,所述掩码按顺序标记线程束中对应线程通道是否参与规约操作,并传入每个线程待规约操作的数据,[0006] 步骤S2,每个线程获取自身通道值,所述自身通道值对应所述线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,所述第一个线程通道值是指当前线程对应掩码中按顺序第一个参与规约计算的线程通道对应的序号,
[0007] 步骤S3,每个线程按照步长从大到小进行规约操作,并将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作,
[0008] 步骤S4,每个线程获取对应线程束中第一个线程通道中的操作结果,[0009] 步骤S5,根据每个线程在掩码中的标记返回最终值。
[0010] 在一些实施例中,该方法还包括,所述掩码可以标记连续多个线程通道参与规约操作,也可以间隔标记多个线程通道参与规约操作。
[0011] 在一些实施例中,该方法还包括,当前线程基于线程间数据访问另一个线程的数据。
[0012] 在一些实施例中,该方法还包括,所述步骤S3具体为,
[0013] 步骤S301,初始化步长变量stride值为warp总线程数量的一半,进入步骤S302[0014] 步骤S302,判断stride是否大于0,若是则进入步骤S303,若否则进入步骤S4,[0015] 步骤S303,当前线程自身通道值与stride相加得到的值dest作为需要读取的线程通道值,从该线程通道中获取数据value记作temp,进入步骤S304,
[0016] 步骤S304,判断步骤S303中得到的dest对应在掩码中是否标记为参与规约操作,若是则进入步骤S306,若否则进入步骤S305,
[0017] 步骤S305,步骤S303中获取到的temp重新赋值为默认值,进入步骤S306,[0018] 步骤S306,当前线程的数据value与temp进行运算,运算结果存储在value中,进入步骤S307,
[0019] 步骤S307,stride值右移1位,进入步骤S302。
[0020] 在一些实施例中,该方法还包括,所述步骤S5具体为,
[0021] 步骤S501,判断当前线程通道对应在掩码中是否标记为参与规约操作,若是进入步骤S502,若否进入步骤S503;
[0022] 步骤S502,返回步骤S4中得到的操作结果;
[0023] 步骤S503,返回步骤S1中传入的原始数据值。
[0024] 根据本公开的另一个方面,提出一种带掩码的规约操作优化装置,包括:
[0025] 初始化模块,基于使用场景为线程束中的每个线程设置掩码,所述掩码按顺序标记线程束中对应线程通道是否参与规约操作,并传入每个线程待规约操作的数据,[0026] 通道值获取模块,用于每个线程获取自身通道值,所述自身通道值对应所述线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,所述第一个线程通道值是指当前线程对应掩码中按顺序第一个参与规约计算的线程通道对应的序号;
[0027] 运算模块,用于每个线程按照步长从大到小进行规约操作,并将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作;
[0028] 结果获取模块,用于每个线程获取对应线程束中第一个线程通道中的操作结果,[0029] 结果返回模块,用于根据每个线程在掩码中的标记返回最终值。
[0030] 在一些实施例中,该装置还包括,所述运算模块具体包括,
[0031] 初始化步长变量模块,用于初始化步长变量stride值为warp总线程数量的一半,[0032] 第一判断模块,用于判断stride是否大于0,
[0033] 线程通道值获取模块,用于若stride大于0,当前线程自身通道值与stride相加得到的值dest作为需要读取的线程通道值,从该线程通道中获取数据value记作temp,[0034] 第二判断模块,用于判断dest对应在掩码中是否标记为参与规约操作,[0035] 重新赋值模块,用于若dest对应在掩码中标记为不参与规约操作,对获取到的temp重新赋值为默认值,
[0036] 第二运算模块,用于当前线程的数据value与temp进行运算,运算结果存储在value中,
[0037] 第三运算模块,用于stride值右移1位。
[0038] 在一些实施例中,该装置还包括,所述结果返回模块具体包括,
[0039] 第三判断模块,用于判断当前线程通道对应在掩码中是否标记为参与规约操作,[0040] 第一返回模块,用于基于第三判断模块的判断结果返回对应的操作结果。
[0041] 在一些实施例中,该装置还包括,所述掩码可以标记连续多个线程通道参与规约操作,也可以间隔标记多个线程通道参与规约操作。
[0042] 本申请实施例还提供一种电子设备,所述电子设备包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,执行如上任一实施例方法中的步骤。
[0043] 本申请实施例还提供一种计算机可读存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器运行时执行如上任一实施例方法中的步骤。
[0044] 本公开提供的一种带掩码的规约操作优化方法、装置、设备及介质,该方法包括,基于使用场景为线程束中的每个线程设置掩码,每个线程获取自身通道值,所述自身通道值对应所述线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,每个线程按照步长从大到小进行规约操作,并将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作,每个线程获取对应线程束中第一个线程通道中的操作结果,根据每个线程在掩码中的标记返回最终值。该方法利用线程间数据访问替代共享内存读写,通过掩码在比特位上的设置表示线程的分组,在一次计算中通过掩码的设置可以完成多个线程分组的计算,提高了规约操作的效率,节省存储空间;同时本公开可以满足现有的规约计算场景功能,API形式上与主流GPU编程模型保持统一,算法实现不依附硬件的限制。

附图说明

[0045] 图1为本申请实施例提供的带掩码的规约操作优化方法示意图。
[0046] 图2为本申请实施例提供的GPU中规约API使用示意图。
[0047] 图3为本申请实施例提供的规约操作优化的整体执行流程示意图。
[0048] 图4为本申请实施例提供的带掩码的规约操作优化装置示意图。
[0049] 图5为本申请实施例提供的电子设备的结构示意图。

具体实施方式

[0050] 下面结合附图对本发明的具体实施方式作进一步说明。在此需要说明的是,对于这些实施方式的说明用于帮助理解本发明,但并不构成对本发明的限定。此外,下面所描述的本发明各个实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互组合。
[0051] 实施例一
[0052] 具体地,请参阅图1,为本公开提供的一种带掩码的规约操作优化方法。通过设置掩码标记线程分组信息,通过线程间数据访问进行计算,每次计算使用一个线程束(wrap)线程实现,在GPU中,线程是以wrap为单位进行调度和执行的,规约是基于wrap的数据处理,一般情况下,wrap包含的线程执行同一条处理指令,每个线程拥有自己的数据value;规约操作是一类并行算法,对传入的多个数据,通过循环操作,生成一个结果。这类操作包括取最小、平方和、逻辑与/或、向量点积、取最大、求和、取平均等多种操作类型,可以理解的是本实施例不限制操作类型;可以理解的是,这类操作对应处理的数据可以应用在各种应用场景,例如对应处理的数据可以是音视频、图像、文本、信号等。本实施例基本实现过程如下:
[0053] 步骤S1,基于使用场景为线程束中的每个线程设置掩码,所述掩码按顺序标记线程束中对应线程通道(lane)是否参与规约操作,并传入每个线程待规约操作的数据。
[0054] 在调用规约算法API前,每个线程根据使用场景设置与其对应的掩码mask,这里的mask按顺序标记线程束中对应线程通道是否参与规约操作,在一个实施例中,掩码可以表示为wrapsize(线程束中线程数量)个比特位的无符号整型,wrapsize一般为32或者64,比特位对应值为“1”表示该序号对应的线程通道参与规约操作,为“0” 表示该序号对应的线程通道不参与规约操作,例如十六进制的掩码:0xffffffff,则表示,序号从0‑31的线程通道均参与规约操作。这里的通道是指该wrapsize个并行线程中每个线程各自的编号。
[0055] 步骤S2,每个线程获取自身通道值,所述自身通道值对应所述线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,所述第一个线程通道值是指当前线程对应掩码中按顺序第一个参与规约计算的线程通道对应的序号。
[0056] 每个线程获取自己的通道值self,再根据API中的mask值,获取所属线程分组中第一个线程通道值head。在一些实施例中,可以通过API调用将mask和value值一并传入,GPU中规约API使用示意如图2所示。
[0057] 步骤S3,每个线程按照步长从大到小进行规约操作,并将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作。
[0058] 每个线程按照步长从大到小进行规约计算,通过线程间数据访问另一个线程的数据,并根据mask中的设置将另一个线程中的数据进行处理后再与本线程的值进行操作;
[0059] 可以理解的是,步长可以通过变量控制,循环执行规约操作,步长的设置本实施例不做限制。同时,本实施例通过线程间数据访问的方式实现线程间通信,不占用有限的共享内存。
[0060] 步骤S4,每个线程获取对应线程束中第一个线程通道中的操作结果。
[0061] 步骤S5,根据每个线程在掩码中的标记返回最终值。
[0062] 每个线程获取wrap中通道head的结果,根据self在mask中是否标记为1返回最终值。整个规约操作过程是由一个wrapsize数量的线程并行执行的,最终目的是将所有线程的wrapsize个value值进行运算;循环操作过程中,每个通道每次循环中会计算与另一个通道的value的结果并保存在自己通道中,在整个算法结束时,只有head通道的结果是正确的。
[0063] 通过掩码的设置将一次计算中使用的wrap中的线程进行分组,每个分组中的线程得到的结果仅为该分组内规约结果,掩码设置支持连续多个线程为一组,跨多个线程为一组以及仅部分线程参与规约计算,从而提高并行运算的效率。
[0064] 在一些实施例中,规约操作优化的整体执行流程如图3所示,具体包括如下步骤:
[0065] 步骤1:在调用规约算法API前,每个线程根据使用场景设置掩码mask,并传入待规约计算的数据value,
[0066] 步骤1.1进入该规约算法前,wrap中的线程可以设置一致的掩码值mask,如下表1示例【表1被拆分为上、下两个部分,分别为表1(上)和表1(下)】,本公开的一个具体应用,warpsize为32,规约计算类型为求和,每个线程的掩码均是0xffffffff;也可以设置不一样的mask值,如下表2示例【表2被拆分为上、下两个部分,分别为表2(上)和表2(下)】,本公开的另一个具体应用,warpsize为32,规约计算类型为求和,线程的mask分别为0x1f、0x3e0、0x7c00、0xf800;mask值中每个比特位标记了对应线程通道是否参与规约计算,mask可以标记连续多个线程通道为1,也可以标记跨多个线程通道为1;
[0067] 步骤1.2待规约计算的数据value由每个线程自身确定;
[0068] 步骤2:每个线程获取自己的通道值self,再根据API中的mask值,获取所属线程分组中第一个线程通道值head;
[0069] 步骤2.1 通过GPU编程模型提供的API获取当前线程通道值记为self;
[0070] 步骤2.2 从mask值获取当前线程所述线程组第一个线程通道值head,即mask中从第0位开始第一个标记为1的比特位序号;
[0071] 步骤3:每个线程按照步长从大到小进行规约计算,通过线程间数据访问另一个线程的数据,并根据mask中的设置将另一个线程中的数据进行处理后再与本线程的值进行操作;
[0072] 步骤3.1 初始化步长变量stride值为wrap总线程数量的一半,然后进入步骤3.2;
[0073] 步骤3.2 判断stride是否大于0,如是则进入步骤3.3,如否则进入步骤4;
[0074] 步骤3.3 将self与stride相加得到的值dest作为需要读取的线程通道值,并使用GPU编程模型提供的API从该线程通道中获取传入其中的数据value记作temp,然后进入步骤3.4;
[0075] 步骤3.4 判断3.3中得到的dest对应在mask中的比特位是否标记为1,是则进入步骤3.6,否则进入步骤3.5;
[0076] 步骤3.5 将3.3中获取到的temp重新赋值为默认值,即如果该线程通道不参与规约运算,则对该线程对应通道对应的数据进行重新赋值为默认值,这里的默认值与具体的规约操作运算类型相关,例如加法运算默认值为0,最大值运算默认值为value数据类型的最小值,最大值运算默认值为value数据类型的最大值,逻辑与运算默认值为1,逻辑或运算默认值为0,逻辑异或运算默认值为0,然后进入步骤3.6;
[0077] 步骤3.6 将当前线程的数据value与temp进行运算并存储在value中,即放在当前线程的数据堆栈中,然后进入步骤3.7;
[0078] 步骤3.7 将stride值右移1位,然后进入步骤3.2;
[0079] 步骤4:每个线程获取wrap中通道head的结果;
[0080] 步骤4.1 使用GPU编程模型提供的API从线程通道head中获取完成步骤3之后的value值;
[0081] 步骤5:根据self在mask中是否标记为1返回最终值;
[0082] 步骤5.1 判断self对应在mask中的比特位是否标记为1,是则进入步骤5.2,否则进入步骤5.3;
[0083] 步骤5.2 返回步骤4.1中得到的value值;
[0084] 步骤5.3 返回步骤1中传入的原始value值。
[0085]
[0086]
[0087]
[0088]
[0089] 实施例二
[0090] 为实现上述目的,本实施例提出了一种带掩码的规约操作优化装置,具体的请参阅图4,包括,
[0091] 初始化模块,基于使用场景为线程束中的每个线程设置掩码,所述掩码按顺序标记线程束中对应线程通道是否参与规约操作,并传入每个线程待规约操作的数据,[0092] 通道值获取模块,用于每个线程获取自身通道值,所述自身通道值对应所述线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,所述第一个线程通道值是指当前线程对应掩码中按顺序第一个参与规约计算的线程通道对应的序号;
[0093] 运算模块,用于每个线程按照步长从大到小进行规约操作,并将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作;
[0094] 结果获取模块,用于每个线程获取对应线程束中第一个线程通道中的操作结果,[0095] 结果返回模块,用于根据每个线程在掩码中的标记返回最终值。
[0096] 在一些实施例中,该装置还包括,所述运算模块具体包括,
[0097] 初始化步长变量模块,用于初始化步长变量stride值为warp总线程数量的一半,[0098] 第一判断模块,用于判断stride是否大于0,
[0099] 线程通道值获取模块,用于若stride大于0,当前线程自身通道值与stride相加得到的值dest作为需要读取的线程通道值,从该线程通道中获取数据value记作temp,[0100] 第二判断模块,用于判断dest对应在掩码中是否标记为参与规约操作,[0101] 重新赋值模块,用于若dest对应在掩码中标记为不参与规约操作,对获取到的temp重新赋值为默认值,
[0102] 第二运算模块,用于当前线程的数据value与temp进行运算,运算结果存储在value中,
[0103] 第三运算模块,用于stride值右移1位。
[0104] 在一些实施例中,该装置还包括,所述结果返回模块具体包括,
[0105] 第三判断模块,用于判断当前线程通道对应在掩码中是否标记为参与规约操作,[0106] 第一返回模块,用于基于第三判断模块的判断结果返回对应的操作结果。
[0107] 在一些实施例中,该装置还包括,掩码可以标记连续多个线程通道参与规约操作,也可以间隔标记多个线程通道参与规约操作。
[0108] 实施例三
[0109] 相应的,本申请实施例还提供一种电子设备,该电子设备可以为终端或者服务器。如图5所示,图5为本申请实施例提供的电子设备的结构示意图。
[0110] 该电子设备500包括有一个或者一个以上处理核心的处理器501、有一个或一个以上计算机可读存储介质的存储器502及存储在存储器502上并可在处理器上运行的计算机程序。其中,处理器501与存储器502电性连接。本领域技术人员可以理解,图中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0111] 处理器501是电子设备500的控制中心,利用各种接口和线路连接整个电子设备500的各个部分,通过运行或加载存储在存储器502内的软件程序(计算机程序)和/或单元,以及调用存储在存储器502内的数据,执行电子设备500的各种功能和处理数据,从而对电子设备500进行整体监控。
[0112] 在本申请实施例中,电子设备500中的处理器501会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能:
[0113] 步骤S1,基于使用场景为线程束中的每个线程设置掩码,所述掩码按顺序标记线程束中对应线程通道是否参与规约操作,并传入每个线程待规约操作的数据,[0114] 步骤S2,每个线程获取自身通道值,所述自身通道值对应所述线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,所述第一个线程通道值是指当前线程对应掩码中按顺序第一个参与规约计算的线程通道对应的序号,
[0115] 步骤S3,每个线程按照步长从大到小进行规约操作,并将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作,
[0116] 步骤S4,每个线程获取对应线程束中第一个线程通道中的操作结果,[0117] 步骤S5,根据每个线程在掩码中的标记返回最终值。
[0118] 以上各个操作的具体实施可参见前述的实施例,在此不再赘述。
[0119] 可选的,如图5所示,电子设备500还包括:规约操作优化模块503、通讯模块504、输入单元505以及电源506。其中,处理器501分别与规约操作优化模块503、通讯模块504、输入单元505以及电源506电性连接。本领域技术人员可以理解,图5中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0120] 规约操作优化模块503可用于实现规约操作的优化。
[0121] 通讯模块504可用于与其他设备通信。
[0122] 输入单元505可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
[0123] 电源506用于给电子设备500的各个部件供电。可选的,电源506可以通过电源管理系统与处理器501逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源506还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
[0124] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0125] 实施例四
[0126] 本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
[0127] 为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的一种带掩码的规约操作优化的方法的步骤。例如,该计算机程序可以执行如下步骤:
[0128] 步骤S1,基于使用场景为线程束中的每个线程设置掩码,所述掩码按顺序标记线程束中对应线程通道是否参与规约操作,并传入每个线程待规约操作的数据,[0129] 步骤S2,每个线程获取自身通道值,所述自身通道值对应所述线程在掩码中的序号,基于掩码获取当前线程所属线程束中第一个线程通道值,所述第一个线程通道值是指当前线程对应掩码中按顺序第一个参与规约计算的线程通道对应的序号,
[0130] 步骤S3,每个线程按照步长从大到小进行规约操作,并将规约操作对应的另一个线程中的数据基于掩码进行处理后再与当前线程的数据进行操作,
[0131] 步骤S4,每个线程获取对应线程束中第一个线程通道中的操作结果,[0132] 步骤S5,根据每个线程在掩码中的标记返回最终值。
[0133] 以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0134] 其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,RandomAccess Memory)、磁盘或光盘等。
[0135] 由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种带掩码的规约操作优化方法中的步骤,因此,可以实现本申请实施例所提供的任一种带掩码的规约操作优化方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
[0136] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0137] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0138] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0139] 以上结合附图对本发明的实施方式作了详细说明,但本发明不限于所描述的实施方式。对于本领域的技术人员而言,在不脱离本发明原理和精神的情况下,对这些实施方式进行多种变化、修改、替换和变型,仍落入本发明的保护范围内。