CN111061485A - 任务处理方法、编译器、调度服务器和介质 - Google Patents
任务处理方法、编译器、调度服务器和介质 Download PDFInfo
- Publication number
- CN111061485A CN111061485A CN201911223452.5A CN201911223452A CN111061485A CN 111061485 A CN111061485 A CN 111061485A CN 201911223452 A CN201911223452 A CN 201911223452A CN 111061485 A CN111061485 A CN 111061485A
- Authority
- CN
- China
- Prior art keywords
- processed
- instruction
- instructions
- queue
- task
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Abstract
本公开提供了一种任务处理方法、编译器、调度服务器和介质。该方法包括:从任务的指令中顺次取出待处理指令;确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系;如果确定没有依赖关系,将所述待处理指令放到待处理队列中;如确定有依赖关系,将所述待处理队列中的指令并行执行,之后将所述待处理指令放到待处理队列中。本公开实施例提高了执行任务中的指令的执行效率,减少执行延时。
Description
技术领域
本公开涉及安全计算领域,特别涉及一种任务处理方法、编译器、调度服务器和介质。
背景技术
多方安全计算是指,针对无可信第三方的情况下,在多个非互信数据库之间,在数据相互保密的前提下,实现数据的计算和融合。目前多方安全计算中,设置多个计算节点。计算节点从数据方获得隐私数据的密文,基于密文进行计算,计算结果的明文只能被结果方获取。由于计算节点获取的是隐私数据的密文,不知道真正的数据,实现了在数据保密的情况下数据的计算和融合。
在每个计算节点中有一个或多个指令计算单元。目前的多方安全计算系统中,在任务指令编译的过程中,将编译后的指令一条条放进指令计算单元的队列,由指令计算单元执行。目前,一个任务维持一个队列。只有当队列中前一个指令被取出执行后,后续指令才能被取出执行。这经常导致在一个指令计算单元处理一个任务的一条指令的时候,由于单任务队列的问题,其它指令计算单元无任务执行,处于等待状态,导致系统性能降低,增加总计算延时。另外,多个指令计算单元执行任务中的指令时的数据交互也引入较多延时。因为底层使用了gRPC的send以及recv机制,在recv的等待中,引入了处理、等待的模式。这样的模式,使数据层面以及程序层面,不能较好的并行处理。
发明内容
本公开的一个目的在于提高执行任务中的指令的执行效率,减少执行延时。
根据本公开的一个方面,提供了一种任务处理方法,包括:
从任务的指令中顺次取出待处理指令;
确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系;
如果确定没有依赖关系,将所述待处理指令放到待处理队列中;
如果确定有依赖关系,将所述待处理队列中的指令并行执行,之后将所述待处理指令放到待处理队列中。
可选地,所述任务的指令中含有被赋值符号和被引用符号,预先设置第一集合。所述确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系,包括:确定所述待处理指令中的被赋值符号和被引用符号中的至少一个是否在所述第一集合中,其中,如果是,则确定所述待处理指令与之前取出且未处理的所述任务的指令的有依赖关系;如果否,则确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系。
可选地,所述如果确定没有依赖关系,所述将所述待处理指令放到待处理队列中,包括:将所述待处理指令的被赋值符号放到所述第一集合中,且将所述待处理指令放到所述待处理队列中。
可选地,所述将所述待处理队列中的指令并行执行,之后将所述待处理指令放到待处理队列中,包括:
将所述待处理队列中的指令并行执行;
清空所述待处理队列;
清空所述第一集合;
将所述待处理指令放到所述清空后的待处理队列中;
将所述待处理指令的被赋值符号放到所述第一集合中。
可选地,所述将所述待处理队列中的指令并行执行,包括:
如果所述待处理队列中的待处理指令的数目M不大于指令计算单元的数目N,获取每个指令计算单元的处理负荷;
将所述待处理队列中的待处理指令一一取出,分别分给处理负荷最轻的M个指令计算单元并行执行。
可选地,所述将所述待处理队列中的指令并行执行,包括:
如果所述待处理队列中的待处理指令的数目M大于指令计算单元的数目N,假设M=kN+p,k和p为正整数,1≦p<N,将所述待处理队列中的kN个待处理指令分给N个指令计算单元执行,每个指令计算单元分配k个待处理指令;
将剩余的p个待处理指令分别分配给所述N个指令计算单元中p个指令计算单元执行。
可选地,所述将剩余的p个待处理指令分别分配给所述N个指令计算单元中p个指令计算单元执行,包括:
获取所述N个指令计算单元的处理负荷;
将剩余的p个待处理指令分别分给所述N个指令计算单元中处理负荷最轻的p个指令计算单元执行。
根据本公开的一个方面,提供了一种编译器,包括:
待处理指令取出单元,用于从任务的指令中顺次取出待处理指令;
依赖关系确定单元,用于确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系;
无依赖关系处理单元,用于如果确定没有依赖关系,将所述待处理指令放到待处理队列中;
有依赖关系处理单元,用于如果确定有依赖关系,将所述待处理队列中的指令并行执行,之后将所述待处理指令放到待处理队列中。
可选地,所述任务的指令中含有被赋值符号和被引用符号,预先设置第一集合。所述依赖关系确定单元进一步用于:确定所述待处理指令中的被赋值符号和被引用符号中的至少一个是否在所述第一集合中,其中,如果是,则确定所述待处理指令与之前取出且未处理的所述任务的指令的有依赖关系;如果否,则确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系。
可选地,所述无依赖关系处理单元进一步用于:如果确定没有依赖关系,将所述待处理指令的被赋值符号放到所述第一集合中,且将所述待处理指令放到所述待处理队列中。
可选地,所述有依赖关系处理单元进一步用于:
将所述待处理队列中的指令并行执行;
清空所述待处理队列;
清空所述第一集合;
将所述待处理指令放到所述清空后的待处理队列中;
将所述待处理指令的被赋值符号放到所述第一集合中。
可选地,所述将所述待处理队列中的指令并行执行,包括:
如果所述待处理队列中的待处理指令的数目M不大于指令计算单元的数目N,获取每个指令计算单元的处理负荷;
将所述待处理队列中的待处理指令一一取出,分别分给处理负荷最轻的M个指令计算单元并行执行。
可选地,所述将所述待处理队列中的指令并行执行,包括:
如果所述待处理队列中的待处理指令的数目M大于指令计算单元的数目N,假设M=kN+p,k和p为正整数,1≦p<N,将所述待处理队列中的kN个待处理指令分给N个指令计算单元执行,每个指令计算单元分配k个待处理指令;
将剩余的p个待处理指令分别分配给所述N个指令计算单元中p个指令计算单元执行。
可选地,所述将剩余的p个待处理指令分别分配给所述N个指令计算单元中p个指令计算单元执行,包括:
获取所述N个指令计算单元的处理负荷;
将剩余的p个待处理指令分别分给所述N个指令计算单元中处理负荷最轻的p个指令计算单元执行。
根据本公开的一个方面,提供了一种多方安全计算中的调度服务器,包括:
存储器,存储有计算机可读指令;
处理器,读取存储器存储的计算机可读指令,以执行以上所述的方法。
根据本公开的一个方面,提供了一种计算机可读程序介质,其存储有计算机可读指令,当所述计算机可读指令被处理器执行时,使计算机执行如上所述的方法。
本公开实施例中,在任务的编译过程中,不是将任务的指令顺次取出执行,而是针对每一个指令,考察该指令与任务中的前续未执行指令是否有依赖关系,如果没有依赖关系,将其放入待处理队列中,直到确定出一个取出的指令与前续未执行指令有依赖关系,才把已放入待处理队列中的指令全取出并行执行。这样,互相没有依赖关系的指令在待处理队列中就会一直积攒,直到后续的指令与在待处理队列中的已有指令开始有依赖关系,此时就将待处理队列中这些互相没有依赖关系的指令全取回并行执行,与顺次执行相比,减少了总的延时,且设置待处理队列来积攒的方式也最大限度保证让尽量多的指令能够并行执行。另外,多个并行处理的指令没有依赖关系,不需要相互交换数据,也节省了处理时间,提高了执行效率,减少执行延时。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
通过参照附图详细描述其示例实施例,本公开的上述和其它目标、特征及优点将变得更加显而易见。
图1示出了根据本公开一个实施例的任务处理方法所应用的多方安全计算系统的体系构架图;
图2示出了根据本公开一个实施例的计算节点内部结构图;
图3示出了目前为数据单元分配处理其的指令计算单元的示意图;
图4示出了根据本公开一个实施例的任务处理方法的流程图;
图5示出了根据本公开一个实施例的编译器的内部框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些示例实施方式使得本公开的描述将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多示例实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的示例实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、步骤等。在其它情况下,不详细示出或描述公知结构、方法、实现或者操作以避免喧宾夺主而使得本公开的各方面变得模糊。
附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
图1示出了根据本公开一个实施例的任务处理方法所应用的多方安全计算系统的体系构架图。该多方安全计算系统包括任务发起方101、调度服务器102、多个计算节点103。当然,多方安全计算系统还包括数据方、结果方等。由于它们与本公开实施例没有直接关系,故在图中省略了它们以突出本公开实施例的重点。
任务发起方101是发起任务的节点,其产生任务的源代码。计算节点104是执行任务的处理的具体节点。调度服务器102是在将任务分配给计算节点104的服务器。
图2示出了根据本公开一个实施例的计算节点104内部结构图。计算节点104包括存储器14和处理器12。为了避免模糊本发明的主要思想,该图仅示出了与本发明实施例的实现有关的部分,至于输入输出接口、电源等无关的部件,在此不作描述。
在一些实施例中,每个处理器12可以包括用于处理指令的一个或多个处理器核120,指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。在一些实施例中,每个处理器核120可以用于处理特定的指令集。在一些实施例中,指令集可以支持复杂指令集计算(Complex Instruction Set Computing,CISC)、精简指令集计算(Reduced Instruction Set Computing,RISC)或基于超长指令字(Very LongInstruction Word,VLIW)的计算。不同的处理器核120可以各自处理不同或相同的指令集。在一些实施例中,处理器核120还可以包括其他处理模块,例如数字信号处理器(DigitalSignal Processor,DSP)等。
在一些实施例中,高速缓冲存储器18可以被全部或部分集成于处理器12中。且根据不同架构,高速缓冲存储器18可以是位于各个处理器核101之内和/或之外的单个或多级的内部高速高速缓冲存储器,也可以包括面向指令的指令高速缓存和面向数据的数据高速缓存。在一些实施例中,处理器12中的各个部件可以共享至少一部分的高速缓冲存储器。处理器12还可以包括外部高速缓存(未示出),其他高速缓存结构也可以作为处理器12的外部高速缓存。
在一些实施例中,如图2所示,处理器12可以包括寄存器堆126(Register File),寄存器堆126可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型的。例如,寄存器堆126可以包括:整数寄存器、浮点寄存器、状态寄存器、指令寄存器和指针寄存器等。寄存器堆126中的寄存器可以选用通用寄存器来实现,也可以根据处理器12的实际需求采用特定的设计。
处理器12用于执行指令序列(即程序)。处理器12执行每个指令的过程包括:从存放指令的存储器中取出指令、对取出的指令进行编译、执行编译后的指令、保存指令执行结果等步骤,如此循环,直到执行完指令序列中的全部指令或遇到停机指令。
为了实现上述过程,处理器12可以包含取指令单元124、指令译码器125、指令计算单元121(可能有多个)和指令引退单元131等。
取指令单元124作为处理器12的启动引擎,用于将指令从存储器14中搬运到指令寄存器(可以是图2示出的寄存器堆26中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。
取出指令后,处理器12进入指令编译阶段,指令编译器125按照预定的指令格式,对取回的指令进行编译,以获得取回的指令所需的操作数获取信息,从而为指令执行单元121的操作做准备。操作数获取信息例如指向立即数、寄存器或其他能够提供源操作数的软件/硬件。同时,指令编译器125还将各个指令高效地分配至不同的指令计算单元121,使得多个指令的并行计算成为可能。
指令引退单元131主要用于负责将指令计算单元121产生的计算结果写回到相应的存储位置(例如为处理器12内部的寄存器)中,以使后续指令能够从该存储位置处快速获取相应的执行结果。
存储控制单元123是对向存储器14的读写进行控制的单元,它主要完成向存储器14写入/读取程序或数据对象时物理地址与逻辑地址的转换等。
下面结合上述部件对任务执行时任务中的指令的执行过程作一个总体描述。
任务中的各指令分配到某个计算设备10上后,首先进入该计算设备10的存储器14。
取指令单元124逐条从存储器14中取出任务中的指令。指令被取指令单元124获取之后,指令编译器125可以对指令进行编译处理,使得指令中的源操作数可被获取。编译的过程中,指令被分配至相应的指令计算单元121,该指令计算单元121可以对指令的源操作数进行相应的运算(例如由算术逻辑单元对存储于寄存器中的源操作数进行运算)以获得指令对应的地址信息,并根据该地址信息发起相应的请求,例如地址转译请求、写访问请求等。
指令的源操作数通常包括地址操作数,指令计算单元121对该地址操作数进行运算以获得指令对应的虚拟地址或物理地址。虚拟地址可以转换成物理地址。指令计算单元121可以根据转译后的物理地址通过存储控制单元123访问高速缓冲存储器18和/或存储器14。
本公开实施例针对单任务的指令可能由编译器125分配给不同的指令计算单元103去处理,使得指令的执行并行化,提高指令执行效率。现有技术中,如图3所示,调度服务器获得由任务发起方101提交的任务,进行编译时,从数据方读取数据到数据单元。数据单元设置成单队列。先从第一个数据单元取出数据交给第一个指令计算单元执行。只有第一个指令计算单元执行完后,才从第二个数据单元取出数据交给第二个指令计算单元执行。每个指令计算单元要等到上一个指令计算单元的数据执行完后,才能获得自己需要的数据开始执行,效率低下。
如图4所示,根据本公开的一个实施例,提出了一种任务处理方法,包括:
步骤210、从任务的指令中顺次取出待处理指令;
步骤220、确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系;
步骤230、如果确定没有依赖关系,将所述待处理指令放到待处理队列中;
步骤240、如果确定有依赖关系,将所述待处理队列中的指令并行执行,将所述待处理指令放到待处理队列中。
下面分别对以上步骤进行详细描述。
在步骤210中,从任务的指令中顺次取出待处理指令。
这里的任务的指令是指进入计算节点104的任务的指令。该指令首先由取指令单元124取出,由编译器125进行编译。本公开实施例在编译的过程中,先从任务的指令中取出第一条待处理指令,经过步骤210-240的执行后,再取出第二条待处理指令,经过步骤210-240的执行后,再取出第三条待处理指令,以此类推。取出的每条待处理指令经过步骤210-240的处理,先进入待处理队列,然后等到后续确定出后续的指令与前续的指令有依赖关系时,将该待处理队列解散,里面的指令并行执行,如后面的步骤所述。
在步骤220中,确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系。
如果一个待处理指令的执行要依赖之前取出的某指令的执行,则认为该待处理指令与之前的该指令有依赖关系。举例来说,当前待处理指令是f=c*d,之前有一条指令是c=a,则指令f=c*d要依赖之前指令c=a的执行,因为指令c=a执行后,才能知道c取什么值,才能代入f=c*d。确定是否与之前的执行有依赖关系,是为了判定当前指令是否可以与之前的指令并行执行。如果有依赖关系,则可以并行执行,提高执行效率。
在一个实施例中,可以通过设置第一集合来判定是否有依赖关系。
一般来说,所述任务的指令中含有被赋值符号和被引用符号。被赋值符号就是指令所赋值的对象,被引用符号就是指令给该对象赋的值引用的对象。例如,f=c*d中,就是将=c*d的值赋给f,被赋值符号就是f,被引用符号就是c和d。
预先设置第一集合,该集合初始时为空,当在步骤210中取出一条待处理指令后,确定该待处理指令中的被赋值符号和被引用符号中的至少一个是否在所述第一集合中,其中,如果是,则确定所述待处理指令与之前取出且未处理的所述任务的指令有依赖关系;如果否,则确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系。
例如,取出的待处理指令是f=c*d,被赋值符号是f,被引用符号是c和d,假如第一集合为{c},即被引用符号c在第一集合中,确定所述待处理指令与之前取出且未处理的所述任务的指令有依赖关系。如果第一集合为{d},则被赋值符号f在第一集合中,也确定所述待处理指令与之前取出且未处理的所述任务的指令有依赖关系。如果第一集合为空或为{g},则被赋值符号f、被引用符号c和d都不在第一集合中,确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系。
通过设置第一集合的方式,能够简化确定是否有依赖关系的操作。
在步骤230中,如果确定没有依赖关系,将所述待处理指令放到待处理队列中。
如果确定没有依赖关系,说明这个待处理指令与任务中前面的待处理指令是相对独立的,可以并行执行以提高效率,但本公开实施例没有立即将它和前面的指令并行执行,而是先放在待处理队列中积攒,是因为,尽管当前待处理指令与之前取出的指令都没有依赖关系,但下一条取出的指令可能与当前和之前取出的指令也没有依赖关系,如果草草地将当前待处理指令与之前取出的指令并行放到队列中执行,下一条取出的也没有依赖关系的指令就丧失了与当前待处理指令、和之前取出的指令并行指令的机会,不利于进一步提高效率,因此,可以将它们暂存在待处理队列中,一旦下一条取出的指令是一个与之前的指令有依赖关系的指令,这时才并行执行待处理队列中的所有指令。即,在之后确定出之后的待处理指令与那时的待处理队列中的指令有依赖关系的情况下,将所述待处理队列中的待处理指令并行执行。
在一个实施例中,步骤230还包括:将所述待处理指令的被赋值符号放到所述第一集合中,且将所述待处理指令放到所述待处理队列中。
也就是说,除了将待处理指令放到待处理队列中,还要将待处理指令的被赋值符号放到第一集合中。第一集合中的被赋值符号,是用来与后续取出的指令中的被赋值符号和被引用符号做比的。一旦后续取出的指令中的被赋值符号和被引用符号与第一集合中的某个被赋值符号一致,说明后续取出的指令要依赖于这个被赋值符号被赋值后才能执行,即有依赖关系,因此,要及时更新第一集合,使其反映所有之前取出且未处理的所述任务的指令中的被赋值符号。可以理解的是,被取出且未处理的所述任务的指令可以放在一个待处理队列中,也可以放在不同的待处理队列中。
在步骤240中,如果确定有依赖关系,将所述待处理队列中的指令并行执行,之后将所述待处理指令放到待处理队列中。
如上述步骤230中提到的,如果确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系,不是立即将它和前面的指令并行执行,而是先放在待处理队列中积攒,以考虑到:尽管当前待处理指令与之前取出的指令都没有依赖关系,但下一条取出的指令可能与当前和之前取出的指令也没有依赖关系,如果草草地将当前待处理指令与之前取出的指令并行放到队列中执行,下一条取出的也没有依赖关系的指令就丧失了与当前待处理指令、和之前取出的指令并行指令的机会,不利于进一步提高效率。步骤240恰恰呼应了这一点。如果确定所述待处理指令与之前取出且未处理的所述任务的指令有依赖关系,这时所述任务的待处理队列中的指令可以并行执行。然后,将当前的待处理指令放到待处理队列中,重新开始积攒。
取出的待处理指令可以放在同一个待处理队列中,也可以放在不同的待处理队列中。
若取出且未处理的待处理指令放在一个队列中,在一种实施方式中,在一个实施例中,步骤240具体包括:
将所述待处理队列中的指令并行执行;
清空所述待处理队列;
清空所述第一集合;
将所述待处理指令放到所述清空后的待处理队列中;
将所述待处理指令的被赋值符号放到所述第一集合中。
即,在将当前待处理队列中的指令并行执行后,待处理队列中的指令都已执行,则可以清空,从而可以积攒后续的指令。由于第一集合中的被赋值符号是与待处理队列中的指令有对应关系的,该待处理队列已经被清空,第一集合也被清空。然后,将对其待处理指令放到清空后的待处理队列中,重新积攒,同时,将所述待处理指令的被赋值符号放到所述第一集合中,以便在第一集合中反映所有之前取出的、但还未处理的指令的被赋值符号,一旦后续有待处理指令的被赋值符号或被引用符号与第一集合中的被赋值符号一致,则认为该待处理指令与之前的指令存在了依赖关系,此时将待处理队列中所有的待处理指令并行执行,达到提高效率的目的。
在取出且未处理的待处理指令放在一个队列中的情况下,也可以不清空所述待处理队列和第一集合,而是采用加入特定标记的方式。这时,步骤240具体包括:
将所述待处理队列中的指令并行执行;
将所述待处理指令加上预定标记,放到所述待处理队列中;
将所述待处理指令的被赋值符号加上预定标记,放到所述第一集合中。
在这种情况下,不清空第一集合和待处理队列,也能达到区分之前已经处理过的指令和未处理的指令的目的。这样,确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系时,就可以确定所述待处理指令中的被赋值符号和被引用符号中的至少一个是否在所述第一集合中的带有所述预定标记的待处理指令中,其中,如果是,则确定所述待处理指令与之前取出且未处理的所述任务的指令的有依赖关系;如果否,则确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系。另外,之后如果确定有依赖关系,可以仅将所述待处理队列中的带预定标记的指令并行执行,而不是全部并行执行。
在取出且未处理的待处理指令放在另一个队列中的情况下,步骤240包括:
将所述待处理队列中的指令并行执行;
将所述待处理指令放到与所述待处理队列不同的另一待处理队列中;
将所述待处理指令的被赋值符号放到与所述第一集合不同的第二集合中。
这样,确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系时,就可以确定所述待处理指令中的被赋值符号和被引用符号中的至少一个是否在所述第二集合中,其中,如果是,则确定所述待处理指令与之前取出且未处理的所述任务的指令的有依赖关系;如果否,则确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系。另外,之后如果确定有依赖关系,可以仅将所述另一待处理队列中的指令并行执行。
在所述将所述待处理队列中的指令并行执行的过程中,可以按照最小处理负荷的原则选择交由执行的指令计算单元,从而均衡各个指令计算单元的处理负荷。有所述第一集合中的待处理指令的数目M不大于指令计算单元的数目N、和所述第一集合中的待处理指令的数目M大于指令计算单元的数目N两种情况。
在所述第一集合中的待处理指令的数目M不大于指令计算单元的数目N的实施例中,所述将所述待处理队列中的指令并行执行,包括:
如果所述待处理队列中的待处理指令的数目M不大于指令计算单元的数目N,获取每个指令计算单元的处理负荷;
将所述待处理队列中的待处理指令一一取出,分别分给处理负荷最轻的M个指令计算单元并行执行。
处理负荷是指指令计算单元当前的处理负担,可以体现为正在处理的任务数、正在处理的任务占用的CPU能力、正在处理的任务占用的存储容量等。在一个实施例中,调度服务器102可以向每个指令计算单元103发送处理负荷查询请求,由每个指令计算单元103分别返回该指令计算单元当前的处理负荷的应答,在该应答中携带有该指令计算单元当前的处理负荷。调度服务器102从中将处理负荷从小到大排序,选择前M名的指令计算单元,将M个待处理指令分别分配到该M个指令计算单元对应的队列中。该实施例有利于指令计算单元负荷的均衡。
所述待处理队列中的待处理指令的数目M大于指令计算单元的数目N,有可能是M大于N,但大出来的差值M-N小于N的情况,也有可能是M大于N的二倍以上的情况,这时候,假设M=kN+p,k和p为正整数,1≦p<N,将所述待处理队列中的kN个待处理指令分配给N个指令计算单元对,每个指令计算单元分配有k个待处理指令。然后,将剩余的p个待处理指令分别分配到所述N个指令计算单元中p个指令计算单元。
将剩余的p个待处理指令分别分配到所述N个指令计算单元中p个指令计算单元,可以采取从所述N个指令计算单元中随机选取p个指令计算单元的方式,也可以采取按照指令计算单元处理负荷分配的方式。按照指令计算单元处理负荷分配的方式,有利于均衡各指令计算单元的处理负荷。
在一个实施例中,所述将剩余的p个待处理指令分别分配给所述N个指令计算单元中p个指令计算单元执行,包括:
获取所述N个指令计算单元的处理负荷;
将剩余的p个待处理指令分别分配给所述N个指令计算单元中处理负荷最轻的p个指令计算单元。
获取N个指令计算单元的处理负荷,可以按照与上相同的查询、应答的方式进行。将剩余的p个待处理指令分别放到所述N个指令计算单元中处理负荷最轻的p个指令计算单元对应的队列中,可以通过将N个指令计算单元的处理负荷由小到大排序,找出前p名的方式实现。
下面结合以下的任务代码实例描述本公开一个具体实施例的实现过程。
首先,计算节点104中的编译器在编译时先取出上面的指令1。由于此时第一集合为空,待处理队列为空,指令1的被赋值符号c和被引用符号a不在第一集合中,因此,将指令1的被赋值符号c加入第一集合中,第一集合变成{c};将指令1放入待处理队列中,待处理队列变成{c=a}。
然后,编译器取出上面的指令2。此时,第一集合为{c},待处理队列为{c=a}。指令2的被赋值符号d和被引用符号b都不在第一集合中,因此,将指令2的被赋值符号d加入第一集合中,第一集合变成{c,d};将指令2放入待处理队列中,待处理队列变成{c=a,d=b}。
然后,编译器取出上面的指令3。此时,第一集合为{c,d},待处理队列为{c=a,d=b}。指令3的被赋值符号e和被引用符号a,b都不在第一集合中,因此,将指令3的被赋值符号e加入第一集合中,第一集合变成{c,d,e};将指令3放入待处理队列中,待处理队列变成{c=a,d=b,e=a*b}。
然后,编译器取出上面的指令4。此时,第一集合为{c,d,e},待处理队列为{c=a,d=b,e=a*b}。指令4的被引用符号c,d在第一集合中,这时需要将待处理队列{c=a,d=b,e=a*b}中的三条指令分别分配给三个指令计算单元执行。然后,清空第一集合和待处理队列。将指令4中的被赋值符号f加入所述第一集合,将指令4加入所述待处理队列,待处理队列变成{f=c*d}。
然后,编译器取出上面的指令5。此时,第一集合为{f},待处理队列为{f=c*d}。指令5的被引用符号f在第一集合中,这时需要将待处理队列{f=c*d}中的指令f=c*d取出,分配给一个指令计算单元。然后,清空第一集合和待处理队列。将指令5中的被赋值符号g加入所述第一集合,将指令5加入所述待处理队列,待处理队列变成{g=e+f}。
然后,编译器取出上面的指令6。将待处理队列{g=e+f}的指令g=e+f取出,分配给一个指令计算单元。然后,清空第一集合和待处理队列。返回了变量g,作为上述任务的处理结果。
通过本公开实施例,用数据流分析方法,找出单一任务中的多个数据依赖关系,并由此产生数据路径与指令计算单元的队列绑定,可以让同一任务的互相没有依赖关系的指令被多个指令计算单元并行执行,从而减少指令计算单元处理延时,提高指令计算单元处理效率。
本发明上述实施例中所述的指令计算单元可以为:服务器的内核,也可以为执行指令的线程,或其他执行指令的单元,本发明对此不做限定。
根据本公开的一个实施例,如图4所示,提供了一种编译器,包括:
待处理指令取出单元310,用于从任务的指令中顺次取出待处理指令;
依赖关系确定单元320,用于确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系;
无依赖关系处理单元330,用于如果确定没有依赖关系,将所述待处理指令放到待处理队列中;
有依赖关系处理单元340,用于如果确定有依赖关系,将所述待处理队列中的指令并行执行,之后将所述待处理指令放到待处理队列中。
可选地,所述任务的指令中含有被赋值符号和被引用符号,预先设置第一集合。所述依赖关系确定单元320进一步用于:确定所述待处理指令中的被赋值符号和被引用符号中的至少一个是否在所述第一集合中,其中,如果是,则确定所述待处理指令与之前取出且未处理的所述任务的指令的有依赖关系;如果否,则确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系。
可选地,所述无依赖关系处理单元330进一步用于:如果确定没有依赖关系,将所述待处理指令的被赋值符号放到所述第一集合中,且将所述待处理指令放到所述待处理队列中。
可选地,所述有依赖关系处理单元340进一步用于:
将所述待处理队列中的指令并行执行;
清空所述待处理队列;
清空所述第一集合;
将所述待处理指令放到所述清空后的待处理队列中;
将所述待处理指令的被赋值符号放到所述第一集合中。
可选地,所述将所述待处理队列中的指令并行执行,包括:
如果所述待处理队列中的待处理指令的数目M不大于指令计算单元的数目N,获取每个指令计算单元的处理负荷;
将所述待处理队列中的待处理指令一一取出,分别分给处理负荷最轻的M个指令计算单元并行执行。
可选地,所述将所述待处理队列中的指令并行执行,包括:
如果所述待处理队列中的待处理指令的数目M大于指令计算单元的数目N,假设M=kN+p,k和p为正整数,1≦p<N,将所述待处理队列中的kN个待处理指令分给N个指令计算单元执行,每个指令计算单元分配k个待处理指令;
将剩余的p个待处理指令分别分配给所述N个指令计算单元中p个指令计算单元执行。
可选地,所述将剩余的p个待处理指令分别分配给所述N个指令计算单元中p个指令计算单元执行,包括:
获取所述N个指令计算单元的处理负荷;
将剩余的p个待处理指令分别分给所述N个指令计算单元中处理负荷最轻的p个指令计算单元执行。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
在本公开的示例性实施例中,还提供了一种计算机程序介质,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行上述方法实施例部分描述的方法。
根据本公开的一个实施例,还提供了一种用于实现上述方法实施例中的方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本公开实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。
Claims (10)
1.一种任务处理方法,其特征在于,包括:
从任务的指令中顺次取出待处理指令;
确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系;
如果确定没有依赖关系,将所述待处理指令放到待处理队列中;
如果确定有依赖关系,将所述待处理队列中的指令并行执行,并将所述待处理指令放到待处理队列中。
2.根据权利要求1所述的方法,其特征在于,所述任务的指令中含有被赋值符号和被引用符号,预先设置第一集合,
所述确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系,包括:确定所述待处理指令中的被赋值符号和被引用符号中的至少一个是否在所述第一集合中,其中,如果是,则确定所述待处理指令与之前取出且未处理的所述任务的指令的有依赖关系;如果否,则确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系。
3.根据权利要求2所述的方法,其特征在于,所述如果确定没有依赖关系,所述将所述待处理指令放到待处理队列中,包括:
将所述待处理指令的被赋值符号放到所述第一集合中,且将所述待处理指令放到所述待处理队列中。
4.根据权利要求2所述的方法,其特征在于,所述将所述待处理队列中的指令并行执行,并将所述待处理指令放到待处理队列中,包括:
将所述待处理队列中的指令并行执行;
清空所述待处理队列;
清空所述第一集合;
将所述待处理指令放到所述清空后的待处理队列中;
将所述待处理指令的被赋值符号放到所述第一集合中。
5.一种编译器,其特征在于,包括:
待处理指令取出单元,用于从任务的指令中顺次取出待处理指令;
依赖关系确定单元,用于确定所述待处理指令与之前取出且未处理的所述任务的指令是否有依赖关系;
无依赖关系处理单元,用于如果确定没有依赖关系,将所述待处理指令放到待处理队列中;
有依赖关系处理单元,用于如果确定有依赖关系,将所述待处理队列中的指令并行执行,并将所述待处理指令放到待处理队列中。
6.根据权利要求5所述的编译器,其特征在于,所述任务的指令中含有被赋值符号和被引用符号,预先设置第一集合,
所述依赖关系确定单元进一步用于:确定所述待处理指令中的被赋值符号和被引用符号中的至少一个是否在所述第一集合中,其中,如果是,则确定所述待处理指令与之前取出且未处理的所述任务的指令的有依赖关系;如果否,则确定所述待处理指令与之前取出且未处理的所述任务的指令没有依赖关系。
7.根据权利要求6所述的编译器,其特征在于,所述无依赖关系处理单元进一步用于:
如果确定没有依赖关系,将所述待处理指令的被赋值符号放到所述第一集合中,且将所述待处理指令放到所述待处理队列中。
8.根据权利要求6所述的编译器,其特征在于,所述有依赖关系处理单元进一步用于:
将所述待处理队列中的指令并行执行;
清空所述待处理队列;
清空所述第一集合;
将所述待处理指令放到所述清空后的待处理队列中;
将所述待处理指令的被赋值符号放到所述第一集合中。
9.一种计算节点,其特征在于,包括:
如权利要求5-8任一个所述的编译器;
多个指令计算单元,用于并行执行所述待处理队列中的指令。
10.一种计算机可读程序介质,其特征在于,其存储有计算机可读指令,当所述计算机可读指令被处理器执行时,使计算机执行权利要求1-4中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911223452.5A CN111061485A (zh) | 2019-12-03 | 2019-12-03 | 任务处理方法、编译器、调度服务器和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911223452.5A CN111061485A (zh) | 2019-12-03 | 2019-12-03 | 任务处理方法、编译器、调度服务器和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111061485A true CN111061485A (zh) | 2020-04-24 |
Family
ID=70299565
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911223452.5A Pending CN111061485A (zh) | 2019-12-03 | 2019-12-03 | 任务处理方法、编译器、调度服务器和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061485A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111258590A (zh) * | 2020-05-06 | 2020-06-09 | 华控清交信息科技(北京)有限公司 | 一种代码执行方法、装置和用于代码执行的装置 |
WO2021217300A1 (zh) * | 2020-04-26 | 2021-11-04 | 深圳市大疆创新科技有限公司 | 并行执行单元的管理装置、方法及电子设备 |
CN117519799A (zh) * | 2023-11-06 | 2024-02-06 | 摩尔线程智能科技(北京)有限责任公司 | 指令调度方法及装置、和电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6918111B1 (en) * | 2000-10-03 | 2005-07-12 | Sun Microsystems, Inc. | System and method for scheduling instructions to maximize outstanding prefetches and loads |
CN108681565A (zh) * | 2018-04-28 | 2018-10-19 | 百度在线网络技术(北京)有限公司 | 区块链数据并行处理方法、装置、设备和存储介质 |
CN109697122A (zh) * | 2017-10-20 | 2019-04-30 | 华为技术有限公司 | 任务处理方法、设备及计算机存储介质 |
-
2019
- 2019-12-03 CN CN201911223452.5A patent/CN111061485A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6918111B1 (en) * | 2000-10-03 | 2005-07-12 | Sun Microsystems, Inc. | System and method for scheduling instructions to maximize outstanding prefetches and loads |
CN109697122A (zh) * | 2017-10-20 | 2019-04-30 | 华为技术有限公司 | 任务处理方法、设备及计算机存储介质 |
CN108681565A (zh) * | 2018-04-28 | 2018-10-19 | 百度在线网络技术(北京)有限公司 | 区块链数据并行处理方法、装置、设备和存储介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021217300A1 (zh) * | 2020-04-26 | 2021-11-04 | 深圳市大疆创新科技有限公司 | 并行执行单元的管理装置、方法及电子设备 |
CN111258590A (zh) * | 2020-05-06 | 2020-06-09 | 华控清交信息科技(北京)有限公司 | 一种代码执行方法、装置和用于代码执行的装置 |
CN111258590B (zh) * | 2020-05-06 | 2020-08-18 | 华控清交信息科技(北京)有限公司 | 一种代码执行方法、装置和用于代码执行的装置 |
CN117519799A (zh) * | 2023-11-06 | 2024-02-06 | 摩尔线程智能科技(北京)有限责任公司 | 指令调度方法及装置、和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20100107174A1 (en) | Scheduler, processor system, and program generation method | |
US10235180B2 (en) | Scheduler implementing dependency matrix having restricted entries | |
US9021241B2 (en) | Combined branch target and predicate prediction for instruction blocks | |
US10733019B2 (en) | Apparatus and method for data processing | |
JP3311462B2 (ja) | コンパイル処理装置 | |
JP2004171234A (ja) | マルチプロセッサシステムにおけるタスク割り付け方法、タスク割り付けプログラム及びマルチプロセッサシステム | |
CN111061485A (zh) | 任务处理方法、编译器、调度服务器和介质 | |
KR20010095074A (ko) | 다중 스레드 초장 명령어 프로세서, 명령어 처리 방법 및그 제품, 및 명령어 컴파일링 제품 및 컴파일러 | |
US11188348B2 (en) | Hybrid computing device selection analysis | |
US9164769B2 (en) | Analyzing data flow graph to detect data for copying from central register file to local register file used in different execution modes in reconfigurable processing array | |
CN102257478B (zh) | 操作数据结构 | |
US20130007762A1 (en) | Processing workloads using a processor hierarchy system | |
US6675380B1 (en) | Path speculating instruction scheduler | |
JP2010079622A (ja) | マルチコアプロセッサシステム、および、そのタスク制御方法 | |
US20100095091A1 (en) | Processor, Method and Computer Program | |
US20240086359A1 (en) | Dynamic allocation of arithmetic logic units for vectorized operations | |
JP2007188523A (ja) | タスク実行方法およびマルチプロセッサシステム | |
US11080063B2 (en) | Processing device and method of controlling processing device | |
US9430244B1 (en) | Run-time code parallelization using out-of-order renaming with pre-allocation of physical registers | |
WO2017031976A1 (en) | Processor and method of handling an instruction data therein | |
CN115220907A (zh) | 资源调度方法、装置、电子设备及存储介质 | |
KR20230124598A (ko) | 높은 처리량 및 낮은 오버헤드 커널 개시를 위한 압축 커맨드 패킷 | |
US20120017070A1 (en) | Compile system, compile method, and storage medium storing compile program | |
US20200142704A1 (en) | Processor Core, Processor and Method for Executing a Composite Scalar-Vector Very Lare Instruction Word (VLIW) Instruction | |
CN114327643B (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 |