CN115729688B - 处理器的多线程调度方法、装置、电子设备和存储介质 - Google Patents
处理器的多线程调度方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN115729688B CN115729688B CN202211496580.9A CN202211496580A CN115729688B CN 115729688 B CN115729688 B CN 115729688B CN 202211496580 A CN202211496580 A CN 202211496580A CN 115729688 B CN115729688 B CN 115729688B
- Authority
- CN
- China
- Prior art keywords
- communication
- data
- thread
- communication thread
- notification message
- 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.)
- Active
Links
Abstract
本公开提供了一种处理器的多线程调度方法,涉及计算机技术领域,尤其涉及人工智能和深度学习领域。具体实现方案为:响应于计算线程发起的传输第一数据的第一通知消息,使用第一通信线程传输第一数据;响应于第一通信线程发起的传输第一数据的第二通知消息,在第一时段使用第二通信线程传输第一数据;以及响应于计算线程发起的传输第二数据的第三通知消息,在第二时段使用第一通信线程传输第二数据;其中,第一时段与第二时段彼此重叠。本公开还提供了一种处理器的多线程调度装置、电子设备和存储介质。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及人工智能和深度学习技术。更具体地,本公开提供了一种处理器的多线程调度方法、装置、电子设备和存储介质。
背景技术
近年来,随着数据量的不断增长,对深度学习性能的要求正在逐渐提高。作为一种行之有效的性能提升手段,分布式训练在其中发挥了重要的作用。
发明内容
本公开提供了一种处理器的多线程调度方法、装置、设备以及存储介质。
根据第一方面,提供了一种处理器的多线程调度方法,该方法包括:响应于计算线程发起的传输第一数据的第一通知消息,使用第一通信线程传输第一数据;响应于第一通信线程发起的传输第一数据的第二通知消息,在第一时段使用第二通信线程传输第一数据;以及响应于计算线程发起的传输第二数据的第三通知消息,在第二时段使用第一通信线程传输第二数据;其中,第一时段与第二时段彼此重叠。
根据第二方面,提供了一种处理器的多线程调度装置,该装置包括:第一通信模块,用于响应于计算线程发起的传输第一数据的第一通知消息,使用第一通信线程传输第一数据;第二通信模块,用于响应于第一通信线程发起的传输第一数据的第二通知消息,在第一时段使用第二通信线程传输第一数据;以及第三通信模块,用于响应于计算线程发起的传输第二数据的第三通知消息,在第二时段使用第一通信线程传输第二数据;其中,第一时段与第二时段彼此重叠。
根据第三方面,提供了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行根据本公开提供的方法。
根据第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,该计算机指令用于使计算机执行根据本公开提供的方法。
根据第五方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序存储于可读存储介质和电子设备其中至少之一上,所述计算机程序在被处理器执行时实现根据本公开提供的方法。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是相关技术中计算流与通信流重叠的方法的示意图;
图2是相关技术中通信流与通信流重叠的方法的示意图;
图3是根据本公开的一个实施例的处理器的多线程调度方法的流程图;
图4是根据本公开的一个实施例的通信流与通信流重叠的方法的示意图;
图5是根据本公开的一个实施例的处理器的多线程调度装置的框图;
图6是根据本公开的一个实施例的处理器的多线程调度方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
在本公开的技术方案中,在获取或采集用户个人信息之前,均获取了用户的授权或同意。
分布式训练应用中,分布式系统间和系统内通信均存在额外开销,因此,需要减少计算操作与通信操作之间的阻塞以及多个通信操作之间的阻塞,以充分满足用户对性能的要求。
例如,通过将计算操作与通信操作在时间维度上进行重叠,可以减少计算操作与通信操作之间的阻塞,通过将通信操作与通信操作在时间维度上进行重叠,可以减少通信间的阻塞。利用CUDA(Compute Unified Device Architecture,统一计算设备架构)编程模型中的流,可以达成这一目标。流是利用CUDA函数的异步特性构建的操作队列(或线程),属于不同的流的操作是异步的,因而可以并行;而同属于一个流的操作是串行的。
例如,可以将CUDA流分为负责计算的计算流和负责通信的通信流,计算流可以认为是计算线程,通信流可以认为是通信线程。利用CUDA函数本身的异步特性,可以有效实现流之间的重叠(包括计算流与通信流重叠、通信流间的重叠),从而减少阻塞。
图1是相关技术中计算流与通信流重叠的方法的示意图。
如图1所示,计算流110包括多个计算操作(calc),且多个计算操作具有先后执行顺序。通信流120包括多个通信操作(comm),每个通信操作用于传输计算流110中的计算操作所产生的计算结果。
可以理解,当前任务的计算流中各计算操作的计算结果可能需要传输给其他的任务。例如,计算流110属于深度学习中前向计算任务中的计算流,计算流110中的计算结果(例如梯度)需要传输给反向计算任务中的计算流来计算损失。
例如,计算流110中的计算操作2(calc2)的计算结果需要传输给其他任务,在计算操作2执行完成后,可以发起通知消息event1,该通知消息event1用于通知通信流120开始传输计算操作2的计算结果。
例如,通信流120在接收到或等待到通知消息event1(wait event1)之后,可以获取计算操作2的计算结果,并执行通信操作3(comm3),通信操作3可以将该计算操作2的计算结果传输给其他任务。
类似地,计算流110中的计算操作4(calc4)在执行完成后,可以发起通知消息event2,该通知消息event2用于通知通信流120开始传输计算操作4的计算结果。通信流120在接收到或等待到通知消息event2(wait event2)之后,可以获取计算操作4的计算结果,并执行通信操作5(comm5),通信操作5可以将该计算操作4的计算结果传输给其他任务。
通信操作5在完成计算操作4的计算结果的传输之后,可以发起通知消息event3,该通知消息event3用于通知计算流110通信流120已完成通信。
在通信流120传输计算流110中计算操作的计算结果的过程中,计算流110可以继续执行后续计算操作。因此,计算流的计算操作与通信流的通信操作在时间上产生了重叠。例如,如图1所示,计算流110中的计算操作4与通信流120中的通信操作3在时间上存在重叠。
如图1所示的计算流与通信流重叠的方式可以应用于流水线并行任务,通过在时间维度上复用计算操作和通信操作,能够有效减少计算空间,显著提升流水线并行效率。但是,该方式不能实现通信流与通信流之间的重叠。
图2是相关技术中通信流与通信流重叠的方法的示意图。
如图2所示,通信流1 220与通信流2 230之间的重叠,需要依赖计算流210作为总线。例如,通信流1 220在完成通信之后,需要以计算流210为总线,通知计算流210通信流1220已完成通信;计算流在收到来自通信流1 220的通知之后,再通知通信流2 230开始通信。
如图2所示,计算流210中的计算操作2在执行完成后,可以发起通知消息event1,该通知消息event1用于通知通信流1 220开始传输计算操作2的计算结果。
通信流1 220在接收到或等待到通知消息event1(wait event1)之后,可以获取计算操作2的计算结果,并执行通信操作3(comm3),通信操作3可以将该计算操作2的计算结果传输给其他任务(例如第一任务)。通信流1 220中的通信操作3在完成计算操作2的计算结果的传输之后,可以发起通知消息event2,该通知消息event2用于通知计算流210通信流1220已完成通信。
计算流210在收到或等待到通知消息event2(wait event2)之后,可以发起通知消息event3,该通知消息event3用于通知通信流2 230开始传输计算操作2的计算结果。
通信流2 230在接收到或等待到通知消息event3(wait event3)之后,可以获取计算操作2的计算结果,并执行通信操作4(comm4),通信操作4可以将计算操作2的计算结果传输给其他任务(例如第二任务)。通信流2 230中的通信操作4在完成计算操作2的计算结果的传输之后,可以发起通知消息event4,该通知消息event4用于通知计算流210通信流2230已完成通信。
例如,与通信流1 220对应的第一任务和与通信流2 230对应的第二任务例如是同步任务,具有通信依赖关系(例如先后执行顺序)。因此,与第一任务和第二任务分别对应的通信操作也具有先后执行顺序,例如先执行与第一任务对应的通信操作3,再执行与第二任务对应的通信操作4。
例如,通信流1 220在通信完成后可以立刻开始后续的通信。例如,可以传输计算流210中计算操作6的计算结果。因此,通信流1 220的后续通信(传输计算操作6的计算结果)和通信流2 230的当前通信(传输计算操作2的计算结果)在时间维度上进行了重叠。
如图2所示的重叠方式可以实现通信流与通信流之间的重叠,但是,由于需要依赖计算流210作为总线,在每次通信流完成通信之后,均需要先通知计算流自身已完成通信,计算流在接收到通知之后,再通知其他的通信流开始通信。因此,需要计算流调度多个通信流,开销比较大,并且在通信流1 220通信完成等待计算流210通知通信流2 230开始通信的期间,可能会插入其他计算操作,造成通信流2 230传输的计算结果不正确。
图3是根据本公开的一个实施例的处理器的多线程调度方法的流程图。
如图3所示,该处理器的多线程调度方法300可以包括操作S310~操作S330。
在操作S310,响应于计算线程发起的传输第一数据的第一通知消息,使用第一通信线程传输第一数据。
在操作S320,响应于第一通信线程发起的传输第一数据的第二通知消息,在第一时段使用第二通信线程传输第一数据。
在操作S330,响应于计算线程发起的传输第二数据的第三通知消息,在第二时段使用第一通信线程传输第二数据,其中,第一时段与第二时段彼此重叠。
例如,计算线程是统一计算设备架构CUDA中的计算流,第一通信线程和第二通信线程均是统一计算设备架构CUDA中的通信流,可以分别称为第一通信流和第二通信流。
例如,当前任务的计算流中的计算操作在得到一中间计算结果第一数据之后,如果该第一数据需要传输给其他任务(例如第一任务和第二任务)。计算流可以发起第一通知消息,该第一通知消息用于指示第一通信流传输该第一数据。处理器响应于该第一通知消息,可以使用第一通信流将该第一数据传输给其他任务(例如第一任务)。
例如,在第一通信流完成第一数据的传输之后,可以发起第二通知消息,该第二通知消息用于指示第二通信流开始通信。处理器响应于该第二通知消息,可以使用第二通信流将该第一数据传输给其他任务(例如第二任务)。
例如,第一任务和第二任务是同步任务,具有通信依赖关系(例如先后执行顺序)。因此,与第一任务和第二任务分别对应的第一通信线程和第二通信线程的通信操作也具有先后执行顺序。
例如,先使用第一通信流传输第一数据,在第一通信流完成第一数据的传输之后,再由第一通信流通知第二通信流开始第一数据的传输。因此,可以保证第一通信流传输第一数据的操作和第二通信流传输第一数据的操作之间的先后顺序。
并且,由第一通信流通知第二通信流开始第一数据的传输,无需依赖计算流作为数据总线,因此,第一通信流传输第一数据的操作和第二通信流传输第一数据的操作是连续的,不会被打断,相比于相关技术中依赖计算流作为总线进行通信重叠的方式,能够减少调度开销,并且能够避免在第一通信流通信完成等待第二通信流开始通信的期间,插入其他操作,导致待传输数据被修改,第二通信流传输数据错误的问题。
另外,第一通信流在完成第一数据的传输之后,可以继续通信。例如,计算流中的计算操作在得到另一中间计算结果第二数据之后,如果该第二数据需要传输给第一任务和第二任务。计算流可以发起第三通知消息,该第三通知消息用于指示第一通信流传输该第二数据。处理器响应于该第三通知消息,可以使用第一通信流将该第二数据传输给第一任务。
因此,第一通信流传输第二数据的操作与第二通信流传输第一数据的操作在时间维度上可以有重叠。例如,在第一时段第二通信流传输第一数据,在第二时段第一通信流传输第二数据,那么第一时段和第二时段彼此之间存在重叠。由于在时间维度上实现了多个通信流彼此之间的重叠,因此能够有效提高通信效率。
根据本公开的实施例,响应于确定第二通信线程完成第一数据的传输,通过第二通信线程发起完成第一数据的传输的第四通知消息。
例如,如果第一数据需要传输给两个任务(第一任务和第二任务),需要对应的两个通信流(第一通信流和第二通信流)。那么,在第二通信流完成第一数据的传输后,可以向计算流发起第四通知消息,该第四通知消息用于通知计算流第一数据传输完成。
根据本公开的实施例,该处理器的多线程调度方法还包括:响应于确定第一通信线程完成第二数据的传输,通过第一通信线程发起传输第二数据的第五通知消息;响应于第五通知消息,使用第二通信线程传输第二数据。
与第一数据类似,在第一通信流完成第二数据的传输之后,可以发起第五通知消息,该第五通知消息用于指示第二通信流开始第二数据的传输。处理器响应于该第五通知消息,可以使用第二通信流将该第二数据传输给例如第二任务。
根据本公开的实施例,该处理器的多线程调度方法还包括:响应于确定第二通信线程完成第一数据的传输,通过第二通信线程发起传输第一数据的第六通知消息;响应于第六通知消息,使用第三通信线程传输第一数据。
例如,如果第一数据需要传输给三个任务(第一任务、第二任务和第三任务,该三个任务是同步任务),需要对应的三个通信流(第一通信流、第二通信流和第三通信流)。那么,在第二通信流完成第一数据的传输后,可以向第三通信流发起第六通知消息,该第六通知消息用于通知第三通信流开始传输第一数据。
需要说明的是,本公开提供的处理器的多线程调度方法适用于更多个通信流(例如大于3个)重叠的情况,实现方式与两个通信流和三个通信流的重叠方式的类似,这里不再赘述。
图4是根据本公开的一个实施例的通信流与通信流重叠的方法的示意图。
如图4所示,计算流410中的计算操作2在执行完成后,产生第一数据,可以发起第一通知消息event1,该第一通知消息event1用于通知第一通信流420开始传输第一数据。
第一通信流420在接收到或等待到通知消息event1(wait event1)之后,可以获取第一数据,并执行通信操作3(comm3),通信操作3可以将第一数据传输给其他任务(例如第一任务)。第一通信流420中的通信操作3在完成计算操作2的计算结果的传输之后,可以发起通知消息event2,该通知消息event2用于通知第二通信流430开始传输第一数据。
第二通信流430在接收到或等待到通知消息event2(wait event2)之后,可以获取第一数据,并执行通信操作4(comm4),通信操作4可以将第一数据传输给其他任务(例如第二任务)。第二通信流430中的通信操作4在完成第一数据的传输之后,可以发起通知消息event4,该通知消息event4用于通知计算流410第二通信流430已完成第一数据的传输。
例如,第一通信流420在通信完成后可以立刻开始后续的通信。例如,计算流410中的计算操作6在执行完成后,产生第二数据,可以发起第三通知消息event3,该第三通知消息event3用于通知第一通信流420开始传输第二数据。
第二通信流430在接收到或等待到通知消息event3(wait event3)之后,可以获取第二数据,并执行通信操作5(comm5),通信操作5可以将第二数据传输给其他任务(例如第二任务)。
例如,第一通信流420中的通信操作5传输第二数据的时段与第二通信流430中的通信操作4传输第一数据的时段有重叠,可以提高通信效率。
根据本公开实施例,在第一通信流完成第一数据的传输之后,由第一通信流通知第二通信流开始第一数据的传输,可以保证第一通信流传输第一数据的操作和第二通信流传输第一数据的操作之间的先后顺序,且第一通信流传输第一数据的操作和第二通信线程传输第一数据的操作不会被打断,避免插入其他操作导致数据错误。
本公开实施例在第一通信流完成第一数据的传输之后,由第一通信流通知第二通信流开始第一数据的传输,相比于依赖计算流作为总线的方式,可以减少通知数量,有效减少调度开销。
本公开实施例提供的处理器的多线程调度方法可以作为CUDA中多通信流的调度方法,支撑分布式训练的上层应用。
根据本公开的实施例,处理器的多线程调度方法应用于电子设备中,需要为电子设备提供用于实现该多线程调度方法的接口(编程接口),即为电子设备提供用于实现多流调度方法的接口。
下面先对相关技术中CUDA流调度方法的编程接口进行说明。
相关技术中的编程接口,在进行开发时需要大量的硬编码,并且现有的编程接口不够统一,在对多种重叠方式进行控制时需要针对不同的重叠模式编写不同的代码,极大地提高了用户的心智负担,增加了使用成本。
例如,相关技术中的编程接口的示例代码如下:
calc_res=calculation(...);将计算结果赋给变量calc_res;
//another operations;其他操作
env1.communication1(calc_res,...);通信环境1,传输calc_res的值;
//another operations;其他操作
env2.communication2(calc_res,...);通信环境2,传输calc_res的值;
env3.communication2(calc_res,...);通信环境3,传输calc_res的值。
在上述相关技术中编程接口的示例代码中,计算操作与通信操作不统一,计算操作和通信操作需要通过共享变量calc_res传递数据,语义不清晰。且计算操作与通信操作共享变量会使得计算操作与通信操作访问同一内存区域的数据,在计算操作和通信操作重叠执行时,如果该内存区域的数据被后续的计算操作意外修改,导致通信操作传递的数据错误。
在上述相关技术中编程接口的示例代码中,包含了三个通信环境(env1、env2、env3),三个通信环境分别对应三个通信流。但是上述示例代码无法很好地控制通信依赖关系,例如三个通信流的关系是同步的,执行方式是串行的,具有先后顺序,那么需要用户编写大量的硬编码来控制该三个通信流的通信依赖关系。并且,该三个通信流重叠过程中也可能会插入无关操作,导致不正确的计算结果。
在上述相关技术中编程接口的示例代码中,通过硬编码的方式指定通信环境,无法灵活修改,每个环境均需要对应的硬编码,尤其是存在多个环境时难以维护。
上述相关技术中的编程接口存在如上述诸多缺点,使用相关技术中的编程接口来实现本公开提供的处理器的多线程调度方法,会使得编程变得更加复杂,因此,本公开实施例提供了一种与上述处理器的多线程调度方法相匹配的编程接口,能够让用户以简单、直观的方式完成多流重叠代码的编写。
根据本公开的实施例,通过以下操作为电子设备提供用于实现本公开提供的处理器的多线程调度方法的接口:
使用目标对象作为计算流的计算结果数据以及通信流的待传输数据(例如第一数据和第二数据)的传输载体,使得计算线程(计算流)、第一通信线程(第一通信流)和第二通信线程(第二通信流)通过目标对象传输第一数据和第二数据中的至少之一。提供用于控制第一通信线程和第二通信线程之间先后执行顺序的第一子接口。提供用于配置第一通信线程和第二通信线程的第二子接口。
本公开提供的编程接口的示例代码如下:
在上述本公开提供的编程接口的示例代码中,计算流和通信流采用了统一的目标对象task作为数据传输载体进行数据传递,避免了使用共享变量传递数据导致的语义不清晰和可能被意外修改的问题。
在上述本公开提供的编程接口的示例代码中,提供then子接口(第一子接口)控制多个通信环境之间的通信依赖关系,能够保证依赖顺序,并且过程无法打断,不会在重叠时被其他操作意外修改。可以理解,then子接口的底层实现是本公开提供的多线程调度方法中各通信流的执行过程,各then子接口对应的通信流是按顺序执行的,不会被打断。因此,为用户提供then子接口由then子接口的底层实现控制通信流的先后执行顺序,无需用户编写大量的硬编码来控制通信流的先后执行顺序。
在上述本公开提供的编程接口的示例代码中,提供prepare子接口(第二子接口)配置通信环境,可以灵活指定需要进行通信的环境,易于维护,例如可以灵活修改prepare(env1)中的变量env1。
根据本公开的实施例,提出了一种用户友好的通用编程接口,能够让用户以简单、直观的方式完成多流重叠代码的编写,不需要针对不同的重叠方式编写不同的代码,并且能够一定程度上降低用户结果错误的概率,从而降低用户的使用成本,利于理解和二次开发。
图5是根据本公开的一个实施例的处理器的多线程调度装置的框图。
如图5所示,该处理器的多线程调度装置500包括第一通信模块501、第二通信模块502和第三通信模块503。
第一通信模块501用于响应于计算线程发起的传输第一数据的第一通知消息,使用第一通信线程传输第一数据。
第二通信模块502用于响应于第一通信线程发起的传输第一数据的第二通知消息,在第一时段使用第二通信线程传输第一数据。
第三通信模块503用于响应于计算线程发起的传输第二数据的第三通知消息,在第二时段使用第一通信线程传输第二数据。
根据本公开的实施例,第一时段与第二时段彼此重叠。
处理器的多线程调度装置500还包括第一通知模块和第二通知模块。
第一通知模块,用于响应于确定第一通信线程完成第一数据的传输,通过第一通信线程发起传输第一数据的第二通知消息。
第二通知模块,用于响应于确定第二通信线程完成第一数据的传输,通过第二通信线程发起完成第一数据的传输的第四通知消息。
处理器的多线程调度装置500还包括第三通知模块和第四通信模块。
第三通知模块用于响应于确定第一通信线程完成第二数据的传输,通过第一通信线程发起传输第二数据的第五通知消息。
第四通信模块用于响应于第五通知消息,使用第二通信线程传输第二数据。
处理器的多线程调度装置500还包括第四通知模块和第五通信模块。
第四通知模块用于响应于确定第二通信线程完成第一数据的传输,通过第二通信线程发起传输第一数据的第六通知消息。
第五通信模块用于响应于第六通知消息,使用第三通信线程传输第一数据。
根据本公开的实施例,计算线程包括统一计算设备架构CUDA中的计算流,通信线程包括统一计算设备架构CUDA中的通信流。
处理器的多线程调度装置500应用于电子设备中;装置500还包括提供模块,用于为电子设备提供用于实现装置500的接口,具体包括:使用目标对象作为第一数据和第二数据的传输载体,使得计算线程、第一通信线程和第二通信线程通过目标对象传输第一数据和第二数据中的至少之一;提供用于控制第一通信线程和第二通信线程之间先后执行顺序的第一子接口;以及提供用于配置第一通信线程和第二通信线程的第二子接口。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图6示出了可以用来实施本公开的实施例的示例电子设备600的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图6所示,设备600包括计算单元601,其可以根据存储在只读存储器(ROM)602中的计算机程序或者从存储单元608加载到随机访问存储器(RAM)603中的计算机程序,来执行各种适当的动作和处理。在RAM 603中,还可存储设备600操作所需的各种程序和数据。计算单元601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
设备600中的多个部件连接至I/O接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元601可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元601的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元601执行上文所描述的各个方法和处理,例如处理器的多线程调度方法。例如,在一些实施例中,处理器的多线程调度方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由ROM 602和/或通信单元609而被载入和/或安装到设备600上。当计算机程序加载到RAM 603并由计算单元601执行时,可以执行上文描述的处理器的多线程调度方法的一个或多个步骤。备选地,在其他实施例中,计算单元601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行处理器的多线程调度方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (14)
1.一种处理器的多线程调度方法,包括:
响应于需要将当前任务的计算线程计算出的第一数据传输给第一任务,使用所述计算线程发起传输所述第一数据的第一通知消息;
响应于所述第一通知消息,使用第一通信线程将所述第一数据传输给第一任务;
响应于所述第一通信线程发起的传输所述第一数据的第二通知消息,在第一时段使用第二通信线程将所述第一数据传输给第二任务;以及
响应于所述计算线程发起的传输第二数据的第三通知消息,在第二时段使用所述第一通信线程传输所述第二数据;
其中,所述第一时段与所述第二时段彼此重叠,所述计算线程为统一计算设备架构CUDA中的计算流,所述第一通信线程和所述第二通信线程均为所述统一计算设备架构CUDA中的通信流,所述第一任务和所述第二任务具有通信依赖关系,所述第一通信线程和所述第二通信线程也具有通信依赖关系。
2.根据权利要求1所述的方法,还包括:
响应于确定所述第一通信线程完成所述第一数据的传输,通过所述第一通信线程发起传输所述第一数据的第二通知消息。
3.根据权利要求1或2所述的方法,还包括:
响应于确定所述第二通信线程完成所述第一数据的传输,通过所述第二通信线程发起完成所述第一数据的传输的第四通知消息。
4.根据权利要求1所述的方法,还包括:
响应于确定所述第一通信线程完成所述第二数据的传输,通过所述第一通信线程发起传输所述第二数据的第五通知消息;
响应于所述第五通知消息,使用所述第二通信线程传输所述第二数据。
5.根据权利要求1或2所述的方法,还包括:
响应于确定所述第二通信线程完成所述第一数据的传输,通过所述第二通信线程发起传输所述第一数据的第六通知消息;
响应于所述第六通知消息,使用第三通信线程传输所述第一数据;
其中,所述第六通知消息用于指示将所述第一数据传输给第三任务,所述第一任务、第二任务和第三任务具有通信依赖关系,所述第一通信线程、第二通信线程和第三通信线程具有通信依赖关系。
6.根据权利要求1所述的方法,所述方法应用于电子设备中;所述方法还包括通过以下操作为所述电子设备提供用于实现所述方法的接口:
使用目标对象作为所述第一数据和所述第二数据的传输载体,使得所述计算线程、第一通信线程和第二通信线程通过所述目标对象传输所述第一数据和第二数据中的至少之一;
提供用于控制所述第一通信线程和所述第二通信线程之间先后执行顺序的第一子接口;以及
提供用于配置所述第一通信线程和所述第二通信线程的第二子接口。
7.一种处理器的多线程调度装置,包括:
第一通信模块,用于响应于需要将当前任务的计算线程计算出的第一数据传输给第一任务,使用所述计算线程发起传输所述第一数据的第一通知消息,响应于所述第一通知消息,使用第一通信线程将所述第一数据传输给第一任务;
第二通信模块,用于响应于所述第一通信线程发起的传输所述第一数据的第二通知消息,在第一时段使用第二通信线程将所述第一数据传输给第二任务;以及
第三通信模块,用于响应于所述计算线程发起的传输第二数据的第三通知消息,在第二时段使用所述第一通信线程传输所述第二数据;
其中,所述第一时段与所述第二时段彼此重叠,所述计算线程为统一计算设备架构CUDA中的计算流,所述第一通信线程和所述第二通信线程均为所述统一计算设备架构CUDA中的通信流,所述第一任务和所述第二任务具有通信依赖关系,所述第一通信线程和所述第二通信线程也具有通信依赖关系。
8.根据权利要求7所述的装置,还包括:
第一通知模块,用于响应于确定所述第一通信线程完成所述第一数据的传输,通过所述第一通信线程发起传输所述第一数据的第二通知消息。
9.根据权利要求7或8所述的装置,还包括:
第二通知模块,用于响应于确定所述第二通信线程完成所述第一数据的传输,通过所述第二通信线程发起完成所述第一数据的传输的第四通知消息。
10.根据权利要求7所述的装置,还包括:
第三通知模块,用于响应于确定所述第一通信线程完成所述第二数据的传输,通过所述第一通信线程发起传输所述第二数据的第五通知消息;
第四通信模块,用于响应于所述第五通知消息,使用所述第二通信线程传输所述第二数据。
11.根据权利要求7或8所述的装置,还包括:
第四通知模块,用于响应于确定所述第二通信线程完成所述第一数据的传输,通过所述第二通信线程发起传输所述第一数据的第六通知消息;
第五通信模块,用于响应于所述第六通知消息,使用第三通信线程传输所述第一数据;
其中,所述第六通知消息用于指示将所述第一数据传输给第三任务,所述第一任务、第二任务和第三任务具有通信依赖关系,所述第一通信线程、第二通信线程和第三通信线程具有通信依赖关系。
12.根据权利要求7所述的装置,其中,所述装置应用于电子设备中;所述装置还包括提供模块,用于为所述电子设备提供用于实现所述装置的接口,包括:使用目标对象作为所述第一数据和所述第二数据的传输载体,使得所述计算线程、第一通信线程和第二通信线程通过所述目标对象传输所述第一数据和第二数据中的至少之一;提供用于控制所述第一通信线程和所述第二通信线程之间先后执行顺序的第一子接口;以及提供用于配置所述第一通信线程和所述第二通信线程的第二子接口。
13.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至6中任一项所述的方法。
14.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1至6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211496580.9A CN115729688B (zh) | 2022-11-23 | 2022-11-23 | 处理器的多线程调度方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211496580.9A CN115729688B (zh) | 2022-11-23 | 2022-11-23 | 处理器的多线程调度方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115729688A CN115729688A (zh) | 2023-03-03 |
CN115729688B true CN115729688B (zh) | 2023-09-12 |
Family
ID=85298518
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211496580.9A Active CN115729688B (zh) | 2022-11-23 | 2022-11-23 | 处理器的多线程调度方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115729688B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108011909A (zh) * | 2016-10-28 | 2018-05-08 | 北京市商汤科技开发有限公司 | 通信方法和系统、电子设备和计算机集群 |
CN113391932A (zh) * | 2021-06-07 | 2021-09-14 | 北京科技大学 | 面向异构众核架构的并行特征线法输运扫描方法及装置 |
CN114124916A (zh) * | 2021-10-27 | 2022-03-01 | 阿波罗智联(北京)科技有限公司 | 数据传输方法、装置、电子设备及存储介质 |
CN114490048A (zh) * | 2022-01-14 | 2022-05-13 | 北京百度网讯科技有限公司 | 任务执行方法、装置、电子设备及计算机存储介质 |
CN114880133A (zh) * | 2017-08-31 | 2022-08-09 | 华为技术有限公司 | 分布式计算系统,分布式计算系统中数据传输方法和装置 |
CN115237574A (zh) * | 2022-08-08 | 2022-10-25 | 昆仑芯(北京)科技有限公司 | 人工智能芯片的调度方法、装置及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200118000A1 (en) * | 2018-10-10 | 2020-04-16 | NEC Laboratories Europe GmbH | Method and system for distributed deep learning |
-
2022
- 2022-11-23 CN CN202211496580.9A patent/CN115729688B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108011909A (zh) * | 2016-10-28 | 2018-05-08 | 北京市商汤科技开发有限公司 | 通信方法和系统、电子设备和计算机集群 |
CN114880133A (zh) * | 2017-08-31 | 2022-08-09 | 华为技术有限公司 | 分布式计算系统,分布式计算系统中数据传输方法和装置 |
CN113391932A (zh) * | 2021-06-07 | 2021-09-14 | 北京科技大学 | 面向异构众核架构的并行特征线法输运扫描方法及装置 |
CN114124916A (zh) * | 2021-10-27 | 2022-03-01 | 阿波罗智联(北京)科技有限公司 | 数据传输方法、装置、电子设备及存储介质 |
CN114490048A (zh) * | 2022-01-14 | 2022-05-13 | 北京百度网讯科技有限公司 | 任务执行方法、装置、电子设备及计算机存储介质 |
CN115237574A (zh) * | 2022-08-08 | 2022-10-25 | 昆仑芯(北京)科技有限公司 | 人工智能芯片的调度方法、装置及电子设备 |
Non-Patent Citations (1)
Title |
---|
基于CUDA与MPI的Petri网状态空间并行计算研究;杨召;《中国优秀硕士学位论文全文数据库 (信息科技辑)》;I138-16 * |
Also Published As
Publication number | Publication date |
---|---|
CN115729688A (zh) | 2023-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113961351B (zh) | 深度学习模型的分布式训练方法、装置、设备及存储介质 | |
CN110806923B (zh) | 一种区块链任务的并行处理方法、装置、电子设备和介质 | |
JP7214786B2 (ja) | 深層学習推論エンジンのスケジューリング方法、装置、機器及び媒体 | |
CN113342345A (zh) | 深度学习框架的算子融合方法、装置 | |
CN102567090B (zh) | 在计算机处理器中创建执行线程的方法和系统 | |
CN112925587A (zh) | 用于初始化应用的方法和装置 | |
CN114816393B (zh) | 信息生成方法、装置、设备以及存储介质 | |
CN112631775A (zh) | 模型训练方法、装置、电子设备和计算机可读存储介质 | |
CN115729688B (zh) | 处理器的多线程调度方法、装置、电子设备和存储介质 | |
CN112306646A (zh) | 用于处理事务的方法、装置、设备及可读存储介质 | |
CN113722037B (zh) | 一种用户界面的刷新方法、装置、电子设备及存储介质 | |
CN113010285B (zh) | 用于处理数据的方法、装置、设备、介质和产品 | |
CN114579191A (zh) | 一种指令发射方法、装置、电子设备及存储介质 | |
CN114860411A (zh) | 多任务学习方法、装置、电子设备和存储介质 | |
CN110825461B (zh) | 数据处理方法和装置 | |
CN114090247A (zh) | 用于处理数据的方法、装置、设备以及存储介质 | |
CN116596091B (zh) | 模型训练方法、装置、设备以及存储介质 | |
CN115617732B (zh) | Apb总线结构、片上系统、车辆及访问方法 | |
CN115904510B (zh) | 多操作数指令的处理方法、图形处理器及存储介质 | |
CN115495312B (zh) | 业务请求处理方法和装置 | |
CN113407844B (zh) | 小程序框架的版本推荐方法、装置、设备以及存储介质 | |
CN115951936B (zh) | 向量化编译程序的芯片适配方法、装置、设备及介质 | |
CN117608779A (zh) | 调度周期确定方法、装置、设备及介质 | |
CN117093266A (zh) | 指令处理装置、方法、电子设备和存储介质 | |
CN117270862A (zh) | 基于动态编译的软件可插拔方法、装置、设备和介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |