CN112306713A - 一种任务的并发计算方法及装置、设备、存储介质 - Google Patents
一种任务的并发计算方法及装置、设备、存储介质 Download PDFInfo
- Publication number
- CN112306713A CN112306713A CN202011190312.5A CN202011190312A CN112306713A CN 112306713 A CN112306713 A CN 112306713A CN 202011190312 A CN202011190312 A CN 202011190312A CN 112306713 A CN112306713 A CN 112306713A
- Authority
- CN
- China
- Prior art keywords
- atomic
- task
- atomic task
- tasks
- determining
- 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
Images
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
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- 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
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了一种任务的并发计算方法及装置、设备、存储介质,其中,该方法包括:获取各原子任务之间无依赖的原子任务集合,其中,所述原子任务集合中的每一原子任务为待处理任务中的对应预设步骤;将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;调用处理器中的线程一一对应地执行所述线程调起队列中的原子任务;监听每一所述原子任务的执行状态;在每一所述原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理完成。
Description
技术领域
本申请实施例涉及但不限于金融科技(Fintech)的信息技术,尤其涉及一种任务的并发计算方法及装置、设备、存储介质。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,然而,由于金融行业的安全性、实时性要求,金融科技也对技术提出了更高的要求。金融科技领域下,并行计算方法存在未充分利用图形处理器(GraphicsProcessing Unit,GPU)的高并行的计算能力的问题,导致任务执行效率不高。
发明内容
有鉴于此,本申请实施例为解决相关技术中存在的至少一个问题而提供一种任务的并发计算方法及装置、设备、存储介质。
本申请实施例的技术方案是这样实现的:
一方面,本申请实施例提供一种任务的并发处理方法,所述方法包括:
获取各原子任务之间无依赖的原子任务集合,其中,所述原子任务集合中的每一原子任务为待处理任务中的对应预设步骤;
将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;
调用处理器中的线程一一对应地执行所述线程调起队列中的原子任务;
监听每一所述原子任务的执行状态;
在每一所述原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理完成。
又一方面,本申请实施例提供一种任务的并发处理装置,所述装置包括:
第一获取模块,用于获取各原子任务之间无依赖的原子任务集合,其中,所述原子任务集合中的每一原子任务为待处理任务中的对应预设步骤;
入队模块,用于将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;
执行模块,用于调用所述处理器中的线程一一对应地执行所述线程调起队列中的原子任务;
监听模块,用于监听每一所述原子任务的执行状态;
确定模块,用于在每一所述原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理完成。
再一方面,本申请实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法中的步骤。
还一方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法中的步骤。
本申请实施例提供的任务的并发处理方法,通过获取各原子任务之间无依赖的原子任务集合;将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;调用处理器中的线程一一对应地执行所述线程调起队列中的原子任务。这样,能够将各原子任务之间无依赖的原子任务放在一个集合中,在保证集合中的原子任务执行时不会相互影响的前提下,通过同时调用多个线程一一对应的执行所述线程调起队列中的原子任务,实现多线程并发的计算原子任务,从而充分利用处理器的高并行计算能力,提高所述原子任务的执行效率。
附图说明
图1为本申请实施例任务的并发处理方法的实现流程示意图;
图2为本申请实施例一种任务的并发计算方法中待处理任务拆分为原子任务及各原子任务间依赖关系的示意图;
图3为本申请实施例一种任务的并发计算方法的实现流程示意图;
图4为本申请实施例一种任务的并发处理装置的组成结构示意图;
图5为本申请实施例中计算机设备的一种硬件实体示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面结合附图和实施例对本申请的技术方案进一步详细阐述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
如果申请文件中出现“第一/第二”的类似描述则增加以下的说明,在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
下面结合附图和实施例对本申请的技术方案进一步详细阐述。
本申请实施例提供一种任务的并发处理方法,图1为本申请实施例任务的并发处理方法的实现流程示意图,如图1所示,该方法包括:
步骤S101,获取各原子任务之间无依赖的原子任务集合,其中,所述原子任务集合中的每一原子任务为待处理任务中的对应预设步骤;
这里,所述原子任务为没有控制逻辑处理,只有计算逻辑的任务。这里,各原子任务之间无依赖的原子任务集合中包括至少一个无依赖的原子任务,所述无依赖的原子任务为不依赖于其他原子任务执行结果的原子任务。
在一些实施例中,一个待处理的任务可以根据业务逻辑的预设步骤被拆解为对应的原子任务,所述原子任务集合中的每一原子任务都对应一个预设步骤。
步骤S102,将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;
这里,由于队列具有先进先出的特点,在将所述原子任务按照特定顺序放入线程调起队列按照特定顺序放入线程调起队列的情况下,在一些实施例中,所述特定顺序可以为优先级顺序,优先级高的原子任务优先放入线程调起队列中。
步骤S103,调用处理器中的线程一一对应地执行所述线程调起队列中的原子任务;
这里,所述处理器可以为能够提供任务处理线程的处理单元,例如,可以为GPU,还可以为CPU。这里,所述线程数量与所述无依赖原子任务集合中的原子任务数量相等,这样,可以使得至少一个原子任务与至少一个线程一一对应,保证了并发的处理所述原子任务。
这里,调用线程可以有以下两种方式,第一种方式可以认为是直接调用的方式,即通过CPU直接调用线程;第二种方式可以认为是通过接口调起的方式,即CPU通过接口调起线程,例如,CPU通过计算机统一设备架构接口(Computer Unified Device Architecture,CUDA)接口调起GPU中的线程执行所述线程调起队列中的原子任务。
步骤S104,监听每一所述原子任务的执行状态;
这里,所述原子任务的执行状态在调用所述处理器的处理单元中进行维护,例如,可以在CPU中维护。所述执行状态包括:未执行状态、执行中状态和已完成状态。所述原子任务的初始状态为未执行状态。
步骤S105,在每一所述原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理完成。
举例说明,图2为本申请实施例一种任务的并发计算方法中待处理任务拆分为原子任务及各原子任务间依赖关系的示意图,如图2所示,一个待处理任务拆分成了10个原子任务N{A1,A2,A3…,A10},图中的每个节点表示一个原子任务,原子任务上标注的数值表示该原子任务计算的数据量。箭头表示节点之间的依赖关系,例如节点1与节点5之间存在依赖关系,节点2与节点6之间存在依赖关系,节点2与节点7之间存在依赖关系等等,以节点1与节点5之间存在依赖关系为例进行说明,节点1箭头指向节点5表示原子任务1执行完成后才能执行原子任务5,即原子任务5开始执行依赖原子任务1执行完成。
基于图2来说明任务的并发计算方法包括如下步骤:首先,获取各原子任务之间无依赖的原子任务集合;可以为从所述10个原子任务中确定无依赖的原子任务1至4,此时,第一次处理的所述无依赖的原子任务集合为M{A1,A2,A3,A4},即,集合M为集合N的子集。其次,可以给集合M中的原子任务确定执行的优先级顺序,则将所述原子任务集合中的原子任务按照优先级顺序放入线程调起队列中,以保证原子任务A1,A2,A3,A4被处理的顺序。再次,为所述原子任务A1,A2,A3,A4分配4个可以调用的线程,每一线程与所述原子任务一一对应。然后,在处理过程中,调用所述处理器的处理单元监听所述原子任务的执行状态。最后,在所述原子任务A1,A2,A3,A4的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理的无依赖的原子任务1至4处理完成。
本申请实施例提供的任务的并发处理方法,通过获取各原子任务之间无依赖的原子任务集合;将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;调用处理器中的线程一一对应地执行所述线程调起队列中的原子任务。这样,能够将各原子任务之间无依赖的原子任务放在一个集合中,在保证集合中的原子任务执行时不会相互影响的前提下,通过同时调用多个线程一一对应的执行所述线程调起队列中的原子任务,实现多线程并发的计算原子任务,从而充分利用处理器的高并行计算能力,提高所述原子任务的执行效率。
本申请实施例提供一种任务的并发处理方法,该方法包括:
步骤S201,根据所述待处理任务中的预设步骤,将所述待处理任务拆解为至少一个原子任务,得到第一原子任务集合;
这里,对所述待处理任务的拆解在CPU中进行。例如,Ai表示编号为i的原子任务,则所述待处理任务可被拆分为原子任务集合N{A1,A2,A3…,Ai}。
举例说明,如图2所示,将待处理任务拆解为10个原子任务,得到第一原子任务集合N{A1,A2,A3,A4,A5,A6,A7,A8,A9,A10}。
步骤S202,在所述第一原子任务集合中,确定各所述原子任务之间的依赖关系;
这里,所述依赖关系为原子任务Aj开始执行依赖于原子任务Ai执行完成,记为Ai→Aj。
举例说明,如图2所示,任务可拆分原子任务集合N{A1,A2,A3,A4,A5,A6,A7,A8,A9,A10},存在原子任务间的依赖关系A1→A5,A5→A8,A2→A6,A2→A7,A3→A7,A7→A9,A7→A10。即,原子任务1执行完成才能开始执行原子任务5,原子任务5执行完成才能执行原子任务8,原子任务2执行完成才能执行原子任务6和原子任务7,原子任务3执行完成才能执行原子任务7,原子任务7执行完成才能执行原子任务9和原子任务10。
在一些实施例中,将所述原子任务Ai与Aj间的依赖关系(Relation)记为公式(1);
当原子任务Aj依赖于原子任务Ai时,Relation(Ai,Aj)=1,否则,Relation(Ai,Aj)=0。举例说明,如图2所示,Relation(A1,A5)=1,Relation(A1,A2)=0,Relation(A5,A1)=0。
步骤S203,在所述第一原子任务集合中,将无所述依赖关系的原子任务,确定为所述无依赖的原子任务集合;
举例说明,如图2所示,确定的所述无依赖的原子任务集合为M{A1,A2,A3,A4}。
步骤S204,将除所述无依赖的原子任务集合之外的其他原子任务,确定为第二原子任务集合;
举例说明,如图2所示,确定为第二原子任务集合为L{A5,A6,A7,A8,A9,A10}。
步骤S205,获取各原子任务之间无依赖的原子任务集合,其中,所述原子任务集合中的每一原子任务为待处理任务中的对应预设步骤;
步骤S206,将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;
步骤S207,调用处理器中的线程一一对应地执行所述线程调起队列中的原子任务;
步骤S208,监听每一所述原子任务的执行状态;
步骤S209,在每一所述原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理完成;
步骤S210,在所述无依赖的原子任务集合中每一所述原子任务的执行状态为已完成状态的情况下,获取第二原子任务集合;
步骤S211,在所述第二原子任务集合中,确定各所述原子任务之间的依赖关系;
举例说明,如图2所示,确定第二原子任务集合为L{A5,A6,A7,A8,A9,A10}中各个原子任务之间的依赖关系A5→A8,A7→A9,A7→A10。
步骤S212,在所述第二原子任务集合中,将无所述依赖关系的原子任务,确定为所述无依赖的原子任务集合;
举例说明,遍历原子任务集合L{A5,A6,A7,A8,A9,A10},构建新的无依赖原子任务集合T1{A5,A6,A7}。
在一些实施例中,所述方法还包括:在监听到所述无依赖的原子任务集合中的每一原子任务执行完成的情况下,将所述第二原子任务集合中无所述依赖关系的原子任务增加至所述无依赖的原子任务集合;将增加原子任务后的集合确定为所述无依赖的原子任务集合。
举例说明,如图2所示,监听到无依赖的原子任务集合为M{A1,A2,A3,A4}中的原子任务A1被GPU调起执行完成,CPU在原子任务调用关系中擦除Ai的数据,此时集合中不再存在已执行的原子任务Ai。将第二原子任务集合为L{A5,A6,A7,A8,A9,A10}中无依赖关系的A5添加至无依赖的原子任务集合M{A5,A2,A3,A4},并将添加了原子任务A5后的集合确定为所述无依赖的原子任务集合。
步骤S213,获取各原子任务之间无依赖的原子任务集合,其中,所述原子任务集合中的每一原子任务为待处理任务中的对应预设步骤;
步骤S214,将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;
举例说明,计算无依赖原子任务集合T{A5,A6,A7}中,每一原子任务的优先值,按照优先值从大到小的顺序将所述原子任务放入线程调起队列。
步骤S215,调用处理器中的线程一一对应地执行所述线程调起队列中的原子任务;
举例说明,调用3个线程处理原子任务A5,A6,A7,若此时可调用的线程数量大于3个,释放多余线程;若此时可调用的线程数量小于3个,增加线程以满足所需的3个线程。
在一些实施例中,若所需的线程数量大于可调用的线程,例如,当GPU暂无线程资源可被调用时,原子任务需要在队列中等待。在有线程被释放时,按照队列中等待的所述原子任务对应的优先值的大小,优先执行优先值大的原子任务。
步骤S216,监听每一所述原子任务的执行状态;
步骤S217,在每一所述原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理完成;
步骤S218,将除所述无依赖的原子任务集合之外的其他原子任务,确定为第三原子任务集合;
举例说明,如图2所示,第三原子任务集合为X{A8,A9,A10}。
这里,需要说明的是,所述步骤S218可以在所述步骤S213至步骤S217之前执行,也可以在所述步骤S213至步骤S217执行完成之后执行。
步骤S219,在所述第三原子任务集合中不存在原子任务的情况下,且从所述第二原子任务集合中确定的无依赖的原子任务集合中每一原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务处理完成。
在一些实施例中,CPU通过CUDA接口查询每个原子任务的执行情况,直到所有原子任务都已执行完成,则待处理任务处理完成。
在一些实施例中,在所述步骤S206之前,所述方法还包括:
步骤S2061A,根据所述原子任务出度对应的权重、所述原子任务集合中的原子任务个数、每一所述原子任务对应的数据量和所述计算数据量对应的权重,确定原子任务优先值;
这里,所述原子任务的出度具体表示为在原子任务关系中,需要等待原子任务执行完才能执行的原子任务的个数。
这里,每一原子任务对应一个计算数量,记Wi表示原子任务Ai的计算数据量大小。例如,图2所示,W2=100,W3=50。
举例说明,将原子任务的执行优先值Pi的计算公式定义为公式(2):
其中,Pi为原子任务的优先值;a为原子任务出度Qi在计算原子任务优先值公式中的权重;m为无依赖原子任务集合M中的原子任务的个数;Wj为集合M中第j个原子任务Aj的计算数据量,m≥j≥1;Wi表示原子任务Ai的计算数据量;b为原子任务的数据量在计算原子任务优先值公式中的权重。
这里,为原子任务集合M平均计算数据量除以原子任务Ai数据计算量得到的倍数。可以看出,依赖原子任务Ai先执行的原子任务数量越多且原子任务Ai数据计算量在原子任务集合数据计算总量中所占比例越小,其执行优先值Pi就越高。
举例说明,如图2所示,a=b=1,对于原子任务集合M{A1,A2,A3,A4},计算得到集合中原子任务Ai的优先值Pi分别为式(3)至式(6):
步骤S2062A,根据所述原子任务优先值,确定所述特定顺序。
这里,所述原子任务的优先值代表所述原子任务进入线程调起队列的顺序,即,入队顺序。
在一些实施例中,按照Pi从大到小依次将集合M中的原子任务入队,入队顺序依次为A2,A3,A1和A4。
在一些实施例中,在所述步骤S206之前,所述方法还包括:
步骤S2061B,根据原子任务的出度或所述原子任务的计算数据量,确定原子任务优先值;
这里,所述原子任务的出度越大,表示关联的任务量越多。
在一些实施例中,根据所述原子任务的出度,确定原子任务的优先值时,出度越大,优先度越高。举例说明,出度为2的原子任务对应的优先值,大于出度为1的原子任务对应的优先值。
在一些实施例中,在所述步骤S2061B之前,所述方法还包括:
步骤S20611,根据所述依赖关系,确定所述原子任务的出度;
在一些实施例中,将所述原子任务间的依赖关系用出度表示,记为Qi,所述依赖关系举例说明,如图2所示,原子任务A2的出度Q2=2,表示由2个原子任务依赖于A2,即原子任务A6和原子任务A7依赖于原子任务A2。
步骤S2062B,根据所述原子任务优先值,确定所述特定顺序。
本申请实施例提供的任务的并发处理方法,一方面,在所述第一原子任务集合中,确定各所述原子任务之间的依赖关系;在所述第一原子任务集合中,将无所述依赖关系的原子任务,确定为所述无依赖的原子任务集合。这样,能够根据原子任务之间的依赖关系,构建出无依赖原子任务集合,确保并发执行所述无依赖集合中的原子任务时不会互相影响;另一方面,在所述第二原子任务集合中,将无所述依赖关系的原子任务,确定为所述无依赖的原子任务集合,能够在所有未执行的原子任务中,找到无依赖的原子任务,确定无依赖的原子任务集合,通过多线程并发执行所述无依赖的原子任务集合中的原子任务,提高任务的并发处理能力。最后,通过循环执行确定无依赖的原子任务集合与多线程并发执行原子任务,充分利用处理器的高并行能力,提高所述原子任务的执行效率。
并行计算为将一个任务拆分成若干原子任务,每个原子任务都有各自的计算数据且原子任务间执行顺序有一定的依赖关系。并行计算时,按照原子任务执行的依赖关系与特定的顺序执行计算,从而完成所有原子任务的计算,进而完成整个任务的执行。如图2所示,一个任务拆分成了10个原子任务,图中的每个节点表示一个原子任务,原子任务上标注的数值表示该原子任务计算的数据量。节点1箭头指向节点5表示原子任务1执行完成后才能执行原子任务5,即原子任务5开始执行依赖原子任务1执行完成。
相关技术中,对于待处理任务的处理过程为:
步骤S11,将所述待处理任务拆解为原子任务,并维护所述原子任务之间的依赖关系;
这里,所述原子任务为没有控制逻辑处理,只有计算逻辑的任务。这里,对所述待处理任务的拆解在CPU中进行。
步骤S12,记录所述原子任务的执行状态;
这里,所述原子任务的执行状态在CPU中维护,所述执行状态包括:未执行状态、执行中状态和已完成状态。所述原子任务的初始状态为未执行状态。
步骤S13,根据特定读取顺序遍历所述原子任务,其中,所述特定读取顺序为以下之一:广度优先顺序和深度优先顺序;
步骤S14,调用计算机统一设备架构接口计算所述原子任务;
这里,所述计算机统一设备架构接口(Computer Unified Device Architecture,CUDA)是由Nvidia公司在2007年推出的专门用于GPU通用计算的并行架构,通过提供硬件的直接访问接口来实现对GPU的访问。这里,计算所述原子任务可以从一个无依赖的原子任务开始。这里,所述无依赖的原子任务为不依赖于其他原子任务执行结果的原子任务。例如,可以从图2中无依赖的原子任务1、原子任务2、原子任务3和原子任务4中的任意一个原子任务开始。
这里,计算所述原子任务可以按照遍历的顺序依次计算,待原子任务计算完成后,将计算结果返回到CPU中。在CPU中对所述原子任务的执行状态进行控制和维护。在所述原子任务都计算完成时,结束对待处理任务的处理过程。
然而,相关技术中,由于在计算所述原子任务的过程中,按照遍历的顺序依次计算,所以未充分利用GPU的高并行的计算能力,导致任务执行效率不高。
为解决相关技术中存在的所述未充分利用GPU的高并行的计算能力,导致任务执行效率不高的问题,本申请实施例提供了一种任务的并发计算方法,该方法包括:
图3为本申请实施例一种任务的并发计算方法的实现流程示意图,如图3所示,该方法包括:
步骤S301,将所述待处理任务拆解为原子任务;
这里,对所述待处理任务的拆解在CPU中进行。例如,Ai表示编号为i的原子任务,则所述待处理任务可被拆分为原子任务集合N{A1,A2,A3…,Ai,...,}。这里,每一原子任务对应一个计算数量,记Wi表示原子任务Ai的计算数据量大小。例如,图2所示,W2=100,W3=50。
步骤S302,确定所述原子任务之间的依赖关系;
这里,所述依赖关系为原子任务Aj开始执行依赖于原子任务Ai执行完成,记为Ai→Aj。
举例说明,如图2所示,任务可拆分原子任务集合N{A1,A2,A3,A4,A5,A6,A7,A8,A9,A10},存在原子任务间的依赖关系A1→A5,A5→A8,A2→A6,A2→A7,A3→A7,A7→A9,A7→A10。
举例说明,如图2所示,原子任务1执行完成才能开始执行原子任务5,原子任务5执行完成才能执行原子任务8,原子任务2执行完成才能执行原子任务6和原子任务7,原子任务3执行完成才能执行原子任务7,原子任务7执行完成才能执行原子任务9和原子任务10。
在一些实施例中,将所述原子任务Ai与Aj间的依赖关系记为当原子任务Aj依赖于原子任务Ai时,Relation(Ai,Aj)=1,否则,Relation(Ai,Aj)=0。举例说明,如图2所示,Relation(A1,A5)=1,Relation(A1,A2)=0,Relation(A5,A1)=0。
在一些实施例中,将所述原子任务间的依赖关系用出度表示,记为Qi,所述依赖关系举例说明,如图2所示,原子任务A2的出度Q2=2,表示由2个原子任务依赖于A2,即原子任务A6和原子任务A7依赖于原子任务A2。
步骤S303,记录所述原子任务的执行状态;
这里,所述原子任务的执行状态在CPU中维护,所述执行状态包括:未执行状态、执行中状态和已完成状态。所述原子任务的初始状态为未执行状态。
步骤S304,构建无依赖原子任务集合;
这里,所述无依赖原子任务集合为不依赖于其他原子任务先执行的原子任务。
在一些实施例中,遍历所有未执行的原子任务,找到无依赖原子任务集合M{A1,A2,A3,...,Am},其中,集合M为集合N的子集。
在一些实施例中,在所述步骤S304,构建无依赖原子任务集合之后,所述方法还包括:将所述无依赖原子任务集合中的原子任务按照特定顺序放入线程调起队列中;调用GPU中的线程执行所述原子任务,其中,所述线程数量与所述无依赖原子任务集合中的原子任务数量相等。
在一些实施例中,在GPU暂无线程资源可被调用的情况下,未处理的原子任务需要在队列中等待。
在一些实施例中,为使GPU资源得到充分利用,可以对于原子任务集合M{A1,A2,A3…,Am}中的原子任务进行入队排序。
在一些实施例中,所述特定顺序可以为优先级顺序,优先级高的原子任务优先放入线程调起队列中。
在一些实施例中,可以根据原子任务的出度Qi确定所述优先级顺序,Qi越大表示原子任务Ai的被依赖程度越高,执行的优先级越高。如此,可以使得待处理任务执行效率提升明显。
在一些实施例中,可以根据所述原子任务的计算数据量确定所述优先级顺序,计算数据量小的原子任务优先执行,也可以使得待处理任务执行效率提升明显。
在一些实施例中,所述优先级顺序可以根据原子任务的出度Qi和计算数据量共同确定,将原子任务的执行优先值Pi的计算公式定义为公式(2):
其中,Pi为原子任务的优先值;a为原子任务出度Qi在计算原子任务优先值公式中的权重;m为无依赖原子任务集合M中的原子任务的个数;Wj为集合M中第j个原子任务Aj的计算数据量,m≥j≥1;Wi表示原子任务Ai的计算数据量;b为原子任务的数据量在计算原子任务优先值公式中的权重。
这里,为原子任务集合M平均计算数据量除以原子任务Ai数据计算量得到的倍数。可以看出,依赖原子任务Ai先执行的原子任务数量越多且原子任务Ai数据计算量在原子任务集合数据计算总量中所占比例越小,其执行优先值Pi就越高。
举例说明,如图2所示,a=b=1,对于原子任务集合M{A1,A2,A3,A4},计算得到集合中原子任务Ai的优先值Pi分别为式(7)至式(10):
按照Pi从大到小依次将集合M中的原子任务入队,入队顺序依次为A2,A3,A1和A4。
步骤S305,监听所述原子任务的执行状态;
在一些实施例中,CPU通过CUDA接口查询每个原子任务的执行状态,并维护每个原子任务的执行状态。
在一些实施例中,在监听到原子任务Ai被GPU调起执行完成的情况下,分步计算所述原子任务。这里,所述分布计算所述原子任务为:在监听到原子任务Ai被GPU调起执行完成的情况下,在原子任务调用关系中删除已执行原子任务,构建第二无依赖原子任务集合,其中,所述第二无依赖原子任务集合为未执行的无依赖原子任务集合。
举例说明,监听到原子任务Ai被GPU调起执行完成,CPU在原子任务调用关系中擦除Ai的数据,此时集合中不再存在已执行的原子任务Ai。重新遍历未执行的原子任务集合U{A1,A2,A3…,An},构建新的无依赖原子任务集合U,重复步骤S304,直到所有原子任务都已执行完成。
步骤S306,判断任务是否均已完成。
这里,在所有原子任务都已完成的情况下,确定所述待处理任务处理完成。
在一些实施例中,当CPU通过CUDA接口查询所有原子任务都已完成,则计算结束。
举例说明,如图2所示,首先得到无依赖原子任务集合M,将集合M中的原子任务依次放入线程调起队列中;然后,按照队列的入队顺序,通过CUDA接口依次调起GPU中的线程进行计算,调起的线程数为原子任务的个数;最后,将已调起线程处理的节点从队列中移除。
本申请实施例提供的并发计算方法,一方面,通过在监听到原子任务Ai被GPU调起执行完成的情况下,分步计算所述原子任务,并且所述线程数量与所述无依赖原子任务集合中的原子任务数量相等。这样,能够通过多线程并发计算原子任务,充分利用GPU的高并行的计算能力,提高所述原子任务的执行效率,从而提高待处理任务的执行效率。另一方面,通过根据至少以下之一:原子任务的出度Qi和原子任务的计算数据量确定所述优先级顺序,并通过根据优先值从大到小依次放入线程调起队列中。这样,能够满足在GPU资源有限的情况下,提高并行计算的效率。
基于前述的实施例,本申请实施例提供一种任务的并发处理装置,该装置包括所包括的各单元、以及各单元所包括的各模块,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)或现场可编程门阵列(FPGA)等。
图4为本申请实施例一种任务的并发处理装置的组成结构示意图,如图4所示,所述装置400包括第一获取模块401、入队模块402、执行模块403、监听模块404和第一确定模块405,其中:
第一获取模块401,用于获取各原子任务之间无依赖的原子任务集合,其中,所述原子任务集合中的每一原子任务为待处理任务中的对应预设步骤;
入队模块402,用于将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;
执行模块403,用于调用所述处理器中的线程一一对应地执行所述线程调起队列中的原子任务;
监听模块404,用于监听每一所述原子任务的执行状态;
第一确定模块405,用于在每一所述原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理完成。
在一些实施例中,所述装置400,还包括分解模块、第二确定模块、第三确定模块和第四确定模块,其中:分解模块,用于根据所述待处理任务中的预设步骤,将所述待处理任务拆解为至少一个原子任务,得到第一原子任务集合;第二确定模块,用于在所述第一原子任务集合中,确定各所述原子任务之间的依赖关系;第三确定模块,用于在所述第一原子任务集合中,将无所述依赖关系的原子任务,确定为所述无依赖的原子任务集合;第四确定模块,用于将除所述无依赖的原子任务集合之外的其他原子任务,确定为第二原子任务集合。
在一些实施例中,所述装置400,还包括第二获取模块、第五确定模块和第六确定模块,其中:第二获取模块,用于在所述无依赖的原子任务集合中每一所述原子任务的执行状态为已完成状态的情况下,获取第二原子任务集合;第五确定模块,用于在所述第二原子任务集合中,确定各所述原子任务之间的依赖关系;第六确定模块,用于在所述第二原子任务集合中,将无所述依赖关系的原子任务,确定为所述无依赖的原子任务集合。
在一些实施例中,所述装置400,还包括第七确定模块和第八确定模块,其中:第七确定模块,用于将除所述无依赖的原子任务集合之外的其他原子任务,确定为第三原子任务集合;第八确定模块,用于在所述第三原子任务集合中不存在原子任务的情况下,且从所述第二原子任务集合中确定的无依赖的原子任务集合中每一原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务处理完成。
在一些实施例中,所述装置400,还包括第九确定模块和第十确定模块,其中:第九确定模块,用于根据原子任务的出度或所述原子任务的计算数据量,确定原子任务优先值;第十确定模块,用于根据所述原子任务优先值,确定所述特定顺序。
在一些实施例中,所述第九确定模块还用于:根据所述原子任务出度对应的权重、所述原子任务集合中的原子任务个数、每一所述原子任务对应的数据量和所述计算数据量对应的权重,确定原子任务优先值。
在一些实施例中,所述装置400,还包括第十一确定模块,其中:第十一确定模块,根据所述依赖关系,确定所述原子任务的出度。
以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的任务的并发处理方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read OnlyMemory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
对应地,本申请实施例提供一种计算机设备,包括存储器和处理器所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法中的步骤。
对应地,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法中的步骤。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,图5为本申请实施例中计算机设备的一种硬件实体示意图,如图5所示,该计算机设备500的硬件实体包括:处理器501、通信接口502和存储器503,其中
处理器501通常控制设备500的总体操作。
通信接口502可以使设备通过网络与其他终端或服务器通信。
存储器503配置为存储由处理器501可执行的指令和应用,还可以缓存待处理器501以及设备500中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random Access Memory,RAM)实现。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台设备(可以是个人计算机、服务器等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种任务的并发处理方法,其特征在于,所述方法包括:
获取各原子任务之间无依赖的原子任务集合,其中,所述原子任务集合中的每一原子任务为待处理任务中的对应预设步骤;
将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;
调用处理器中的线程一一对应地执行所述线程调起队列中的原子任务;
监听每一所述原子任务的执行状态;
在每一所述原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理完成。
2.根据权利要求1所述的方法,其特征在于,在所述获取各原子任务之间无依赖的原子任务集合之前,所述方法还包括:
根据所述待处理任务中的预设步骤,将所述待处理任务拆解为至少一个原子任务,得到第一原子任务集合;
在所述第一原子任务集合中,确定各所述原子任务之间的依赖关系;
在所述第一原子任务集合中,将无所述依赖关系的原子任务,确定为所述无依赖的原子任务集合;
将除所述无依赖的原子任务集合之外的其他原子任务,确定为第二原子任务集合。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述无依赖的原子任务集合中每一所述原子任务的执行状态为已完成状态的情况下,获取第二原子任务集合;
在所述第二原子任务集合中,确定各所述原子任务之间的依赖关系;
在所述第二原子任务集合中,将无所述依赖关系的原子任务,确定为所述无依赖的原子任务集合。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
将除所述无依赖的原子任务集合之外的其他原子任务,确定为第三原子任务集合;
在所述第三原子任务集合中不存在原子任务的情况下,且从所述第二原子任务集合中确定的无依赖的原子任务集合中每一原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务处理完成。
5.根据权利要求1至4任一项所述的方法,其特征在于,在所述将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列之前,所述方法还包括:
根据原子任务的出度或所述原子任务的计算数据量,确定原子任务优先值;
根据所述原子任务优先值,确定所述特定顺序。
6.根据权利要求1至4任一项所述的方法,其特征在于,在所述将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列之前,所述方法还包括:
根据所述原子任务出度对应的权重、所述原子任务集合中的原子任务个数、每一所述原子任务对应的数据量和所述计算数据量对应的权重,确定原子任务优先值;
根据所述原子任务优先值,确定所述特定顺序。
7.根据权利要求5所述的方法,其特征在于,在所述根据原子任务的出度或所述原子任务的计算数据量,确定原子任务优先值之前,所述方法包括:
根据所述依赖关系,确定所述原子任务的出度。
8.一种任务的并发处理装置,其特征在于,所述装置包括:
第一获取模块,用于获取各原子任务之间无依赖的原子任务集合,其中,所述原子任务集合中的每一原子任务为待处理任务中的对应预设步骤;
入队模块,用于将所述原子任务集合中的原子任务按照特定顺序放入线程调起队列;
执行模块,用于调用所述处理器中的线程一一对应地执行所述线程调起队列中的原子任务;
监听模块,用于监听每一所述原子任务的执行状态;
确定模块,用于在每一所述原子任务的执行状态均为已完成状态的情况下,确定对所述待处理任务的并发处理完成。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7任一项所述方法中的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至7任一项所述方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011190312.5A CN112306713A (zh) | 2020-10-30 | 2020-10-30 | 一种任务的并发计算方法及装置、设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011190312.5A CN112306713A (zh) | 2020-10-30 | 2020-10-30 | 一种任务的并发计算方法及装置、设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112306713A true CN112306713A (zh) | 2021-02-02 |
Family
ID=74332800
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011190312.5A Pending CN112306713A (zh) | 2020-10-30 | 2020-10-30 | 一种任务的并发计算方法及装置、设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112306713A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113296966A (zh) * | 2021-05-21 | 2021-08-24 | 中国邮政储蓄银行股份有限公司 | 数据处理方法及装置 |
CN114647464A (zh) * | 2022-05-19 | 2022-06-21 | 恒生电子股份有限公司 | 应用的并行启动处理方法、装置及电子设备 |
CN115292025A (zh) * | 2022-09-30 | 2022-11-04 | 神州数码融信云技术服务有限公司 | 任务调度方法及装置、计算机设备及计算机可读存储介质 |
-
2020
- 2020-10-30 CN CN202011190312.5A patent/CN112306713A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113296966A (zh) * | 2021-05-21 | 2021-08-24 | 中国邮政储蓄银行股份有限公司 | 数据处理方法及装置 |
CN114647464A (zh) * | 2022-05-19 | 2022-06-21 | 恒生电子股份有限公司 | 应用的并行启动处理方法、装置及电子设备 |
CN115292025A (zh) * | 2022-09-30 | 2022-11-04 | 神州数码融信云技术服务有限公司 | 任务调度方法及装置、计算机设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112306713A (zh) | 一种任务的并发计算方法及装置、设备、存储介质 | |
Rimal et al. | Workflow scheduling in multi-tenant cloud computing environments | |
US8914805B2 (en) | Rescheduling workload in a hybrid computing environment | |
US8739171B2 (en) | High-throughput-computing in a hybrid computing environment | |
Willhalm et al. | Putting intel® threading building blocks to work | |
US8392920B2 (en) | Parallel query engine with dynamic number of workers | |
US9973512B2 (en) | Determining variable wait time in an asynchronous call-back system based on calculated average sub-queue wait time | |
JP2012511204A (ja) | リソースを最適化するためのタスク再編成方法 | |
CN113535367A (zh) | 任务调度方法及相关装置 | |
US20150205633A1 (en) | Task management in single-threaded environments | |
CN114610474A (zh) | 一种异构超算环境下多策略的作业调度方法及系统 | |
CN111708639A (zh) | 任务调度系统及方法、存储介质及电子设备 | |
CN116708451B (zh) | 一种边云协同调度方法及系统 | |
AU2009255465B2 (en) | Blocking and bounding wrapper for thread-safe data collections | |
CN111124644B (zh) | 任务调度资源的确定方法、装置及系统 | |
CN116048721A (zh) | 一种gpu集群的任务分配方法、装置、电子设备和介质 | |
CN114490123A (zh) | 一种任务处理方法、装置及电子设备和存储介质 | |
CN112395062A (zh) | 任务处理方法、装置、设备及计算机可读存储介质 | |
TW200905567A (en) | Notifying user mode scheduler of blocking events | |
CN110837419A (zh) | 基于弹性批处理的推理引擎系统、方法及电子设备 | |
WO2019134084A1 (zh) | 代码执行方法、装置、终端设备及计算机可读存储介质 | |
Wang et al. | A physical and virtual compute cluster resource load balancing approach to data-parallel scientific workflow scheduling | |
Zhao et al. | Load balancing non-uniform parallel computations | |
Lu et al. | Developing a concurrent service orchestration engine in ccr | |
Hou et al. | Taskworks: A task engine for empowering asynchronous operations in hpc applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |