CN110879744B - 利用多线程执行计算图的方法和系统 - Google Patents
利用多线程执行计算图的方法和系统 Download PDFInfo
- Publication number
- CN110879744B CN110879744B CN201811037341.0A CN201811037341A CN110879744B CN 110879744 B CN110879744 B CN 110879744B CN 201811037341 A CN201811037341 A CN 201811037341A CN 110879744 B CN110879744 B CN 110879744B
- Authority
- CN
- China
- Prior art keywords
- memory space
- threads
- computation graph
- thread
- relative index
- 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
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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/544—Buffers; Shared memory; Pipes
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Image Processing (AREA)
Abstract
提供一种利用多线程执行计算图的方法和系统,所述方法包括:获取包括至少一个操作的计算图,其中,在计算图中声明有所述至少一个操作的操作数据在内存空间的相对索引;创建多个第一线程,并为每个第一线程分配相应的内存空间;为每个第一线程复制所述计算图;根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作。在根据本发明的实施例的利用多线程执行计算图的方法和系统中,可以直接在分布式环境下拷贝计算图,以达到数据并行加速的目的,同时这种相对索引的声明方式不涉及分布式逻辑,不需要用户考虑如何处理多线程逻辑,降低了用户的使用成本和开发难度。
Description
技术领域
本发明涉及数据的并行处理领域,更具体地讲,涉及一种利用多线程执行计算图的方法和系统。
背景技术
随着各行各业需要处理的数据量的日益增多,人们需要一种易使用的分布式数据处理工具,而随着处理的问题的逐渐复杂,解决相应问题的算法也越来越复杂,给处理工具的易用性和灵活性带来了更多的挑战。计算图模型是一种通用的计算过程表示方法,普遍应用在各类数据处理平台上,它的表示方法容易理解,且灵活性很高,可以通过组合简单的操作来实现复杂的逻辑。
目前大家普遍使用的计算图执行框架的权衡方法是计算图本身并不做并行处理,使得用户可以用顺序执行的思维去声明,降低开发难度,同时将并行化细化在计算图的每一个操作中,加速执行效率。这种做法使得在一个计算节点上同时只运行一份计算图,一定程度上减小了内存消耗。
然而随着硬件的优化及其价格的降低,内存的开销逐渐不再是瓶颈,而且随着算法设计的逐渐复杂,会存在一些无法做并行化的操作,而且当用户需要一个框架并未支持的计算方法时,用户必须自己实现多线程逻辑,开发难度成倍增加,否则执行效率会成倍降低。
一种简单并且普遍适用的并行化方法是数据并行,即不同的执行单元分别处理不同的数据,这种方法在多机分布式中是最常用的方法,所以如果对于单机上的多个线程,也使用这种数据并行的方法实现多线程加速,便可以降低用户的开发成本。
然而对于计算图来说,每段待处理数据的内存空间,都由其上下游多个节点同时控制,一般会由执行节点记录数据的内存空间的实际索引。在复制计算图以进行多线程并行处理时,这个实际索引也会被复制,多个线程共用同一个实际索引表示的内存空间,也就是说,多个计算图会指向同一份数据,在多线程并行处理时会导致内存冲突,执行结果错误。如果需要避免内存冲突,则需要重复声明,增加开发难度。
发明内容
本发明的目的在于提供一种利用多线程执行计算图的方法和系统,以解决现有的计算图多线程并行处理时存在的为避免内存冲突而导致开发难度大的问题。
本发明的一方面提供一种利用多线程执行计算图的方法,其特征在于,包括:获取包括至少一个操作的计算图,其中,在计算图中声明有所述至少一个操作的操作数据在内存空间的相对索引;创建多个第一线程,并为每个第一线程分配相应的内存空间;为每个第一线程复制所述计算图;根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作。
可选地,根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作的步骤包括:利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来确定对应的计算图所包括的所述至少一个操作的操作数据的内存地址;利用所述多个第一线程根据各自确定的内存地址来执行各自的计算图所包括的所述至少一个操作。
可选地,还包括:创建多个第二线程,其中,根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作的步骤包括:利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来生成对应的计算图所包括的所述至少一个操作的操作包;以及利用所述多个第二线程来执行由所述多个第一线程创建的操作包,其中,所述操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引,或者,所述操作信息包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。
可选地,还包括:创建多个第二线程,其中,根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作的步骤包括:利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来生成对应的计算图所包括的所述至少一个操作之中接下来将被执行的操作的操作包;利用所述多个第一线程将各自生成的操作包放入缓冲队列;利用所述多个第二线程从缓冲队列中获取操作包来执行,并在操作包执行完成之后继续从缓冲队列中获取新的操作包;以及利用所述多个第二线程将操作包的执行完成情况告知对应的第一线程,使得对应的第一线程确定对应的计算图所包括的所述至少一个操作之中接下来将被执行的操作,其中,所述操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引,或者,所述操作信息包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。
可选地,所述至少一个操作涉及机器学习算法中的至少一个运算操作。
可选地,第二线程的数量大于第一线程的数量。
可选地,为每个第一线程分配相应的内存空间的步骤包括:根据所述至少一个操作的操作数据的总数量来为每个第一线程分配相应的内存空间。
本发明的另一方面提供一种利用多线程执行计算图的系统,其特征在于,包括:计算图获取装置,用于获取包括至少一个操作的计算图,其中,在计算图中声明有所述至少一个操作的操作数据在内存空间的相对索引;创建装置,用于创建多个第一线程,并为每个第一线程分配相应的内存空间;复制装置,用于为每个第一线程复制所述计算图;执行装置,用于根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作。
可选地,执行单元用于利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来确定对应的计算图所包括的所述至少一个操作的操作数据的内存地址;以及利用所述多个第一线程根据各自确定的内存地址来执行各自的计算图所包括的所述至少一个操作。
可选地,所述创建单元还用于创建多个第二线程,其中,执行单元用于利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来生成对应的计算图所包括的所述至少一个操作的操作包;以及利用所述多个第二线程来执行由所述多个第一线程创建的操作包,其中,所述操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引,或者,所述操作信息包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。
可选地,所述创建单元还用于创建多个第二线程,其中,执行单元用于利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来生成对应的计算图所包括的所述至少一个操作之中接下来将被执行的操作的操作包;利用所述多个第一线程将各自生成的操作包放入缓冲队列;利用所述多个第二线程从缓冲队列中获取操作包来执行,并在操作包执行完成之后继续从缓冲队列中获取新的操作包;以及利用所述多个第二线程将操作包的执行完成情况告知对应的第一线程,使得对应的第一线程确定对应的计算图所包括的所述至少一个操作之中接下来将被执行的操作,其中,所述操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引,或者,所述操作信息包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。
可选地,所述至少一个操作涉及机器学习算法中的至少一个运算操作。
可选地,第二线程的数量大于第一线程的数量。
可选地,创建装置用于根据所述至少一个操作的操作数据的总数量来为每个第一线程分配相应的内存空间。
本发明的另一方面提供一种包括至少一个计算装置和至少一个存储指令的存储装置的系统,其中,所述指令在被所述至少一个计算装置运行时,促使所述至少一个计算装置执行如上所述的利用多线程执行计算图的方法。
本发明的另一方面提供一种存储指令的计算机可读存储介质,其中,当所述指令被至少一个计算装置运行时,促使所述至少一个计算装置执行如上所述的利用多线程执行计算图的方法。
在根据本发明的实施例的利用多线程执行计算图的方法和系统中,在计算图中声明有其所包括的操作的操作数据在内存空间的相对索引,从而可以直接在分布式环境下拷贝计算图,以达到数据并行加速的目的,同时这种相对索引的声明方式不涉及分布式逻辑,不需要用户考虑如何处理多线程逻辑,降低了用户的使用成本和开发难度。此外根据本发明的实施例的利用多线程执行计算图的方法和系统可以支持处理流式数据,即便需要处理的数据量非常大,也可以同时兼顾开发成本与执行效率。
将在接下来的描述中部分阐述本发明另外的方面和/或优点,还有一部分通过描述将是清楚的,或者可以经过本发明的实施而得知。
附图说明
通过下面结合附图进行的详细描述,本发明的上述和其它目的、特点和优点将会变得更加清楚,其中:
图1是示出根据本发明的实施例的利用多线程执行计算图的系统的框图;
图2是示出现有的计算图与内存空间的关系图;
图3和图4是示出本发明的计算图与内存空间的关系图;
图5是示出根据本发明的实施例的利用多线程执行计算图的方法的流程图;
图6是示出根据本发明的实施例的根据多个第一线程各自的内存空间的起始地址以及相对索引来执行计算图所包括的至少一个操作的步骤的流程图。
具体实施方式
下面参照附图详细描述本发明的实施例。
图1是示出根据本发明的实施例的利用多线程执行计算图的系统的框图。如图1所示,根据本发明的实施例的利用多线程执行计算图的系统包括计算图获取装置101、创建装置102、复制装置103和执行装置104。
具体说来,计算图获取装置101用于获取包括至少一个操作的计算图。在该计算图中声明有该至少一个操作的操作数据在内存空间的相对索引。
作为示例,该计算图包括的至少一个操作也可以称为运算操作。作为示例,该至少一个操作涉及机器学习算法中的至少一个运算操作。相应的操作数据可包括操作的输入数据和输出数据。
在计算图被声明时,计算图的操作数据的内存空间由相对索引来表示,而不是由直接索引(即实际索引)来表示。在计算机领域,作为示例,内存空间的实际索引可以由8个字节的数据来表示,而根据本发明的实施例的计算图的各个操作数据的内存空间由相对索引来表示,相对索引的最大值可设置为计算图所包括的至少一个操作的操作数据的总数量(即操作数据的个数),通常这个总数量较小,可由4或2个字节的数据来表示,从而可减小计算图所占用的内存大小。
创建装置102,用于创建多个第一线程,并为每个第一线程分配相应的内存空间。
作为示例,在计算图的操作数据的内存统一由内存管理模块托管的情况下,创建装置102可利用内存管理模块为每个第一线程分配相应的内存空间。
作为示例,创建装置102可根据计算图所包括的至少一个操作的操作数据的总数量(即操作数据的个数)来为每个第一线程分配相应的内存空间。
复制装置103用于为每个第一线程复制计算图。
执行装置104用于根据多个第一线程各自的内存空间的起始地址以及相对索引来执行计算图所包括的至少一个操作。也就是说,执行装置104根据每个第一线程的内存空间的起始地址以及其所对应的计算图所包括的至少一个操作的操作数据的相对索引来执行所述计算图所包括的至少一个操作。
作为示例,执行装置104可根据每个第一线程的内存空间的起始地址以及计算图所包括的每个操作的操作数据的相对索引来确定所述每个操作的内存空间,以及根据计算图所包括的每个操作的内存空间来执行计算图所包括的每个操作。
以下将结合图2至图4描述现有技术中的计算图与内存空间的关系与本发明的区别。
图2是示出现有的计算图与内存空间的关系图。图3和图4是示出本发明的计算图与内存空间的关系图。在图2至图4中,上半部分表示内存空间的实际索引,下半部分表示计算图,其中,方框代表操作,圆圈代表操作数据在内存空间的实际索引或相对索引。
如图2所示,假设总的内存空间共有四块待操作的内存段,其实际索引为0到3,操作A的输出数据写到实际索引为1的内存空间中,操作B的输入从实际索引为1的内存空间中读取。当复制计算图以实现多线程并行执行时,复制的计算图的操作A的输出数据和操作B的输入数据仍指向实际索引为1的内存空间,因此,为了针对复制的计算图重新分配使用的内存空间,将不得不找到原有的对应关系,这个操作难实现且复杂度高。
如图3和图4所示,本发明的实施例在计算图中声明有计算图的操作A的输出数据和操作B的输入数据在内存空间的相对索引为1,创建装置102在创建第一线程0和第一线程1时,为第一线程0和第二线程1分别分配实际索引为0至1的内存空间和实际索引为2至3的内存空间。在执行针对第一线程0复制的计算图时,便会将操作A的输出数据和操作B的输入数据的内存空间确定为实际索引为0的内存空间;在执行针对第一线程1复制的计算图时,便会将操作A的输出数据和操作B的输入数据的内存空间确定为实际索引为3的内存空间,从而将第一线程0和第一线程1的计算图所处理的数据的内存空间分开,避免执行错误。
返回图1,作为示例,执行单元104可利用每个第一线程根据对应的内存空间的起始地址以及相对索引来确定对应的计算图所包括的至少一个操作的操作数据的内存地址;以及利用多个第一线程根据各自确定的内存地址来执行各自的计算图所包括的至少一个操作。即,在该示例中,由第一线程本身来执行各个计算图的操作。
在另一个实施例中,由于并行处理存在效率问题,例如,在一些情景当中,数据并行处理的方式会受到限制,比如每处理一部分数据,各个线程之间需要同步结果(作为示例,该同步处理在机器学习模型的训练过程中很常见),这时如果并行度较高,会导致每个线程所得的数据总量较小,线程的等待以及数据拷贝等额外开销占比变大,使得效率反而下降。为此,可设置专门的工作线程来获取待处理的操作并进行相应的处理,其中,所述待处理的操作附带着所需处理数据的内存位置信息,具体说来,可将与操作相关的所有信息都打包成一个操作包,这样,通过由工作线程来执行各个操作包的操作,便不会带来数据的访问冲突。也就是说,可以创建多个用于执行操作的第二线程(即,工作线程)。原持有计算图的第一线程负责打包,将操作包传递给第二线程,第二线程再根据操作包内的全部信息去执行操作。这样做的好处是使计算图的并行度与实际计算的并行度分隔开。一般来说,对于一个神经网络对应的计算图,计算图包括多个没有相互依赖关系、可以同时执行的操作,所以第一线程的数量可以少于第二线程的数量,甚至第二线程的数量可以是第一线程的数量的几倍,这样既可以减小额外开销,又可以增加计算的并行度。
具体说来,第一线程用于打包操作包,创建单元102还创建多个第二线程,第二线程用于执行计算图中的操作。
在该实施例中,执行单元104利用每个第一线程根据对应的内存空间的起始地址以及相对索引来生成对应的计算图所包括的至少一个操作的操作包;以及利用多个第二线程来执行由多个第一线程创建的操作包。
操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引。相应地,在操作包中的操作被执行时,通过操作包中的上述信息来确定操作所涉及的数据的内存地址。
或者,操作信息包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。在这种情况下,执行单元104利用第一线程基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引来生成对应操作的内存地址。相应地,在操作包中的操作被执行时,可直接利用操作包中所包括的所述操作所涉及的数据的内存地址。
作为示例,执行单元104利用每个第一线程根据对应的内存空间的起始地址以及相对索引来生成对应的计算图所包括的至少一个操作之中接下来将被执行的操作的操作包;利用多个第一线程将各自生成的操作包放入缓冲队列;利用多个第二线程中从缓冲队列获取操作包来执行,并在操作包执行完成之后继续从缓冲队列获取新的操作包;以及利用多个第二线程将操作包的执行完成情况告知对应的第一线程,使得对应的第一线程确定对应的计算图所包括的至少一个操作之中接下来将被执行的操作。也就是说,当某个操作被执行完毕后,其后续的操作才会被打包传递给缓冲队列以供第二线程来获取,因此,第二工作线程获取的操作包都是可以直接执行的操作包,而不需要等待上游依赖操作的执行。
图5是示出根据本发明的实施例的利用多线程执行计算图的方法的流程图。这里,作为示例,所述方法可通过计算机程序来执行,也可由专门的用于执行机器学习、大数据计算、或数据分析的硬件设备或软硬件资源的集合体来执行,例如,可由用于实现机器学习相关业务的机器学习平台来执行所述方法。
参照图5,在步骤S10,获取包括至少一个操作的计算图。在该计算图中声明有该至少一个操作的操作数据在内存空间的相对索引。
作为示例,该计算图包括的至少一个操作也可以称为运算操作。作为示例,该至少一个操作涉及机器学习算法中的至少一个运算操作。操作的操作数据可包括操作的输入数据和输出数据。
在计算图被声明时,计算图的操作数据的内存空间由相对索引来表示,而不是由直接索引(即实际索引)来表示。在计算机领域,作为示例,内存空间的实际索引可以由8个字节的数据来表示,而根据本发明的实施例的计算图的各个操作数据的内存空间由相对索引来表示,相对索引的最大值可设置为计算图所包括的至少一个操作的操作数据的总数量(即操作数据的个数),通常这个总数量较小,可由4或2个字节的数据来表示,从而可减小计算图所占用的内存大小。
在步骤S20创建多个第一线程,并为每个第一线程分配相应的内存空间。
作为示例,在计算图的操作数据的内存统一由内存管理模块托管的情况下,可利用内存管理模块为每个第一线程分配相应的内存空间。
作为示例,可根据计算图所包括的至少一个操作的操作数据的总数量(即操作数据的个数)来为每个第一线程分配相应的内存空间。
在步骤S30为每个第一线程复制计算图。
在步骤S40根据多个第一线程各自的内存空间的起始地址以及相对索引来执行计算图所包括的至少一个操作。也就是说,根据每个第一线程的内存空间的起始地址以及其所对应的计算图所包括的至少一个操作的操作数据的相对索引来执行所述计算图所包括的至少一个操作。
作为示例,在步骤S40,可根据每个第一线程的内存空间的起始地址以及计算图所包括的每个操作的操作数据的相对索引来确定所述每个操作的内存空间,以及根据计算图所包括的每个操作的内存空间来执行计算图所包括的每个操作。
现有技术中的计算图与内存空间的关系与本发明的区别如上文所述,在此不再赘述。
作为示例,在步骤S40,可利用每个第一线程根据对应的内存空间的起始地址以及相对索引来确定对应的计算图所包括的至少一个操作的操作数据的内存地址;以及利用多个第一线程根据各自确定的内存地址来执行各自的计算图所包括的至少一个操作。即,在该示例中,由第一线程本身来执行各个计算图的操作。
作为另一示例,根据本发明的实施例的利用多线程执行计算图的方法还包括以下步骤:创建多个第二线程,在该实施例中,在步骤S40,利用每个第一线程根据对应的内存空间的起始地址以及相对索引来生成对应的计算图所包括的至少一个操作的操作包;以及利用多个第二线程来执行由多个第一线程创建的操作包。
操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引。
或者,操作信息包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。在这种情况下,在步骤S40,利用第一线程基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引来生成对应操作的内存地址。
以下将参照图6来描述步骤S40的流程图的示例。
在步骤S601,利用每个第一线程根据对应的内存空间的起始地址以及相对索引来生成对应的计算图所包括的至少一个操作之中接下来将被执行的操作的操作包。
在步骤S602,利用多个第一线程将各自生成的操作包放入缓冲队列。
在步骤S603,利用多个第二线程中从缓冲队列获取操作包来执行,并在操作包执行完成之后继续从缓冲队列获取新的操作包。也就是说,当某个操作被执行完毕后,其后续的操作才会被打包传递给缓冲队列以供第二线程来获取,因此,第二工作线程获取的操作包都是可以直接执行的操作包,而不需要等待上游依赖操作的执行。
在步骤S604,利用多个第二线程将操作包的执行完成情况告知对应的第一线程,使得对应的第一线程确定对应的计算图所包括的至少一个操作之中接下来将被执行的操作。
在根据本发明的实施例的利用多线程执行计算图的方法和系统中,在计算图中声明有其所包括的操作的操作数据在内存空间的相对索引,从而可以直接在分布式环境下拷贝计算图,以达到数据并行加速的目的,同时这种相对索引的声明方式不涉及分布式逻辑,不需要用户考虑如何处理多线程逻辑,降低了用户的使用成本和开发难度。此外根据本发明的实施例的利用多线程执行计算图的方法和系统可以支持处理流式数据,即便需要处理的数据量非常大,也可以同时兼顾开发成本与执行效率。以上已参照图1至图6描述了根据本发明的示例性实施例的利用多线程执行计算图的方法和系统。然而,应理解的是:图1至图6中所使用的装置、系统、单元等可被分别配置为执行特定功能的软件、硬件、固件或上述项的任意组合。例如,这些系统、装置或单元等可对应于专用的集成电路,也可对应于纯粹的软件代码,还可对应于软件与硬件相结合的模块。此外,这些系统、装置或单元等所实现的一个或多个功能也可由物理实体设备(例如,处理器、客户端或服务器等)中的组件来统一执行。
此外,上述方法可通过记录在计算可读介质上的指令来实现,例如,根据本申请的示例性实施例,可提供一种存储指令的计算机可读存储介质,其中,当所述指令被至少一个计算装置运行时,促使所述至少一个计算装置执行以下步骤:获取包括至少一个操作的计算图,其中,在计算图中声明有所述至少一个操作的操作数据在内存空间的相对索引;创建多个第一线程,并为每个第一线程分配相应的内存空间;为每个第一线程复制所述计算图;根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作。
上述计算机可读介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,应注意,所述计算机程序还可用于执行除了上述步骤以外的附加步骤或者在执行上述步骤时执行更为具体的处理,这些附加步骤和进一步处理的内容已经在参照图5和图6进行相关方法的描述过程中提及,因此这里为了避免重复将不再进行赘述。
应注意,根据本发明的示例性实施例的利用多线程执行计算图的方法和系统可完全依赖计算机程序的运行来实现相应的功能,即,各个单元或装置在计算机程序的功能架构中与各步骤相应,使得整个装置或系统通过专门的软件包(例如,lib库)而被调用,以实现相应的功能。
另一方面,当图1至图6所提及的各个单元或装置以软件、固件、中间件或微代码实现时,用于执行相应操作的程序代码或者代码段可以存储在诸如存储介质的计算机可读介质中,使得处理器可通过读取并运行相应的程序代码或者代码段来执行相应的操作。
另一方面,根据本发明示例性实施例的利用多线程执行计算图的系统所包括的各个装置也可以通过硬件、软件、固件、中间件、微代码或其任意组合来实现。当以软件、固件、中间件或微代码实现时,用于执行相应操作的程序代码或者代码段可以存储在诸如存储介质的计算机可读介质中,使得处理器可通过读取并运行相应的程序代码或者代码段来执行相应的操作。
例如,实现根据本发明的示例性实施例的利用多线程执行计算图的系统可包括至少一个计算装置和至少一个存储指令的存储装置,其中,所述指令在被所述至少一个计算装置运行时,促使所述至少一个计算装置执行以下步骤:获取包括至少一个操作的计算图,其中,在计算图中声明有所述至少一个操作的操作数据在内存空间的相对索引;创建多个第一线程,并为每个第一线程分配相应的内存空间;为每个第一线程复制所述计算图;根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作。
具体说来,上述系统设备可以部署在服务器中,也可以部署在分布式网络环境中的节点装置上。此外,所述系统设备还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。系统设备的所有组件可经由总线和/或网络而彼此连接。
这里,所述系统设备并非必须是单个装置,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。所述系统设备还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子装置。
在所述系统设备中,用于执行根据本发明的示例性实施例的利用多线程执行计算图的方法的计算装置可以是处理器,这样的处理器可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,所述处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。处理器可运行存储在存储装置之一中的指令或代码,其中,所述存储装置还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,所述网络接口装置可采用任何已知的传输协议。
存储装置可与处理器集成为一体,例如,将RAM或闪存布置在集成电路微处理器等之内。此外,存储装置可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储装置和处理器可在操作上进行耦合,或者可例如通过I/O端口、网络连接等互相通信,使得处理器能够读取存储在存储装置中的文件。
以上描述了本申请的各示例性实施例,应理解,上述描述仅是示例性的,并非穷尽性的,本申请不限于所披露的各示例性实施例。在不偏离本申请的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。因此,本申请的保护范围应该以权利要求的范围为准。
Claims (14)
1.一种利用多线程执行计算图的方法,其特征在于,包括:
获取包括至少一个操作的计算图,其中,在计算图中声明有所述至少一个操作的操作数据在内存空间的相对索引;
创建多个第一线程,并为每个第一线程分配相应的内存空间;
为每个第一线程复制所述计算图;
根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作,
其中,根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作的步骤包括:
利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来确定对应的计算图所包括的所述至少一个操作的操作数据的内存地址;
利用所述多个第一线程根据各自确定的内存地址来执行各自的计算图所包括的所述至少一个操作。
2.根据权利要求1所述的方法,其特征在于,还包括:创建多个第二线程,
其中,根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作的步骤还包括:
利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来生成对应的计算图所包括的所述至少一个操作的操作包;以及
利用所述多个第二线程来执行由所述多个第一线程创建的操作包,
其中,所述操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引,或者,所述操作包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。
3.根据权利要求1所述的方法,其特征在于,还包括:创建多个第二线程,
其中,根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作的步骤还包括:
利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来生成对应的计算图所包括的所述至少一个操作之中接下来将被执行的操作的操作包;
利用所述多个第一线程将各自生成的操作包放入缓冲队列;
利用所述多个第二线程从缓冲队列中获取操作包来执行,并在操作包执行完成之后继续从缓冲队列中获取新的操作包;以及
利用所述多个第二线程将操作包的执行完成情况告知对应的第一线程,使得对应的第一线程确定对应的计算图所包括的所述至少一个操作之中接下来将被执行的操作,
其中,所述操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引,或者,所述操作包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。
4.根据权利要求1所述的方法,其特征在于,其中,所述至少一个操作涉及机器学习算法中的至少一个运算操作。
5.根据权利要求2或3所述的方法,其特征在于,其中,第二线程的数量大于第一线程的数量。
6.根据权利要求1所述的方法,其特征在于,其中,为每个第一线程分配相应的内存空间的步骤包括:根据所述至少一个操作的操作数据的总数量来为每个第一线程分配相应的内存空间。
7.一种利用多线程执行计算图的系统,其特征在于,包括:
计算图获取装置,用于获取包括至少一个操作的计算图,其中,在计算图中声明有所述至少一个操作的操作数据在内存空间的相对索引;
创建装置,用于创建多个第一线程,并为每个第一线程分配相应的内存空间;
复制装置,用于为每个第一线程复制所述计算图;
执行装置,用于根据所述多个第一线程各自的内存空间的起始地址以及所述相对索引来执行所述计算图所包括的所述至少一个操作,
其中,所述执行装置用于利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来确定对应的计算图所包括的所述至少一个操作的操作数据的内存地址;以及利用所述多个第一线程根据各自确定的内存地址来执行各自的计算图所包括的所述至少一个操作。
8.根据权利要求7所述的系统,其特征在于,所述创建装置还用于创建多个第二线程,
其中,所述执行装置还用于利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来生成对应的计算图所包括的所述至少一个操作的操作包;以及利用所述多个第二线程来执行由所述多个第一线程创建的操作包,
其中,所述操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引,或者,所述操作包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。
9.根据权利要求7所述的系统,其特征在于,所述创建装置还用于创建多个第二线程,
其中,所述执行装置还用于利用每个第一线程根据对应的内存空间的起始地址以及所述相对索引来生成对应的计算图所包括的所述至少一个操作之中接下来将被执行的操作的操作包;利用所述多个第一线程将各自生成的操作包放入缓冲队列;利用所述多个第二线程从缓冲队列中获取操作包来执行,并在操作包执行完成之后继续从缓冲队列中获取新的操作包;以及利用所述多个第二线程将操作包的执行完成情况告知对应的第一线程,使得对应的第一线程确定对应的计算图所包括的所述至少一个操作之中接下来将被执行的操作,
其中,所述操作包中具有对应内存空间的起始地址、对应操作的处理过程和对应操作的操作数据在内存空间的相对索引,或者,所述操作包中具有对应操作的处理过程以及基于对应内存空间的起始地址和对应操作的操作数据在内存空间的相对索引生成的对应操作的内存地址。
10.根据权利要求7所述的系统,其特征在于,其中,所述至少一个操作涉及机器学习算法中的至少一个运算操作。
11.根据权利要求8或9所述的系统,其特征在于,其中,第二线程的数量大于第一线程的数量。
12.根据权利要求7所述的系统,其特征在于,其中,创建装置用于根据所述至少一个操作的操作数据的总数量来为每个第一线程分配相应的内存空间。
13.一种包括至少一个计算装置和至少一个存储指令的存储装置的系统,其中,所述指令在被所述至少一个计算装置运行时,促使所述至少一个计算装置执行如权利要求1到6中的任一权利要求所述的利用多线程执行计算图的方法。
14.一种存储指令的计算机可读存储介质,其中,当所述指令被至少一个计算装置运行时,促使所述至少一个计算装置执行如权利要求1到6中的任一权利要求所述的利用多线程执行计算图的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811037341.0A CN110879744B (zh) | 2018-09-06 | 2018-09-06 | 利用多线程执行计算图的方法和系统 |
CN202211184997.1A CN115543566A (zh) | 2018-09-06 | 2018-09-06 | 利用多线程执行计算图的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811037341.0A CN110879744B (zh) | 2018-09-06 | 2018-09-06 | 利用多线程执行计算图的方法和系统 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211184997.1A Division CN115543566A (zh) | 2018-09-06 | 2018-09-06 | 利用多线程执行计算图的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110879744A CN110879744A (zh) | 2020-03-13 |
CN110879744B true CN110879744B (zh) | 2022-08-16 |
Family
ID=69727013
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211184997.1A Pending CN115543566A (zh) | 2018-09-06 | 2018-09-06 | 利用多线程执行计算图的方法和系统 |
CN201811037341.0A Active CN110879744B (zh) | 2018-09-06 | 2018-09-06 | 利用多线程执行计算图的方法和系统 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211184997.1A Pending CN115543566A (zh) | 2018-09-06 | 2018-09-06 | 利用多线程执行计算图的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN115543566A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488684A (zh) * | 2013-08-23 | 2014-01-01 | 国家电网公司 | 基于缓存数据多线程处理的电力可靠性指标快速计算方法 |
CN107609350A (zh) * | 2017-09-08 | 2018-01-19 | 厦门极元科技有限公司 | 一种二代测序数据分析平台的数据处理方法 |
CN108008975A (zh) * | 2017-12-22 | 2018-05-08 | 郑州云海信息技术有限公司 | 一种基于knl平台的图像数据的处理方法及装置 |
CN108279943A (zh) * | 2017-01-05 | 2018-07-13 | 腾讯科技(深圳)有限公司 | 索引加载方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8954986B2 (en) * | 2010-12-17 | 2015-02-10 | Intel Corporation | Systems and methods for data-parallel processing |
EP3353656B1 (en) * | 2015-10-28 | 2020-05-06 | Google LLC | Processing computational graphs |
-
2018
- 2018-09-06 CN CN202211184997.1A patent/CN115543566A/zh active Pending
- 2018-09-06 CN CN201811037341.0A patent/CN110879744B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488684A (zh) * | 2013-08-23 | 2014-01-01 | 国家电网公司 | 基于缓存数据多线程处理的电力可靠性指标快速计算方法 |
CN108279943A (zh) * | 2017-01-05 | 2018-07-13 | 腾讯科技(深圳)有限公司 | 索引加载方法和装置 |
CN107609350A (zh) * | 2017-09-08 | 2018-01-19 | 厦门极元科技有限公司 | 一种二代测序数据分析平台的数据处理方法 |
CN108008975A (zh) * | 2017-12-22 | 2018-05-08 | 郑州云海信息技术有限公司 | 一种基于knl平台的图像数据的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN115543566A (zh) | 2022-12-30 |
CN110879744A (zh) | 2020-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109669772B (zh) | 计算图的并行执行方法和设备 | |
TWI525540B (zh) | 具有橫跨多個處理器之平行資料執行緒的映射處理邏輯 | |
EP3126971B1 (en) | Program execution on heterogeneous platform | |
US9582312B1 (en) | Execution context trace for asynchronous tasks | |
US9639374B2 (en) | System and method thereof to optimize boot time of computers having multiple CPU's | |
US9262799B2 (en) | Shared memory eigensolver | |
US20170109415A1 (en) | Platform and software framework for data intensive applications in the cloud | |
US10318261B2 (en) | Execution of complex recursive algorithms | |
US20210158131A1 (en) | Hierarchical partitioning of operators | |
US11733983B2 (en) | Method and apparatus for generating metadata by a compiler | |
US8681166B1 (en) | System and method for efficient resource management of a signal flow programmed digital signal processor code | |
US9471387B2 (en) | Scheduling in job execution | |
WO2023107789A1 (en) | Deterministic replay of a multi-threaded trace on a multi-threaded processor | |
Wozniak et al. | MPI jobs within MPI jobs: A practical way of enabling task-level fault-tolerance in HPC workflows | |
US10496433B2 (en) | Modification of context saving functions | |
US8041551B1 (en) | Algorithm and architecture for multi-argument associative operations that minimizes the number of components using a latency of the components | |
CN110879744B (zh) | 利用多线程执行计算图的方法和系统 | |
WO2019118338A1 (en) | Systems and methods for mapping software applications interdependencies | |
JP2007080049A (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
US11748077B2 (en) | Apparatus and method and computer program product for compiling code adapted for secondary offloads in graphics processing unit | |
US20230205500A1 (en) | Computation architecture synthesis | |
US11368521B1 (en) | Utilizing reinforcement learning for serverless function tuning | |
US20230131430A1 (en) | Compiler device, instruction generation method, program, compiling method, and compiler program | |
CN113704687A (zh) | 一种张量计算运行方法、装置及运算系统 | |
US10545965B2 (en) | Data skew finding and analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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 |