CN105637482A - 基于gpu的数据流处理方法和装置 - Google Patents
基于gpu的数据流处理方法和装置 Download PDFInfo
- Publication number
- CN105637482A CN105637482A CN201480038261.0A CN201480038261A CN105637482A CN 105637482 A CN105637482 A CN 105637482A CN 201480038261 A CN201480038261 A CN 201480038261A CN 105637482 A CN105637482 A CN 105637482A
- Authority
- CN
- China
- Prior art keywords
- operator
- subtask
- operation operator
- tuple
- candidate operations
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种基于GPU的数据流处理方法和装置,通过将操作逻辑相同的多个子任务合并成一个合并任务,并调用GPU对合并任务进行数据流处理,从而降低GPU的调度频率,减少GPU的调度开销,提高流数据处理***的吞吐量。
Description
本发明实施例涉及计算机技术,尤其涉及一种基于图形处理器(Graphics Processing Unit,以下简称:GPU)的数据流处理方法和装置。
目前,将GPU作为协处理器或加速器应用于通用计算领域(如数据库,数据压缩等)已成为业界的一大趋势。与中央处理器(Central Processing Unit,以下简称:CPU)相比,GPU具有更大规模的并发线程以及更高内存带宽等优势,更适合大规模的数据并行或计算并行型任务。
然而,针对数据流数目多且数据生成频率大的应用场景,流处理任务具有连续性且并发任务多,但单个流处理任务的计算量较小的特点,因此,采用GPU对数据流处理进行加速时,需要频繁调度GPU,造成GPU调度开销大。
发明内容
本发明实施例提供一种基于GPU的数据流处理方法和装置,以减少GPU的调度开销,提高流数据处理***吞吐量。
本发明实施例第一方面提供一种基于GPU的数据流处理方法,包括:
接收第一子任务,所述第一子任务包含第一操作数据和第一操作算子,所述第一操作算子的操作逻辑为第一操作逻辑;
将所述第一子任务和至少一个第二子任务合并为一个合并任务,其中,所述第二子任务的操作逻辑与所述第一操作逻辑相同;
调度图像处理器GPU对所述合并任务进行数据流处理。
结合第一方面,在第一种可能的实现方式中,所述将所述第一子任务和至少一个第二子任务合并为一个合并任务之前,还包括:
确定所述第一子任务中所述第一操作数据的各条数据记录之间的处理无结果依赖关系。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一操作算子处理的数据流为第一数据流;
所述将所述第一子任务和至少一个第二子任务合并为一个合并任务,包括:
判断内核档案中是否包含与所述第一操作算子相同的第二操作算子,其中,所述第二操作算子的操作逻辑与所述第一操作逻辑相同,所述第二操作算子处理的数据流为所述第一数据流;
若所述内核档案中不包含与所述第一操作算子相同的第二操作算子则将所述第一操作算子加入到所述内核档案中,将所述第一子任务和至少一个第二子任务合并为一个合并任务;
若所述内核当中包含与所述第一操作算子相同的第二操作算子,则将所述第一子任务和至少一个第二子任务合并为一个合并任务。
结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述将所述第一操作算子加入到所述内核档案中,包括:
若所述内核档案中有至少一个第一候选操作算子组,则将所述第一操作算子加入其中一个所述第一候选操作算子组;
若所述内核档案中没有所述第一候选操作算子组,则创建所述第一候选操作算子组,将所述第一操作算子加入所述第一候选操作算子组;
所述第一候选操作算子组中的各操作算子的操作逻辑与所述第一操作逻辑相同。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,若所述内核档案中有至少两个第一候选操作算子组,所述将所述第一操作算子加入其中一个所述第一候选操作算子组,包括:
根据第一预设规则从所述至少两个第一候选操作算子组中选择一个第一操作算子组;
将所述第一操作算子加入所述第一操作算子组。
结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,所述第一预设规则为如下任一个规则:
选择操作算子最少的第一候选操作算子组为所述第一操作算子组;
选择各操作算子对应的平均数据量最小的第一候选操作算子组为所
述第一操作算子组。
结合第一方面的第三种可能的实现方式,在第六种可能的实现方式中,所述方法还包括:若所述内核档案中的所述至少一个第一候选操作算子组中均无法加入所述第一操作算子,则根据第二预设规则对所述第一操作算子以及所述至少一个第一候选操作算子组中的各操作算子重新分组。
结合第一方面的第六种可能的实现方式,在第七种可能的实现方式中,所述根据第二预设规则对所述第一操作算子以及所述至少一个第一候选操作算子组中的各操作算子重新分组,包括:
计算所述至少一个第一候选操作算子组中的各操作算子的单位数据的执行代价以及所述第一操作算子的单位数据的执行代价;
将单位数据的执行代价的差值在预设范围内的操作算子存储在同一个所述第一候选操作算子组。
结合第一方面的第四种至第七种可能的实现方式中任一种可能的实现方式,在第八种可能的实现方式中,所述将所述第一子任务和至少一个第二子任务合并为一个合并任务,包括:
当所述第一子任务被触发时,将所述第一操作算子组中的各操作算子的操作逻辑合并为一个合并操作逻辑,并将所述第一操作算子组中的各操作算子对应的子任务的操作数据合并在同一个数据结构中;
根据所述第一操作算子组中的各操作算子对应的子任务的操作数据在所述同一个数据结构中的存储位置、所述第一操作算子组中的各操作算子对应的子任务的个数、每个所述子任务中的数据记录条数和每个数据记录的长度生成元数据信息。
本发明实施例第二方面提供一种基于GPU的数据流处理装置,包括:
接收模块,用于接收第一子任务,所述第一子任务包含第一操作数据和第一操作算子,所述第一操作算子的操作逻辑为第一操作逻辑;
合并模块,用于将所述第一子任务和至少一个第二子任务合并为一个合并任务,其中,所述第二子任务的操作逻辑与所述第一操作逻辑相同;
处理模块,用于调度图像处理器GPU对所述合并任务进行数据流处理。
结合第二方面,在第一种可能的实现方式中,所述合并模块还用于
确定所述第一子任务中所述第一操作数据的各条数据记录之间的处理无结果依赖关系。
结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一操作算子处理的数据流为第一数据流;
所述合并模块包括:
判断单元,用于判断内核档案中是否包含与所述第一操作算子相同的第二操作算子,其中,所述第二操作算子的操作逻辑与所述第一操作逻辑相同,所述第二操作算子处理的数据流为所述第一数据流;
第一合并单元,用于若所述内核档案中不包含与所述第一操作算子相同的第二操作算子则将所述第一操作算子加入到所述内核档案中,将所述第一子任务和至少一个第二子任务合并为一个合并任务;
第二合并单元,用于若所述内核当中包含与所述第一操作算子相同的第二操作算子,则将所述第一子任务和至少一个第二子任务合并为一个合并任务。
结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述第一合并单元具体用于若所述内核档案中有至少一个第一候选操作算子组,则将所述第一操作算子加入其中一个所述第一候选操作算子组;若所述内核档案中没有所述第一候选操作算子组,则创建所述第一候选操作算子组,将所述第一操作算子加入所述第一候选操作算子组;其中,所述第一候选操作算子组中的各操作算子的操作逻辑与所述第一操作逻辑相同。
结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述第一合并单元具体用若所述内核档案中有至少两个第一候选操作算子组,于根据第一预设规则从所述至少两个第一候选操作算子组中选择一个第一操作算子组;将所述第一操作算子加入所述第一操作算子组。
结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述第一预设规则为如下任一个规则:选择操作算子最少的第一候选操作算子组为所述第一操作算子组;选择各操作算子对应的平均数据量最小的第一候选操作算子组为所述第一操作算子组。
结合第二方面的第三种可能的实现方式,在第六种可能的实现方式
中,所述第一合并单元还用于若所述内核档案中的所述至少一个第一候选操作算子组中均无法加入所述第一操作算子,则根据第二预设规则对所述第一操作算子以及所述至少一个第一候选操作算子组中的各操作算子重新分组。
结合第二方面的第六种可能的实现方式,在第七种可能的实现方式中,所述第一合并单元具体用于计算所述至少一个第一候选操作算子组中的各操作算子的单位数据的执行代价以及所述第一操作算子的单位数据的执行代价;将单位数据的执行代价的差值在预设范围内的操作算子存储在同一个所述第一候选操作算子组。
结合第二方面的第四种至第七种可能的实现方式中任一种可能的实现方式,在第八种可能的实现方式中,所述合并模块具体用于当所述第一子任务被触发时,将所述第一操作算子组中的各操作算子的操作逻辑合并为一个合并操作逻辑,并将所述第一操作算子组中的各操作算子对应的子任务的操作数据合并在同一个数据结构中;根据所述第一操作算子组中的各操作算子对应的子任务的操作数据在所述同一个数据结构中的存储位置、所述第一操作算子组中的各操作算子对应的子任务的个数、每个所述子任务中的数据记录条数和每个数据记录的长度生成元数据信息。
本发明实施例第三方面提供一种基于GPU的数据流处理装置,包括:
处理器、存储器和***总线,所述处理器和所述存储器之间通过所述***总线连接并完成相互间的通信;
所述存储器,用于存储计算机执行指令;
所述处理器,用于运行所述计算机执行指令,使所述基于GPU的数据流处理装置执行如第一方面的任一种可能的实现方式的方法。
本发明实施例提供的基于GPU的数据流处理方法和装置,通过将操作逻辑相同的多个子任务合并成一个合并任务,并调用GPU对合并任务进行数据流处理,从而降低GPU的调度频率,减少GPU的调度开销,提高流数据处理***的吞吐量。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实
施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明基于GPU的数据流处理方法实施例一的流程示意图;
图2为本发明基于GPU的数据流处理方法实施例二的流程示意图;
图3为本发明数据合并结果示意图;
图4为本发明基于GPU的数据流处理方法实施例三的流程示意图;
图5为本发明基于GPU的数据流处理装置实施例一的结构示意图;
图6为本发明基于GPU的数据流处理装置实施例二的结构示意图。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了减少GPU的调度开销及提高流处理***吞吐量,本发明通过将可以合并的多个子任务合并为一个合并任务,调度GPU对合并任务进行数据流处理,从而,降低了调度GPU的频率,减少了GPU的调度开销,且进一步地,由于合并任务待处理的数据量变大并被统一处理,从而能够充分利用GPU大规模的并行处理性能,进而提高该***的处理吞吐量。
下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
为了便于描述,本发明下述各实施例中,将CPU当前接收的任务称为“第一子任务”,将第一子任务中包含的待处理数据称为“第一操作数据”,将第一子任务的操作算子称为“第一操作算子”,将第一操作算子的操作逻辑称为“第一操作逻辑”,其中,操作算子是指对某数据流进行何种处理,操作逻辑是指进行何种处理,也就是,操作算子的属性包括两个:1、处理的数据流,2、处理方式;而操作逻辑是指处理方式,因此,不同的操作算子的操作逻辑有可能相同。将GPU内核档案(Kernel Profile)中第一操作算子所在的操作算子组称为“第一操作算子组”,将内核档案中与第一操作算子操作逻辑相同的操作算子所在的组称为“第一候选操作算子组”,其中,内核档案是指用于存储内核信息的集合。将***中待处理的任务中具有操作逻辑与第一操作逻辑相同的任务称为“第二子任务”。将与第一操作算子的操作逻辑相同,并且处理的数据与第一操作算子处理的数据属于同一个数据流的操作算子称为“第二操作算子”。
图1为本发明基于GPU的数据流处理方法实施例一的流程示意图,如图1所示,本实施例的执行主体为CPU,本实施例的方法如下:
S101:接收第一子任务。
在***的内存中,每个数据流均建有一个内存缓冲区,来自同一个数据流的数据存储在同一个内存缓冲区内,当一个内存缓冲区的数据量大于第一预设阈值时,或者,缓冲时间大于第二预设阈值时,流处理***则向CPU发送任务请求(即:第一子任务),请求CPU对该缓冲区中的数据进行处理。其中,第一预设阈值、第二预设阈值的大小具体依据实际应用设置,本发明对此不作限制。
第一子任务包含第一操作数据和第一操作算子,第一操作算子的操作逻辑为第一操作逻辑。第一操作数据即该数据流第一子任务中需要处理的数据,第一操作算子即对第一操作数据进行何种操作,如选择(Selection)操作,映射(Projection)操作等。
S102:将第一子任务和至少一个第二子任务合并为一个合并任务。
其中,第二子任务的操作逻辑与第一操作逻辑相同。
也就是,将操作逻辑相同的子任务合并为一个合并任务。
S103:调度GPU对上述合并任务进行数据流处理。
本实施例中,由于将操作逻辑相同的多个子任务合并为一个合并任务,调度GPU对合并任务进行数据流处理,相比于现有技术中的每个子任务调度一次GPU,降低了调度GPU的频率,减少了GPU的调度开销,并且,由于合并任务待处理的数据量变大,从而能够充分利用GPU大规模的并行处理性能,进而提高该***的处理吞吐量。
在上述实施例中,在执行S102之前,还包括:确定第一子任务中第一操作数据的各条数据记录之间的处理无结果依赖关系。其中,处理无结果依赖是指:第一子任务中的各数据记录可以并行进行处理,每个数据记录的处理结果不会影响其他数据记录的处理结果。例如:选择操作、映射操作等;也就是,只有在第一子任务的第一操作数据的各条数据记录之间的处理无结果依赖关系的前提下,才可以与其他具有相同操作逻辑的子任务进行合并处理。如果第一子任务中第一操作数据的各条数据记录之间的处理结果有依赖,则直接调度GPU对第一子任务进行处理,而不再与其他的子任务进行合并处理。
在上述实施例中,假设,第一操作算子处理的数据流为第一数据流,S102的具体实现方式为:判断内核档案中是否包含与第一操作算子相同的第二操作算子,其中,第二操作算子的操作逻辑与第一操作逻辑相同,第二操作算子处理的数据流为第一数据流,也就是,操作算子相同必须满足两个条件:1、操作逻辑相同;2、处理的数据属于同一个数据流。若GPU内核(Kernel)档案中不包含与上述第一操作算子相同的第二操作算子,则说明***之前尚未执行过第一数据流的子任务,将第一操作算子加入到内核档案中,将第一子任务和至少一个第二子任务合并为一个合并任务。如果内核档案中包含与第一操作算子相同的第二操作算子,则说明***之前处理过第一数据流的子任务,则直接执行将第一子任务和至少一个第二子任务合并为一个合并任务。
进一步地,将第一操作算子加入到内核档案中具体地实现方式如图2所示,图2为本发明基于GPU的数据流处理方法实施例二的流程示意图。
S201:判断内核档案中是否有至少一个第一候选操作算子组。若是,执行S202,若否,执行S205。
其中,第一候选操作算子组中的各操作算子的操作逻辑与第一操作逻辑相同。
S202:判断至少一个第一候选操作算子组是否可以加入第一操作算子。若是,执行S203,若否,执行S204。
具体地,判断第一候选操作算子组是否可以加入第一操作算子的判断方法可根据具体应用而定;例如:对于在处理延时上有严格要求的应用来说,需要考虑在第一候选操作算子组中加入第一操作算子后是否会给该第一候选操作算子组的后续合并任务带来更大的时延代价,即,若将第一操作算子加入到一个第一候选操作算子组后,基于该候选操作算子组的合并任务的预估时延超过该第一候选操作算子组中某个操作算子的最大时延要求,则该第一候选该操作算子组不可以加入第一操作算子。若否,则认为该第一候选操作算子组中可以加入第一操作算子,则确定至少一个第一候选操作算子组可以加入第一操作算子。若内核档案中的所有的第一候选操作算子组中均无法加入第一操作算子,则确定至少一个第一候选操作算子组不可以加入第一操作算子。
S203:将第一操作算子加入到第一操作算子组中。
当只有一个第一候选操作算子组可以加入第一操作算子时,则确定第一候选操作算子组为第一操作算子组,并将第一操作算子加入该第一操作算子组;当有至少两个第一候选操作算子组可以加入第一操作算子时,则根据第一预设规则从上述至少两个第一候选操作算子组中选择一个作为第一操作算子组,将第一操作算子加入第一操作算子组。其中,第一预设规则可以是:从上述至少两个第一候选操作算子组中选择操作算子数目最少的那个第一候选操作算子组为第一操作算子组;或者,从上述至少两个第一候选操作算子组中选择各操作算子对应的平均数据量最小的那个第一候选操作算子组为第一操作算子组。
S204:对至少一个第一候选操作算子组中的各操作算子和第一操作算子重新分组。
若内核档案中的至少一个第一候选操作算子组中均无法加入第一操
作算子,则根据第二预设规则对第一操作算子以及上述至少一个第一候选操作算子组中的各操作算子重新分组。具体地,根据第二预设规则对至少一个第一候选操作算子组中的各操作算子重新分组,包括如下步骤:1)计算至少一个第一候选操作算子组中的各操作算子的单位数据的执行代价以及第一操作算子的执行代价。2)将单位数据的执行代价的差值在预设范围内的操作算子存储在同一个操作算子组中。
通过将单位数据的执行代价的差值在预设范围内的操作算子存储在同一个第一候选操作算子组中,使得GPU各线程在执行时尽量负载均衡。
S205:创建第一候选操作算子组,将第一操作算子加入第一候选操作算子组。
若内核档案中没有上述第一候选操作算子组,则创建第一候选操作算子组,将第一操作算子加入第一候选操作算子组,也就是,第一操作算子是第一候选操作算子组中的第一个操作算子。
在图1或图2所示实施例中,将第一子任务和至少一个第二子任务合并为一个合并任务,具体包括:操作逻辑合并和相应的待处理数据的合并两部分。
当第一子任务被触发后,将第一操作算子组中的所有操作算子的操作逻辑合并为一个合并操作逻辑,并将该组中的各操作算子对应的待处理的操作数据合并在同一个数据结构中。根据所述第一操作算子组中的各操作算子对应的子任务的操作数据在所述同一个数据结构中的存储位置、所述第一操作算子组中的各操作算子对应的子任务的个数、每个所述子任务中的数据记录条数和每个数据记录的长度生成元数据信息。
其中,对于将第一操作算子组中的各操作算子的操作逻辑合并为一个合并操作逻辑,由于第一操作算子组中的各操作逻辑相同,因此,它们的接口定义大致相同,例如:以选择操作算子为例,其统一计算设备架构(Compute Unified Device Architecture,以下简称:CUDA)接口定义可能如下:
“_global_void selection(data,n,result,filter)”
其中“data”为待处理的数据,“n”为“data”中数据记录个数,“n”为大于或等于1的整数,“result”也是一个n维的数组,用以保存
选择操作后的结果,而“filter”为该选择操作算子的过滤函数接口,其代码描述如下:
从而,若“data”中第i(i为小于等于n的正整数)个数据记录满足“fiter”条件,即filter(data[i])结果为true,则“result[i]”为真,否则为假。
对于不同数据流的选择操作算子,它们所处理的数据类型不同以及过滤函数定义也不同。而操作算子合并的结果便是为这些不同的选择操作算子提供统一的接口,使它们对于GPU而言是无差别的单个的操作算子,比如,合并后的选择操作算子通用接口便可以如下定义:
“_global_void MergedSelection(mergedData,n,result,filters);”
其中,此处“mergedData”数据结构包括所有被合并的操作算子所需处理的数据记录以及相应的元数据,“n”为mergedData中所有数据记录的总数目,“result”仍是用以保存选择操作的结果,而“filters”为一个函数数组,依次记录各数据流所对应的过滤函数操作。
由于不同的输入数据流可能具有不同的模式定义,以三个数据流为例,三个数据流的模式定义分别如下:数据流A的模式定义如下:
所以,需要合适的数据结构来保存合并的操作数据以便上述“MergedSelection”接口统一处理。
比如,现需合并三个数据流(如数据流A,数据流B,数据流C),且它们的模式定义如上所述,即它们的数据属性个数,属性类型,数据记录长度及条数均可能不同。为了使得这些数据流在合并后它们各自的数据记录能被无差别访问,同时也需保存一些必要的元数据信息。根据各数据流的操作数据在同一个数据结构中的存储位置、各数据流的子任务的个数、每个子任务中的数据记录条数和每个数据记录的长度生成元数据信息。从而,用以保存数据流合并结果的数据结构可如下“MergedData”的定义如下:
其中,数据域“data”即以字节流形式保存各输入的数据流数据记录且其在GPU内存的存储如图3所示。图3为本发明数据合并结果示意图,
数据流A的数据记录条数为nA,数据流B的数据记录条数为nB,数据流C的数据记录条数为nC。“position”、“count”和“length”域的维度等于合并的数据流个数,因而它们所占空间极小。
基于“MergedData”数据结构,“MergedSelection”通用接口便可以通过以下方式实现:
即对于每个GPU线程,其需处理的数据记录由线程ID决定,同时根据该线程ID确定待处理数据记录所属的数据流以及其相应的元数据信息,如:其在数据流中的起始地址,从而以便正确读出该数据记录,进而调用相应的过滤函数进行处理。“MergedSelection”接口(其它合并接口也类似,如对于“Projection”操作的通用接口为“MergedProjection”)可被预先编译,只需在运行时对其传递具体参数,动态调用执行。从而使得原来多个子任务合并成单一的批量任务。
图4为本发明基于GPU的数据流处理方法实施例三的流程示意图,图4以选择操作为例,如图4所示,本实施例的方法,包括:
S401:收集待合并的各操作算子对应的数据流的输入数据以及相应的元数据信息。
其中,元数据信息为记录个数、记录长度等。
S402:新建“MergedData”对象,并以收集的数据对“MergedData”各数据域赋值。
S403:将“MergedData”对象以及各操作算子的过滤函数作为参数传递给“MergedSelection Kernel”。
S404:调度“MergedSelection”给GPU执行。
图5为本发明基于GPU的数据流处理装置实施例一的结构示意图,本实施例的装置包括接收模块501、合并模块502和处理模块503,其中,接收模块501用于接收第一子任务,上述第一子任务包含第一操作数据和第一操作算子,上述第一操作算子的操作逻辑为第一操作逻辑;合并模块502用于将上述第一子任务和至少一个第二子任务合并为一个合并任务,其中,上述第二子任务的操作逻辑与上述第一操作逻辑相同;处理模块503用于调度图像处理器GPU对上述合并任务进行数据流处理。
本实施例的装置,对应地可用于执行图1所示方法实施例的技术方案,
其实现原理和技术效果类似,在此不再赘述。
在上述实施例中,上述合并模块502还用于确定上述第一子任务中上述第一操作数据的各条数据记录之间的处理无结果依赖关系。
在上述实施例中,上述第一操作算子处理的数据流为第一数据流;上述合并模块502进一步地包括:判断单元、第一合并单元和第二合并单元,其中,判断单元用于判断内核档案中是否包含与上述第一操作算子相同的第二操作算子,其中,上述第二操作算子的操作逻辑与上述第一操作逻辑相同,上述第二操作算子处理的数据流为上述第一数据流;第一合并单元,用于若上述内核档案中不包含与上述第一操作算子相同的第二操作算子则将上述第一操作算子加入到上述内核档案中,将上述第一子任务和至少一个第二子任务合并为一个合并任务;第二合并单元,用于若上述内核当中包含与上述第一操作算子相同的第二操作算子,则将上述第一子任务和至少一个第二子任务合并为一个合并任务。
在上述实施例中,上述第一合并单元具体用于若上述内核档案中有至少一个第一候选操作算子组,则将上述第一操作算子加入其中一个上述第一候选操作算子组,上述第一候选操作算子组中的各操作算子的操作逻辑与上述第一操作逻辑相同;若上述内核档案中没有上述第一候选操作算子组,则创建上述第一候选操作算子组,将上述第一操作算子加入上述第一候选操作算子组。
在上述实施例中,上述第一合并单元具体用若上述内核档案中有至少两个第一候选操作算子组,于根据第一预设规则从上述至少两个第一候选操作算子组中选择一个第一操作算子组;将上述第一操作算子加入上述第一操作算子组。
在上述实施例中,上述第一预设规则为如下任一个规则:选择操作算子最少的第一候选操作算子组为上述第一操作算子组;选择各操作算子对应的平均数据量最小的第一候选操作算子组为上述第一操作算子组。
在上述实施例中,上述第一合并单元还用于若上述内核档案中的上述至少一个第一候选操作算子组中均无法加入上述第一操作算子,则根据第二预设规则对上述第一操作算子以及上述至少一个第一候选操作算子组中的各操作算子重新分组。
在上述实施例中,上述第一合并单元具体用于计算上述至少一个第一候选操作算子组中的各操作算子的单位数据的执行代价以及上述第一操作算子的单位数据的执行代价;将单位数据的执行代价的差值在预设范围内的操作算子存储在同一个上述第一候选操作算子组。
在上述实施例中,上述合并模块502具体用于当上述第一子任务被触发时,将上述第一操作算子组中的各操作算子的操作逻辑合并为一个合并操作逻辑,并将上述第一操作算子组中的各操作算子对应的子任务的操作数据合并在同一个数据结构中;根据上述第一操作算子组中的各操作算子对应的子任务的操作数据在上述同一个数据结构中的存储位置、上述第一操作算子组中的各操作算子对应的子任务的个数、每个上述子任务中的数据记录条数和每个数据记录的长度生成元数据信息。
本实施例的装置,对应地可用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,在此不再赘述。
图6为本发明基于GPU的数据流处理装置实施例二的结构示意图,如图6所示,本实施例的基于GPU的数据流处理装置600包括:处理器601、存储器602和***总线603,其中,上述处理器601和上述存储器602之间通过上述***总线连接并完成相互间的通信;上述存储器602用于存储计算机执行指令6021;上述处理器601用于运行上述计算机执行指令6021,使上述基于GPU的数据流处理装置执行如下的方法:
接收第一子任务,上述第一子任务包含第一操作数据和第一操作算子,上述第一操作算子的操作逻辑为第一操作逻辑;将上述第一子任务和至少一个第二子任务合并为一个合并任务,其中,上述第二子任务的操作逻辑与上述第一操作逻辑相同;调度图像处理器GPU对上述合并任务进行数据流处理。
本实施例的装置,对应地可用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,在此不再赘述。
进一步地,处理器601具体用于确定上述第一子任务中上述第一操作数据的各条数据记录之间的处理无结果依赖关系。
进一步地,上述第一操作算子处理的数据流为第一数据流;处理器601具体用于判断内核档案中是否包含与上述第一操作算子相同的第二操作
算子,其中,上述第二操作算子的操作逻辑与上述第一操作逻辑相同,上述第二操作算子处理的数据流为上述第一数据流;
若上述内核档案中不包含与上述第一操作算子相同的第二操作算子则将上述第一操作算子加入到上述内核档案中,将上述第一子任务和至少一个第二子任务合并为一个合并任务;
若上述内核当中包含与上述第一操作算子相同的第二操作算子,则将上述第一子任务和至少一个第二子任务合并为一个合并任务。
进一步地,处理器601具体用于若上述内核档案中有至少一个第一候选操作算子组,则将上述第一操作算子加入其中一个上述第一候选操作算子组,上述第一候选操作算子组中的各操作算子的操作逻辑与上述第一操作逻辑相同;
若上述内核档案中没有上述第一候选操作算子组,则创建上述第一候选操作算子组,将上述第一操作算子加入上述第一候选操作算子组。
进一步地,若上述内核档案中有至少两个第一候选操作算子组,处理器601具体用于根据第一预设规则从上述至少两个第一候选操作算子组中选择一个第一操作算子组;将上述第一操作算子加入上述第一操作算子组。
进一步地,上述第一预设规则为如下任一个规则:选择操作算子最少的第一候选操作算子组为上述第一操作算子组;选择各操作算子对应的平均数据量最小的第一候选操作算子组为上述第一操作算子组。
进一步地,若上述内核档案中的上述至少一个第一候选操作算子组中均无法加入上述第一操作算子,处理器601具体用于根据第二预设规则对上述第一操作算子以及上述至少一个第一候选操作算子组中的各操作算子重新分组。
进一步地,处理器601具体用于计算上述至少一个第一候选操作算子组中的各操作算子的单位数据的执行代价以及上述第一操作算子的单位数据的执行代价;将单位数据的执行代价的差值在预设范围内的操作算子存储在同一个上述第一候选操作算子组。
进一步地,处理器601具体当上述第一子任务被触发时,将上述第一操作算子组中的各操作算子的操作逻辑合并为一个合并操作逻辑,并将上
述第一操作算子组中的各操作算子对应的子任务的操作数据合并在同一个数据结构中;根据上述第一操作算子组中的各操作算子对应的子任务的操作数据在上述同一个数据结构中的存储位置、上述第一操作算子组中的各操作算子对应的子任务的个数、每个上述子任务中的数据记录条数和每个数据记录的长度生成元数据信息。
本实施例的装置,对应地可用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,在此不再赘述。
本发明实施例还提供一种计算机可读介质,包含计算机执行指令,上述计算机执行指令用于基于GPU的数据流处理装置执行本发明基于GPU的数据流处理方法实施例一至实施例三所述的方法。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (19)
- 一种基于GPU的数据流处理方法,其特征在于,包括:接收第一子任务,所述第一子任务包含第一操作数据和第一操作算子,所述第一操作算子的操作逻辑为第一操作逻辑;将所述第一子任务和至少一个第二子任务合并为一个合并任务,其中,所述第二子任务的操作逻辑与所述第一操作逻辑相同;调度图像处理器GPU对所述合并任务进行数据流处理。
- 根据权利要求1所述的方法,其特征在于,所述将所述第一子任务和至少一个第二子任务合并为一个合并任务之前,还包括:确定所述第一子任务中所述第一操作数据的各条数据记录之间的处理无结果依赖关系。
- 根据权利要求1或2所述的方法,其特征在于,所述第一操作算子处理的数据流为第一数据流;所述将所述第一子任务和至少一个第二子任务合并为一个合并任务,包括:判断内核档案中是否包含与所述第一操作算子相同的第二操作算子,其中,所述第二操作算子的操作逻辑与所述第一操作逻辑相同,所述第二操作算子处理的数据流为所述第一数据流;若所述内核档案中不包含与所述第一操作算子相同的第二操作算子则将所述第一操作算子加入到所述内核档案中,将所述第一子任务和至少一个第二子任务合并为一个合并任务;若所述内核当中包含与所述第一操作算子相同的第二操作算子,则将所述第一子任务和至少一个第二子任务合并为一个合并任务。
- 根据权利要求3所述的方法,其特征在于,所述将所述第一操作算子加入到所述内核档案中,包括:若所述内核档案中有至少一个第一候选操作算子组,则将所述第一操作算子加入其中一个所述第一候选操作算子组;若所述内核档案中没有所述第一候选操作算子组,则创建所述第一候选操作算子组,将所述第一操作算子加入所述第一候选操作算子组;其中,所述第一候选操作算子组中的各操作算子的操作逻辑与所述第 一操作逻辑相同。
- 根据权利要求4所述的方法,其特征在于,若所述内核档案中有至少两个第一候选操作算子组,所述将所述第一操作算子加入其中一个所述第一候选操作算子组,包括:根据第一预设规则从所述至少两个第一候选操作算子组中选择一个第一操作算子组;将所述第一操作算子加入所述第一操作算子组。
- 根据权利要求5所述的方法,其特征在于,所述第一预设规则为如下任一个规则:选择操作算子最少的第一候选操作算子组为所述第一操作算子组;选择各操作算子对应的平均数据量最小的第一候选操作算子组为所述第一操作算子组。
- 根据权利要求4所述的方法,其特征在于,还包括:若所述内核档案中的所述至少一个第一候选操作算子组中均无法加入所述第一操作算子,则根据第二预设规则对所述第一操作算子以及所述至少一个第一候选操作算子组中的各操作算子重新分组。
- 根据权利要求7所述的方法,其特征在于,所述根据第二预设规则对所述第一操作算子以及所述至少一个第一候选操作算子组中的各操作算子重新分组,包括:计算所述至少一个第一候选操作算子组中的各操作算子的单位数据的执行代价以及所述第一操作算子的单位数据的执行代价;将单位数据的执行代价的差值在预设范围内的操作算子存储在同一个所述第一候选操作算子组。
- 根据权利要求5~8任一项所述的方法,其特征在于,所述将所述第一子任务和至少一个第二子任务合并为一个合并任务,包括:当所述第一子任务被触发时,将所述第一操作算子组中的各操作算子的操作逻辑合并为一个合并操作逻辑,并将所述第一操作算子组中的各操作算子对应的子任务的操作数据合并在同一个数据结构中;根据所述第一操作算子组中的各操作算子对应的子任务的操作数据在所述同一个数据结构中的存储位置、所述第一操作算子组中的各操作算 子对应的子任务的个数、每个所述子任务中的数据记录条数和每个数据记录的长度生成元数据信息。
- 一种基于GPU的数据流处理装置,其特征在于,包括:接收模块,用于接收第一子任务,所述第一子任务包含第一操作数据和第一操作算子,所述第一操作算子的操作逻辑为第一操作逻辑;合并模块,用于将所述第一子任务和至少一个第二子任务合并为一个合并任务,其中,所述第二子任务的操作逻辑与所述第一操作逻辑相同;处理模块,用于调度图像处理器GPU对所述合并任务进行数据流处理。
- 根据权利要求10所述的装置,其特征在于,所述合并模块还用于确定所述第一子任务中所述第一操作数据的各条数据记录之间的处理无结果依赖关系。
- 根据权利要求10或11所述的装置,其特征在于,所述第一操作算子处理的数据流为第一数据流;所述合并模块包括:判断单元,用于判断内核档案中是否包含与所述第一操作算子相同的第二操作算子,其中,所述第二操作算子的操作逻辑与所述第一操作逻辑相同,所述第二操作算子处理的数据流为所述第一数据流;第一合并单元,用于若所述内核档案中不包含与所述第一操作算子相同的第二操作算子则将所述第一操作算子加入到所述内核档案中,将所述第一子任务和至少一个第二子任务合并为一个合并任务;第二合并单元,用于若所述内核当中包含与所述第一操作算子相同的第二操作算子,则将所述第一子任务和至少一个第二子任务合并为一个合并任务。
- 根据权利要求12所述的装置,其特征在于,所述第一合并单元具体用于若所述内核档案中有至少一个第一候选操作算子组,则将所述第一操作算子加入其中一个所述第一候选操作算子组;若所述内核档案中没有所述第一候选操作算子组,则创建所述第一候选操作算子组,将所述第一操作算子加入所述第一候选操作算子组;其中,所述第一候选操作算子组中的各操作算子的操作逻辑与所述第一操作逻辑相同。
- 根据权利要求13所述的装置,其特征在于,所述第一合并单元具体用若所述内核档案中有至少两个第一候选操作算子组,于根据第一预设规则从所述至少两个第一候选操作算子组中选择一个第一操作算子组;将所述第一操作算子加入所述第一操作算子组。
- 根据权利要求14所述的装置,其特征在于,所述第一预设规则为如下任一个规则:选择操作算子最少的第一候选操作算子组为所述第一操作算子组;选择各操作算子对应的平均数据量最小的第一候选操作算子组为所述第一操作算子组。
- 根据权利要求13所述的装置,其特征在于,所述第一合并单元还用于若所述内核档案中的所述至少一个第一候选操作算子组中均无法加入所述第一操作算子,则根据第二预设规则对所述第一操作算子以及所述至少一个第一候选操作算子组中的各操作算子重新分组。
- 根据权利要求16所述的装置,其特征在于,所述第一合并单元具体用于计算所述至少一个第一候选操作算子组中的各操作算子的单位数据的执行代价以及所述第一操作算子的单位数据的执行代价;将单位数据的执行代价的差值在预设范围内的操作算子存储在同一个所述第一候选操作算子组。
- 根据权利要求14~17任一项所述的装置,其特征在于,所述合并模块具体用于当所述第一子任务被触发时,将所述第一操作算子组中的各操作算子的操作逻辑合并为一个合并操作逻辑,并将所述第一操作算子组中的各操作算子对应的子任务的操作数据合并在同一个数据结构中;根据所述第一操作算子组中的各操作算子对应的子任务的操作数据在所述同一个数据结构中的存储位置、所述第一操作算子组中的各操作算子对应的子任务的个数、每个所述子任务中的数据记录条数和每个数据记录的长度生成元数据信息。
- 一种基于GPU的数据流处理装置,其特征在于,包括:处理器、存储器和***总线;所述处理器和所述存储器之间通过所述***总线连接并完成相互间的通信;所述存储器,用于存储计算机执行指令;所述处理器,用于运行所述计算机执行指令,使所述基于GPU的数据流处理装置执行如权利要求1至9任一所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/086523 WO2016041126A1 (zh) | 2014-09-15 | 2014-09-15 | 基于gpu的数据流处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105637482A true CN105637482A (zh) | 2016-06-01 |
Family
ID=55532418
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480038261.0A Pending CN105637482A (zh) | 2014-09-15 | 2014-09-15 | 基于gpu的数据流处理方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105637482A (zh) |
WO (1) | WO2016041126A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106686352A (zh) * | 2016-12-23 | 2017-05-17 | 北京大学 | 多gpu平台的多路视频数据的实时处理方法 |
CN111694675A (zh) * | 2019-03-15 | 2020-09-22 | 上海商汤智能科技有限公司 | 任务调度方法及装置、存储介质 |
CN111831425A (zh) * | 2019-04-18 | 2020-10-27 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置及设备 |
CN111899149A (zh) * | 2020-07-09 | 2020-11-06 | 浙江大华技术股份有限公司 | 基于算子融合的图像处理方法和装置、存储介质 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112395234A (zh) * | 2019-08-16 | 2021-02-23 | 阿里巴巴集团控股有限公司 | 一种请求处理方法及装置 |
CN112463158B (zh) * | 2020-11-25 | 2023-05-23 | 安徽寒武纪信息科技有限公司 | 编译方法、装置、电子设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609978A (zh) * | 2012-01-13 | 2012-07-25 | 中国人民解放军信息工程大学 | 基于cuda架构的gpu加速锥束ct图像重建的方法 |
CN102708009A (zh) * | 2012-04-19 | 2012-10-03 | 华为技术有限公司 | 一种基于cuda实现多任务共享gpu的方法 |
EP2620873A1 (en) * | 2012-01-27 | 2013-07-31 | Samsung Electronics Co., Ltd | Resource allocation method and apparatus of GPU |
CN103309889A (zh) * | 2012-03-15 | 2013-09-18 | 华北计算机***工程研究所 | 一种利用gpu协同计算实现实时数据并行压缩的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7598953B2 (en) * | 2004-11-05 | 2009-10-06 | Microsoft Corporation | Interpreter for simplified programming of graphics processor units in general purpose programming languages |
US8136104B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
-
2014
- 2014-09-15 WO PCT/CN2014/086523 patent/WO2016041126A1/zh active Application Filing
- 2014-09-15 CN CN201480038261.0A patent/CN105637482A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609978A (zh) * | 2012-01-13 | 2012-07-25 | 中国人民解放军信息工程大学 | 基于cuda架构的gpu加速锥束ct图像重建的方法 |
EP2620873A1 (en) * | 2012-01-27 | 2013-07-31 | Samsung Electronics Co., Ltd | Resource allocation method and apparatus of GPU |
CN104137075A (zh) * | 2012-01-27 | 2014-11-05 | 三星电子株式会社 | Gpu的资源分配方法和装置 |
CN103309889A (zh) * | 2012-03-15 | 2013-09-18 | 华北计算机***工程研究所 | 一种利用gpu协同计算实现实时数据并行压缩的方法 |
CN102708009A (zh) * | 2012-04-19 | 2012-10-03 | 华为技术有限公司 | 一种基于cuda实现多任务共享gpu的方法 |
Non-Patent Citations (2)
Title |
---|
北京市图形图像学学会: "《图像图形技术研究与应用 2009》", 30 May 2009, 中国传媒大学出版社 * |
徐品 等: "利用GPU进行通用数值计算的研究", 《中国传媒大学学报自然科学版》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106686352A (zh) * | 2016-12-23 | 2017-05-17 | 北京大学 | 多gpu平台的多路视频数据的实时处理方法 |
CN106686352B (zh) * | 2016-12-23 | 2019-06-07 | 北京大学 | 多gpu平台的多路视频数据的实时处理方法 |
CN111694675A (zh) * | 2019-03-15 | 2020-09-22 | 上海商汤智能科技有限公司 | 任务调度方法及装置、存储介质 |
CN111694675B (zh) * | 2019-03-15 | 2022-03-08 | 上海商汤智能科技有限公司 | 任务调度方法及装置、存储介质 |
US11347546B2 (en) | 2019-03-15 | 2022-05-31 | Shanghai Sensetime Intelligent Technology Co., Ltd | Task scheduling method and device, and computer storage medium |
CN111831425A (zh) * | 2019-04-18 | 2020-10-27 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置及设备 |
CN111831425B (zh) * | 2019-04-18 | 2024-07-16 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置及设备 |
CN111899149A (zh) * | 2020-07-09 | 2020-11-06 | 浙江大华技术股份有限公司 | 基于算子融合的图像处理方法和装置、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2016041126A1 (zh) | 2016-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105637482A (zh) | 基于gpu的数据流处理方法和装置 | |
CN104834561B (zh) | 一种数据处理方法及装置 | |
US20220147571A1 (en) | Graph data processing method and apparatus, and system | |
WO2021088419A1 (zh) | 一种多业务请求进程调用fpga设备的方法及相关装置 | |
US8990827B2 (en) | Optimizing data warehousing applications for GPUs using dynamic stream scheduling and dispatch of fused and split kernels | |
CN103262002B (zh) | 优化***调用请求通信 | |
CN103608776A (zh) | 异构型处理设备上的动态工作划分 | |
KR101609079B1 (ko) | 그래픽 프로세싱 유닛에서의 명령 선별 | |
KR20130087257A (ko) | Gpu의 자원 할당을 위한 방법 및 장치 | |
CN111708639A (zh) | 任务调度***及方法、存储介质及电子设备 | |
CN105373432A (zh) | 一种基于虚拟资源状态预测的云计算资源调度方法 | |
CN110851236A (zh) | 一种实时资源调度方法、装置、计算机设备及存储介质 | |
CN107633001A (zh) | 哈希分区优化方法和装置 | |
US9830731B2 (en) | Methods of a graphics-processing unit for tile-based rendering of a display area and graphics-processing apparatus | |
CN116954929A (zh) | 一种实时迁移的动态gpu调度方法及*** | |
US20110185366A1 (en) | Load-balancing of processes based on inertia | |
CN113590315A (zh) | 多显卡大模型渲染方法 | |
CN116069480B (zh) | 一种处理器及计算设备 | |
CN112015533A (zh) | 适用于分布式渲染的任务调度方法和装置 | |
CN113434265A (zh) | 工作流调度方法、服务器和介质 | |
CN112130977B (zh) | 一种任务调度方法、装置、设备及介质 | |
US20230214252A1 (en) | System and method of path execution optimization | |
KR102209526B1 (ko) | 병렬 연산을 통한 단백질-리간드 상호 작용 분석 방법 및 장치 | |
KR20210080749A (ko) | 공간 조인 수행 방법 및 장치 | |
CN110515729A (zh) | 基于图形处理器的图计算节点向量负载平衡方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160601 |
|
RJ01 | Rejection of invention patent application after publication |