本公开内容的实现方式概括地涉及处理任务,并且更具体地,涉及用于以分布式方式在多个处理单元中执行处理任务的方法、装置、设备和计算机存储介质。
背景技术:
:随着计算机技术的发展,目前已经出现了分布式处理方式。可以提供多个处理单元并且以分布式方式在多个处理单元处执行处理任务。然而,随着处理任务越来越复杂,需要大量处理单元来协调操作。此时,如何调度多个处理单元以更为有效的方式来处理处理任务,成为一个技术难题。技术实现要素:根据本公开内容的示例实现方式,提供了一种用于执行处理任务的方案。在本公开内容的第一方面中,提供了一种用于执行处理任务的方法。处理任务的多个部分中的一个部分包括将在多个处理单元中的一个处理单元处被执行的一组操作,并且一组操作包括第一类型和第二类型的操作。在该方法中,建立分别用于执行第一类型的操作的第一队列和用于执行第二类型的操作的第二队列。根据处理任务的定义,获取在处理单元处将要被执行的一组操作、以及在多个处理单元中的其他处理单元处将要被执行的一组操作之间的依赖关系。基于依赖关系,在处理单元处分别执行第一队列中的操作和第二队列中的操作。在本公开内容的第二方面中,提供了一种用于执行处理任务的装置。处理任务的多个部分中的一个部分包括将在多个处理单元中的一个处理单元处被执行的一组操作,以及一组操作包括第一类型和第二类型的操作。该装置包括:建立模块,配置用于建立分别用于执行第一类型的操作的第一队列和用于执行第二类型的操作的第二队列;获取模块,配置用于根据处理任务的定义,获取在处理单元处将要被执行的一组操作、以及在多个处理单元中的其他处理单元处将要被执行的一组操作之间的依赖关系;以及执行模块,配置用于基于依赖关系,在处理单元处分别执行第一队列中的操作和第二队列中的操作。在本公开内容的第三方面中,提供了一种用于执行处理任务的设备。该设备包括一个或多个处理器;以及存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现根据本公开内容的第一方面的方法。在本公开内容的第四方面中,提供了一种其上存储有计算机程序的计算机可读介质,该程序在被处理器执行时实现根据本公开内容的第一方面的方法。应当理解,
发明内容部分中所描述的内容并非旨在限定本公开内容的实现方式的关键或重要特征,亦非用于限制本公开内容的范围。本公开内容的其他特征将通过以下的描述变得容易理解。附图说明结合附图并参考以下详细说明,本公开内容的各实现方式的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:图1a示意性示出了由多个处理单元执行处理任务的框图;图1b示意性示出了由多个处理单元执行处理任务之后的处理结果的框图;图2示意性示出了根据本公开内容的示例性实现方式的用于执行处理任务的框图;图3示意性示出了根据本公开内容的示例性实现方式的用于执行处理任务的方法的流程图;图4示意性示出了根据本公开内容的示例性实现方式的用于在多个处理单元之间数据分布的框图;图5示意性示出了根据本公开内容的示例性实现方式的用于在多个处理单元处执行累加操作的框图;图6示意性示出了根据本公开内容的示例性实现方式的用于向处理单元中加载代码的框图;图7示意性示出了根据本公开内容的示例性实现方式的在完成拷贝队列中的拷贝操作后触发硬件中断的框图;图8示意性示出了根据本公开内容的示例性实现方式的在完成累加队列中的累加操作后触发硬件中断的框图;图9示意性示出了根据本公开内容的示例性实现方式的用于执行处理任务的装置的框图;以及图10示出了能够实施本公开内容的多个实现方式的计算设备的框图。具体实施方式下面将参照附图更详细地描述本公开内容的实现方式。虽然附图中显示了本公开内容的某些实现方式,然而应当理解的是,本公开内容可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实现方式,相反提供这些实现方式是为了更加透彻和完整地理解本公开内容。应当理解的是,本公开内容的附图及实现方式仅用于示例性作用,并非用于限制本公开内容的保护范围。在本公开内容的实现方式的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实现方式”或“该实现方式”应当理解为“至少一个实现方式”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。在本公开的上下文中,处理任务可以是全局归约(allreduce)任务,该任务用于针对待处理数据执行累加操作。可以在多个处理单元(例如,gpu、ai专用芯片等)处执行处理任务,例如可以以n来表示多个处理单元的数量。为了方便描述,在本公开的上下文中将以在4个处理单元上执行处理任务为示例进行描述。将会理解,n的数值还可以是更大或者更小的整数。目前已经提供了用于执行全局归约的多种技术方案,在基于环的全局归约方案中,可以将待处理数据划分为n份,并且在以环形连接的n个处理单元处分别处理n份数据中的每一份。每个处理单元将自身的累加结果传输至环中的下一处理单元,并且接收来自环中的上一处理单元的累加结果。在下文中,首先参见图1a和图1b描述本公开内容的应用环境。图1a示意性示出了由多个处理单元执行处理任务的框图100a。如图1a所示,使用以环形方式连接的4个处理单元110、120、130和140来执行处理任务。在此假设需要被处理的待处理数据为m,可以将数据m划分为4份,此时每份数据为m/4。分别向每个处理单元发送待处理数据各自的待处理数据m/4。每个处理单元的数据被平均分成4份,第i个处理单元将第i份数据拷贝至后续处理单元。每个处理单元收到上一处理单元的数据后,与本地的相应数据累加,并将累加结果拷贝至下一处理单元。在下一轮次中,每个处理单元等待上一处理单元的累加结果,将接收到的累加结果与本地的相应数据累加,再将新的累加结果拷贝至下一处理单元。重复上述步骤,直到每个处理单元都具有一部分完整累加结果。继而,每个处理单元将自己的一部分完整累加结果拷贝至下一处理单元,下一处理单元收到该部分完整累加结果后,再拷贝至后续处理单元,直到每个处理单元都具有全部的完整累加结果。图1b示意性示出了由多个处理单元执行处理任务之后的处理结果的框图。在已经执行了上文描述的全局归约任务之后,每个处理单元110、120、130和140都具有全部的完整累加结果。为可控制n个处理单元协调工作以执行上文描述的过程,需要大量通信资源来调度数据的累加、拷贝和接收,可扩展性差。目前还提出了双向的基于环的全局归约方案,在该技术方案中将多个处理单元划分为横纵两个方向的环。然而该方案的各个步骤之间需要更多通信开销,难以在大规模数据处理中采用。因而,期望可以提供更为有效的方式来实现全局归约的处理任务。为了至少部分地解决上述技术方案中的不足,根据本公开内容的示例性实现,提出了一种用于执行处理任务的技术方案。具体地,本公开的示例性实现方式提出了操作队列的概念,可以在处理单元处为不同类型的操作建立相应的操作队列。继而,可以基于在一个处理单元处执行的多个操作以及在其他处理单元处执行的多个操作之间的依赖关系,在处理单元处分别执行各个操作队列中的操作,以便完成处理任务中的被分配给该处理单元的部分。在下文中,将参见图2概括地描述本公开的过程。图2示意性示出了根据本公开内容的示例性实现方式的用于执行处理任务的框图200。为方便描述起见,图2仅示意性示出了在多个处理单元中的两个处理单元处的处理。当一组处理单元包括n个处理单元时,则可以将该处理任务210划分为n个部分。如图2所示,处理任务210可以包括多个部分220、230等,可以利用一个处理单元来执行处理任务210中的一个部分。例如,可以由处理单元110处理部分220,可以由处理单元120处理部分230。为方便描述起见,在下文中将仅以由处理单元110执行部分220为示例进行描述。由处理单元120执行部分230的过程将是类似的。在此,每个部分包括第一类型的操作和第二类型的操作。例如,部分220可以包括第一类型222和第二类型224的操作。在处理单元110处,可以建立分别用于执行第一类型222的操作的第一队列226和用于执行第二类型224的操作的第二队列228。在此可以按照操作的类型,并且按照各个操作的执行顺序来将各个操作在相应的队列中进行排序。继而,根据处理任务210的定义,可以获取在处理单元110处将要被执行的一组操作、以及在多个处理单元中的其他处理单元120处将要被执行的一组操作之间的依赖关系240。在此的依赖关系240是指执行各个操作的顺序,例如,对于在处理单元110处将要执行的操作而言,将数据块拷贝至后续处理单元的拷贝操作可以不依赖于其他操作,而累加操作依赖于先前处理单元已经将数据块拷贝至该处理单元110。在已经获得依赖关系240的情况下,可以基于依赖关系240在处理单元110处分别执行第一队列226中的操作和第二队列228中的操作。类似地,对于处理单元120而言,被分配在处理单元120上执行的部分230可以包括第一类型232的操作和第二类型234的操作,并且可以分别建立第一队列236和第二队列238来管理各个类型的操作。继而,可以基于依赖关系240来在处理单元120处分别执行第一队列236中的操作和第二队列238中的操作。采用本案的技术方案,通过基于队列和依赖关系来调度多个不同类型的操作的执行,可以大大提高全局归约的并行性,并且降低执行期间的各种时间和资源开销。进一步,本案的技术方案可以与现有的全局归约方法相结合。在下文中,将参见图3描述本公开内容的示例性实现的更多细节。图3示意性示出了根据本公开内容的示例性实现方式的用于执行处理任务的方法300的流程图。在此,处理任务210中的部分220将在处理单元110处被执行。在框310处,可以在处理单元处建立分别用于执行第一类型的操作的第一队列和用于执行第二类型的操作的第二队列。根据本公开的示例性实现方式,处理任务210可以是全局归约任务,并且多个处理单元按照环形方式被连接。例如,多个处理单元110、120、130、140可以按照如图1a所示的方式,前后相继地以环形方式连接。又例如,将多个处理单元划分为横纵两个方向,并且分别在两个方向的环中连接多个处理单元。将会理解,可以将将要由处理任务210进行处理的待处理数据划分为多个数据块。例如,假设将要由n个处理单元执行处理任务210,则可以将待处理数据划分为n个数据块,并且可以分别向每个处理单元发送相应的数据块。此时,在每个处理单元处,可以接收一个数据块,并且该数据块是处理任务210的待处理数据中的将在处理单元处被处理的一部分。为方便描述起见,在此假设全部待处理数据为m,在使用4个处理单元的情况下,可以将待处理数据划分为4个数据块。此时,可以分别向处理单元110、120、130和140分发待处理的数据块。在每个处理单元处,可以将接收到的数据划分为4份。此时,在处理单元110处,可以包括数据a1、b1、c1、d1;在处理单元120处,可以包括数据a2、b2、c2、d2,以此类推。在下文中,将描述在每个处理单元处的操作的示例。图4示意性示出了根据本公开内容的示例性实现方式的用于在多个处理单元之间数据分布的框图400。例如,下文表1示出了在处理单元120处执行的操作的示例,此时,处理单元120处已经具有数据a2、b2、c2、d2。表1在处理单元处执行的操作的示例如表1所示,第一列示出了操作的标识符,第二列示出了操作的类型以及第三列示出了操作的内容。在表1中仅示意性示出了将在处理单元120处执行的一部分操作,在操作2之后,累加操作和拷贝操作可以交替进行直到获得累加结果(a1 a2 a3 a4)。将会理解,在此的累加结果(a1 a2 a3 a4)仅仅是一部分完整的累加结果,因而每个处理单元需要将自己本地的一部分完整累加结果拷贝至下一处理单元,下一处理单元再执行循环拷贝,直到每个处理单元都具有全部的完整累加结果。将在在处理单元120处执行的一组操作可以包括拷贝操作和累加操作。此时,可以按照将在处理单元120处执行的操作的类型,来分别建立第一队列和第二队列。具体地,第一队列可以包括如下表2所示的累加操作,第二队列可以包括如下表3所示的拷贝操作。表2累加队列的示例操作2操作4……表3拷贝队列的示例操作1操作3……在下文中,将分别参见图4和图5描述有关拷贝操作和累加操作的更多细节。将会理解,在此的拷贝操作可以将处理单元处的累加结果/数据块拷贝至在该处理单元之后连接的后续处理单元。对于处理单元110而言,如箭头410所示,该处理单元110可以将数据a1拷贝至处理单元120以形成副本。对于处理单元120而言,如箭头420所示,该处理单元120可以将数据b2拷贝至处理单元130以形成副本。在其他处理单元处,还可以执行类似的拷贝操作。尽管在图4中未示出,拷贝操作的对象还可以是处理单元处的累加结果。根据本公开的示例性实现方式,累加操作表示将处理单元处的数据块累加至从在处理单元之前连接的先前处理单元拷贝到该处理单元的累加结果,以作为该处理单元的累加结果。图5示意性示出了根据本公开内容的示例性实现方式的用于在多个处理单元处执行累加操作的框图500。图5示出了在图4的拷贝操作之后的处理单元120状态,此时在处理单元120处已经具有数据a1的副本。在处理单元120处,可以基于数据a1的副本和数据a2来确定累加结果510(即,a1 a2)。类似地,在其他处理单元处,还可以确定其他数据的累加结果。根据本公开的示例性实现方式,为了执行拷贝操作和累加操作,可以向处理单元中分别加载用于执行相应类型的操作的代码。图6示意性示出了根据本公开内容的示例性实现方式的用于向处理单元中加载代码的框图600。如图6所示,主机410可以连接至各个处理单元110、120、130和140。在此主机410可以向各个处理单元中的存储器中分别加载用于执行累加类型的操作的第一代码和用于执行拷贝操作的第二代码。将会理解,向各个处理单元加载代码的过程是类似的,为简化描述起见,在下文中将仅描述针对处理单元110的加载过程。根据本公开的示例性实现方式,可以向处理单元110的存储器610中分别加载用于执行累加操作的第一代码612和用于执行拷贝操作的第二代码614。当第一代码612和第二代码614被加载至存储器610之后,处理单元110即可迅速执行与代码相应的操作。根据本公开的示例性实现方式,为了提高处理单元110的响应速度,可以分别将第一代码612和第二代码614中的至少任一项保持在处理单元110的存储器610中。利用本公开的示例性实现方式,通过将数据拷贝和数据累加代码预先加载至各个处理单元中,并且常驻于各个处理单元的存储器中,可以避免反复加载/释放导致额外的时间和资源开销。此时,可以基于第一代码612执行第一队列中的操作,并且可以基于第二代码614执行第二队列中的操作。将会理解,由于拷贝操作需要占用处理单元之间的带宽资源,而累加操作将会占用各个处理单元之中的计算资源,因而对于某些不具有依赖关系的操作而言,可以并行地执行两个队列中的操作。在框320处,可以根据处理任务210的定义来确定多个操作之间的依赖关系。可以获取在处理单元110处将要被执行的一组操作、以及在多个处理单元中的其他处理单元处将要被执行的一组操作之间的依赖关系。在下文中将仅以在处理单元120处执行的多个操作为示例,描述如何获取依赖关系。继续上文的示例,假设已经分别向处理单元110、120、130、140传输了4个数据块。根据全局归约的过程可以确定,各个操作之间的依赖关系如表4中的最后一列所示:表4依赖关系的示例返回图3,在框330处,基于依赖关系,在处理单元处分别执行第一队列中的操作和第二队列中的操作。将会理解,可以采用硬件中断的方式来向处理单元通知:执行某个特定操作的依赖关系已经被满足,进而可以触发该处理单元来执行该特定操作。根据本公开的示例性实现方式,如果确定在处理单元处已经完成第一队列中和第二队列中的任一队列中的操作,利用处理单元的硬件中断来通知其他处理单元。利用本公开的示例性实现方式,基于处理单元的硬件中断来调度队列中的任务,由处理单元自身来保证任务执行的先后顺序,避免与主机之间的不必要通信。采用本案的技术方案,可以大大提高全局归约的并行效率,并降低执行期间的各种时间和资源开销。在下文中,将分别参见图7和图8描述如何基于硬件中断来进行通知。图7示意性示出了根据本公开内容的示例性实现方式的在完成拷贝队列中的操作后触发硬件中断的框图700。图7示出了针对处理单元120的拷贝队列710,该拷贝队列710可以包括多个拷贝操作,如图7中所示的拷贝队列710中的拷贝操作712表示上文表1中的操作1,即,将处理单元120处的数据b2拷贝至后续处理单元130。根据表4中的依赖关系可知,由于该操作不依赖于其他操作,因而可以直接执行。进一步,基于依赖关系可知,在后续处理单元130处的累加操作依赖于拷贝操作712,因而在已经完成了拷贝操作712之后,可以产生硬件中断714以便通知716后续处理单元130来执行相应的累加操作。在后续处理单元130处,一旦接收到来自先前处理单元120的硬件中断714,则可以执行累加操作(即,将接收到的数据b2与自身处的数据块b3执行累加)。根据本公开的示例性实现方式,处理单元和后续处理单元共享缓存区,因而可以从处理单元向缓存区拷贝累加结果,以便实现拷贝操作。例如,上文描述的处理单元120和处理单元130之间可以具有共享缓存区,此时处理单元120可以向该缓存区拷贝数据,并且处理单元130可以从该缓存区读取数据。将会理解,尽管图7仅详细示出了在已经执行了拷贝队列710中的一个拷贝操作712后产生硬件中的714的示例,在已经执行了其他拷贝操作之后,可以以类似的方式来通知后续处理单元执行相应的累加操作。根据本公开的示例性实现方式,如果在处理单元处已经执行第一队列中的一个累加操作,可以基于硬件中断通知先前处理单元执行第二队列中的下一拷贝操作。在下文中将参见图8详细描述,该图8示意性示出了根据本公开内容的示例性实现方式的在完成累加队列中的操作后触发硬件中断的框图800。图8示出了针对处理单元120的累加队列810,该累加队列810可以包括多个拷贝操作。如图8中所示的累加队列810中的累加操作712表示上文表1中的操作2,即,将接收到的来自处理单元110的数据a1与本地数据a2执行累加,以获得累加结果(a1 a2)。由于该操作依赖于先前处理单元110已经将数据a1拷贝至处理单元120,因而可以在处理单元120已经接收到来自处理单元110的硬件中断时,启动累加操作812。进一步,基于累加操作812的依赖关系可知,先前处理单元110向处理单元120拷贝后续累加结果的拷贝操作将依赖于该累加操作812。因而,在已经完成了累加操作812之后,可以产生硬件中断814以便通知816先前处理单元110来将后续的累加结果拷贝至处理单元120。在先前处理单元110处,一旦接收到来自处理单元120的硬件中断814,处理单元110可以执行拷贝操作。利用本公开的示例性实现方式,由于拷贝操作和累加操作分别使用带宽资源和计算资源,通过分别采用拷贝队列和累加队列来存储有待执行的拷贝操作和累加操作,两种类型的操作不会导致资源冲突,因而可以提高并行执行的可能性。进一步,相对于由主机调度各个处理单元的运行、或者采用轮询技术不断确认依赖关系是否被满足的技术方案,采用硬件中断的方式来通知依赖关系已经被满足可以极大地提高调度操作的效率,进而提高一组操作的执行效率。根据本公开的示例性实现方式,如果确定在处理单元处已经执行第一队列和第二队列中的全部操作,则可以发送消息以指示处理单元已经执行处理任务中的部分。将会理解,尽管在本公开的示例性实现方式中仅以在一个处理单元处执行的过程为示例而描述了执行处理任务的具体过程,在多个处理单元中的其他处理单元处执行的操作也是类似的。通过以并行方式在全部多个处理单元处执行上文描述的方法300,可以提高每个处理单元执行处理任务中的被分给自身的一部分任务的效率,以便提高整个处理任务的执行效率。在上文中已经详细描述了如何执行处理任务的方法300的多个实现方式。根据本公开内容的示例性实现方式,还提供了用于执行处理任务的装置。在下文中,将参见图9详细描述。图9示意性示出了根据本公开内容的示例性实现方式的用于执行处理任务的装置900的框图。处理任务的多个部分中的一个部分包括将在多个处理单元中的一个处理单元处被执行的一组操作,一组操作包括第一类型和第二类型的操作。如图9所示,该装置900包括:建立模块910,配置用于建立分别用于执行第一类型的操作的第一队列和用于执行第二类型的操作的第二队列;获取模块920,配置用于根据处理任务的定义,获取在处理单元处将要被执行的一组操作、以及在多个处理单元中的其他处理单元处将要被执行的一组操作之间的依赖关系;以及执行模块930,配置用于基于依赖关系,在处理单元处分别执行第一队列中的操作和第二队列中的操作。根据本公开的示例性实现方式,进一步包括:加载模块,配置用于向处理单元中分别加载用于执行第一类型的第一组操作的第一代码以及用于执行第二类型的第二组操作的第二代码。根据本公开的示例性实现方式,执行模块930包括:第一执行模块,配置用于基于第一代码执行第一队列中的操作;以及第二执行模块,配置用于基于第二代码执行第二队列中的操作。根据本公开的示例性实现方式,进一步包括:保持模块,配置用于分别将第一代码和第二代码中的至少任一项保持在处理单元的存储器中。根据本公开的示例性实现方式,进一步包括:接收模块,配置用于在处理单元处,接收处理任务的待处理数据中的将在处理单元处被处理的数据块,数据块是按照多个处理单元的数量将待处理数据进行划分而得到的。根据本公开的示例性实现方式,执行模块930进一步包括:数据处理模块,配置用于在处理单元处,针对数据块分别执行第一队列中的操作和第二队列中的操作。根据本公开的示例性实现方式,处理任务是全局归约任务,以及多个处理单元按照环形方式被连接。根据本公开的示例性实现方式,第一组操作包括累加操作,用于将处理单元处的数据块累加至从在处理单元之前连接的先前处理单元拷贝到处理单元的累加结果,以作为处理单元的累加结果。根据本公开的示例性实现方式,第二组操作包括拷贝操作,用于将处理单元处的数据块和累加结果中的至少任一项拷贝至在处理单元之后连接的后续处理单元。根据本公开的示例性实现方式,执行模块930包括:通知模块,配置用于响应于在处理单元处已经完成第一队列中和第二队列中的任一队列中的操作,利用处理单元的硬件中断来通知其他处理单元。根据本公开的示例性实现方式,通知模块包括:第一通知模块,配置用于响应于在处理单元处已经执行第一队列中的一个累加操作,基于硬件中断通知先前处理单元执行第二队列中的下一拷贝操作。根据本公开的示例性实现方式,通知模块包括:第二通知模块,配置用于响应于在处理单元处已经执行第二队列中的一个拷贝操作,基于硬件中断通知后续处理单元执行第一队列中的下一累加操作。根据本公开的示例性实现方式,处理单元和后续处理单元共享缓存区,以及装置进一步包括:拷贝模块,配置用于从处理单元向缓存区拷贝数据块和累加结果中的至少任一项。根据本公开的示例性实现方式,进一步包括:报告模块,配置用于响应于确定在处理单元处已经执行第一队列和第二队列中的全部操作,报告处理单元已经执行处理任务中的部分。图10示出了能够实施本公开内容的多个实现方式的计算设备1000的框图。设备1000可以用于实现图3描述的方法。如图所示,设备1000包括中央处理单元(cpu)1001,其可以根据存储在只读存储器(rom)1002中的计算机程序指令或者从存储单元1008加载到随机访问存储器(ram)1003中的计算机程序指令,来执行各种适当的动作和处理。在ram1003中,还可存储设备1000操作所需的各种程序和数据。cpu1001、rom1002以及ram1003通过总线1004彼此相连。输入/输出(i/o)接口1005也连接至总线1004。设备1000中的多个部件连接至i/o接口1005,包括:输入单元1006,例如键盘、鼠标等;输出单元1007,例如各种类型的显示器、扬声器等;存储单元1008,例如磁盘、光盘等;以及通信单元1009,例如网卡、调制解调器、无线通信收发机等。通信单元1009允许设备1000通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。处理单元1001执行上文所描述的各个方法和处理,例如方法300。例如,在一些实现方式中,方法300可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1009。在一些实现方式中,计算机程序的部分或者全部可以经由rom1002和/或通信单元1009而被载入和/或安装到设备1000上。当计算机程序加载到ram1003并由cpu1001执行时,可以执行上文描述的方法300的一个或多个步骤。备选地,在其他实现方式中,cpu1001可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行方法300。根据本公开内容的示例性实现方式,提供了一种其上存储有计算机程序的计算机可读存储介质。程序被处理器执行时实现本公开内容所描述的方法。本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)等等。用于实施本公开内容的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。在本公开内容的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开内容的范围的限制。在单独的实现方式的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。当前第1页1 2 3 
技术特征:1.一种用于执行处理任务的方法,所述处理任务的多个部分中的一个部分包括将在多个处理单元中的一个处理单元处被执行的一组操作,所述一组操作包括第一类型和第二类型的操作,所述方法包括:
建立分别用于执行所述第一类型的操作的第一队列和用于执行所述第二类型的操作的第二队列;
根据所述处理任务的定义,获取在所述处理单元处将要被执行的所述一组操作、以及在所述多个处理单元中的其他处理单元处将要被执行的一组操作之间的依赖关系;以及
基于所述依赖关系,在所述处理单元处分别执行所述第一队列中的操作和所述第二队列中的操作。
2.根据权利要求1所述的方法,进一步包括:
向所述处理单元中分别加载用于执行所述第一类型的所述第一组操作的第一代码以及用于执行所述第二类型的所述第二组操作的第二代码;以及
基于所述依赖关系,在所述处理单元处分别执行所述第一队列中的操作和所述第二队列中的操作包括:
基于所述第一代码执行所述第一队列中的操作;以及
基于所述第二代码执行所述第二队列中的操作。
3.根据权利要求2所述的方法,进一步包括:
分别将所述第一代码和所述第二代码中的至少任一项保持在所述处理单元的存储器中。
4.根据权利要求1所述的方法,进一步包括:
在所述处理单元处,接收所述处理任务的待处理数据中的将在所述处理单元处被处理的数据块,所述数据块是按照所述多个处理单元的数量将所述待处理数据进行划分而得到的;
其中在所述处理单元处分别执行所述第一队列中的操作和所述第二队列中的操作包括:在所述处理单元处,针对所述数据块分别执行所述第一队列中的操作和所述第二队列中的操作。
5.根据权利要求4所述的方法,其中:
所述处理任务是全局归约任务,以及所述多个处理单元按照环形方式被连接;
所述第一组操作包括累加操作,用于将所述处理单元处的数据块累加至从在所述处理单元之前连接的先前处理单元拷贝到所述处理单元的累加结果,以作为所述处理单元的累加结果;以及
所述第二组操作包括拷贝操作,用于将所述处理单元处的累加结果拷贝至在所述处理单元之后连接的后续处理单元。
6.根据权利要求5所述的方法,其中基于所述依赖关系,在所述处理单元处分别执行所述第一队列中的操作和所述第二队列中的操作包括:
响应于在所述处理单元处已经完成所述第一队列中和所述第二队列中的任一队列中的操作,利用所述处理单元的硬件中断来通知所述其他处理单元。
7.根据权利要求6所述的方法,其中响应于在所述处理单元处已经完成所述第一队列中和所述第二队列中的任一队列中的操作,利用所述处理单元的所述硬件中断来通知所述其他处理单元包括:
响应于在所述处理单元处已经执行所述第一队列中的一个累加操作,基于所述硬件中断通知所述先前处理单元执行所述第二队列中的下一拷贝操作。
8.根据权利要求6所述的方法,其中响应于在所述处理单元处已经完成所述第一队列中和所述第二队列中的任一队列中的操作,基于所述处理单元的所述硬件中断来通知所述其他处理单元包括:
响应于在所述处理单元处已经执行所述第二队列中的一个拷贝操作,基于所述硬件中断通知所述后续处理单元执行所述第一队列中的下一累加操作。
9.根据权利要求8所述的方法,其中所述处理单元和所述后续处理单元共享缓存区,以及在所述处理单元处执行所述拷贝操作包括:从所述处理单元向所述缓存区拷贝所述累加结果。
10.根据权利要求1所述的方法,进一步包括:
响应于确定在所述处理单元处已经执行所述第一队列和所述第二队列中的全部操作,报告所述处理单元已经执行所述处理任务中的所述部分。
11.一种用于执行处理任务的装置,所述处理任务的多个部分中的一个部分包括将在多个处理单元中的一个处理单元处被执行的一组操作,所述一组操作包括第一类型和第二类型的操作,所述装置包括:
建立模块,配置用于建立分别用于执行所述第一类型的操作的第一队列和用于执行所述第二类型的操作的第二队列;
获取模块,配置用于根据所述处理任务的定义,获取在所述处理单元处将要被执行的所述一组操作、以及在所述多个处理单元中的其他处理单元处将要被执行的一组操作之间的依赖关系;以及
执行模块,配置用于基于所述依赖关系,在所述处理单元处分别执行所述第一队列中的操作和所述第二队列中的操作。
12.根据权利要求11所述的装置,进一步包括:
加载模块,配置用于向所述处理单元中分别加载用于执行所述第一类型的所述第一组操作的第一代码以及用于执行所述第二类型的所述第二组操作的第二代码;以及
所述执行模块包括:
第一执行模块,配置用于基于所述第一代码执行所述第一队列中的操作;以及
第二执行模块,配置用于基于所述第二代码执行所述第二队列中的操作。
13.根据权利要求12所述的装置,进一步包括:
保持模块,配置用于分别将所述第一代码和所述第二代码中的至少任一项保持在所述处理单元的存储器中。
14.根据权利要求11所述的装置,进一步包括:
接收模块,配置用于在所述处理单元处,接收所述处理任务的待处理数据中的将在所述处理单元处被处理的数据块,所述数据块是按照所述多个处理单元的数量将所述待处理数据进行划分而得到的;
其中所述执行模块进一步包括:数据处理模块,配置用于在所述处理单元处,针对所述数据块分别执行所述第一队列中的操作和所述第二队列中的操作。
15.根据权利要求14所述的装置,其中:
所述处理任务是全局归约任务,以及所述多个处理单元按照环形方式被连接;
所述第一组操作包括累加操作,用于将所述处理单元处的数据块累加至从在所述处理单元之前连接的先前处理单元拷贝到所述处理单元的累加结果,以作为所述处理单元的累加结果;以及
所述第二组操作包括拷贝操作,用于将所述处理单元处的数据块和累加结果中的至少任一项拷贝至在所述处理单元之后连接的后续处理单元。
16.根据权利要求15所述的装置,其中所述执行模块包括:
通知模块,配置用于响应于在所述处理单元处已经完成所述第一队列中和所述第二队列中的任一队列中的操作,利用所述处理单元的硬件中断来通知所述其他处理单元。
17.根据权利要求16所述的装置,其中所述通知模块包括:
第一通知模块,配置用于响应于在所述处理单元处已经执行所述第一队列中的一个累加操作,基于所述硬件中断通知所述先前处理单元执行所述第二队列中的下一拷贝操作。
18.根据权利要求16所述的装置,其中所述通知模块包括:
第二通知模块,配置用于响应于在所述处理单元处已经执行所述第二队列中的一个拷贝操作,基于所述硬件中断通知所述后续处理单元执行所述第一队列中的下一累加操作。
19.根据权利要求18所述的装置,其中所述处理单元和所述后续处理单元共享缓存区,以及所述装置进一步包括:拷贝模块,配置用于从所述处理单元向所述缓存区拷贝所述数据块和累加结果中的至少任一项。
20.根据权利要求11所述的装置,进一步包括:
报告模块,配置用于响应于确定在所述处理单元处已经执行所述第一队列和所述第二队列中的全部操作,报告所述处理单元已经执行所述处理任务中的所述部分。
21.一种用于执行处理任务的设备,所述设备包括:
一个或多个处理器;以及
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现根据权利要求1-10中任一项所述的方法。
22.一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现根据权利要求1-10中任一项所述的方法。
技术总结本公开内容涉及云计算领域,具体地,涉及用于执行处理任务的方法、装置、设备和存储介质。处理任务的多个部分中的一个部分包括将在多个处理单元中的一个处理单元处被执行的一组操作,一组操作包括第一类型和第二类型的操作。在该方法中,建立分别用于执行第一类型的操作的第一队列和用于执行第二类型的操作的第二队列。根据处理任务的定义,获取在处理单元处将要被执行的一组操作、以及在多个处理单元中的其他处理单元处将要被执行的一组操作之间的依赖关系。基于依赖关系,分别执行第一队列中的操作和第二队列中的操作。采用上述实现方式,可以降低调度各种类型的操作的时间和资源开销,提高处理任务的执行效率。
技术研发人员:陈庆澍;赵志彪;朱贺飞;龚小章;王勇;欧阳剑
受保护的技术使用者:百度时代网络技术(北京)有限公司;百度(美国)有限责任公司
技术研发日:2019.09.11
技术公布日:2021.03.12