CN113885875A - 一种分布式编译方法、系统、主服务器及存储介质 - Google Patents
一种分布式编译方法、系统、主服务器及存储介质 Download PDFInfo
- Publication number
- CN113885875A CN113885875A CN202111159250.6A CN202111159250A CN113885875A CN 113885875 A CN113885875 A CN 113885875A CN 202111159250 A CN202111159250 A CN 202111159250A CN 113885875 A CN113885875 A CN 113885875A
- Authority
- CN
- China
- Prior art keywords
- compiling
- compiler
- work
- task
- engine editor
- 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
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种分布式编译方法、系统、主服务器及存储介质。该方法应用于部署有引擎编辑器和分布式编译模块的主服务器,该方法包括:引擎编辑器接收到编译任务后,将与编译任务对应的启动任务和启动参数发送给分布式编译模块;分布式编译模块根据接收到的启动任务,从目标网络中可与引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,并启动部署在工作服务器上的工作编译器,将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器上;引擎编辑器将编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。本发明实施例的技术方案,可以加快编译速度。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种分布式编译方法、系统、主服务器及存储介质。
背景技术
目前,在基于Unity3D打包或者运行游戏时,引擎编辑器会进行着色器(Shader)编译。在编译较多Shader时,引擎编辑器可以在自身所在的主服务器上启动多个编译器(compiler)分别进行Shader编译。
在实现本发明的过程中,发明人发现现有技术中存在以下技术问题:编译器在编译时会占用大量的中央处理器(Central Processing Unit,CPU)资源,这导致主服务器的CPU常常满负荷工作,此时编译速度也达到了瓶颈。
发明内容
本发明实施例提供了一种分布式编译方法、系统、主服务器及存储介质,解决了编译速度较慢的问题。
第一方面,本发明实施例提供了一种分布式编译方法,应用于部署有引擎编辑器和分布式编译模块的主服务器,可以包括:
引擎编辑器接收到编译任务后,将与编译任务对应的启动任务和启动参数发送给分布式编译模块;
分布式编译模块根据接收到的启动任务,从目标网络中的可与引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,并启动部署在工作服务器上的工作编译器,且将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器上;
引擎编辑器将编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。
第二方面,本发明实施例还提供了一种分布式编译系统,可以包括:部署在主服务器上的分布式编译模块和引擎编辑器;其中,
引擎编辑器,用于在接收到编译任务后,将与编译任务对应的启动任务和启动参数发送给分布式编译模块;
分布式编译模块,用于根据接收到的启动任务,从目标网络中的可与引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,并启动部署在工作服务器上的工作编译器,将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器上;
引擎编辑器,还用于将编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。
第三方面,本发明实施例还提供了一种主服务器,可以包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现本发明任意实施例所提供的分布式编译方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的分布式编译方法。
本发明实施例的技术方案,部署在主服务器上的引擎编辑器在接收到编译任务后,可以将与编译任务对应的启动任务和启动参数发送给部署在主服务器上的分布式编译模块,以由分布式编译模块完成远程的工作编译器的启动工作;分布式编译模块根据接收到的启动任务从目标网络中可与引擎编辑器进行通信连接的各候选服务器中确定出能够完成编译任务的工作服务器,并启动部署在工作服务器上的工作编译器,且将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器上;由此,引擎编辑器可以将编译任务发送给已成功连接到的工作编译器上,以使工作编译器根据接收到的编译任务进行编译。上述技术方案,通过分布式编译模块启动远程的筛选出的工作编译器,在工作编译器成功连接到引擎编辑器上时,可以在工作编译器上进行编译,这相较于只是在主服务器(即本地)上进行编译的方式,远程的分布式编译更好地利用了工作服务器上的计算资源,由此达到了快速编译的效果。
附图说明
图1是本发明实施例一中的一种分布式编译方法的流程图;
图2是本发明实施例二中的一种分布式编译方法的流程图;
图3是本发明实施例三中的一种分布式编译方法的流程图;
图4是本发明实施例四中的一种分布式编译方法的流程图;
图5是本发明实施例四中的一种分布式编译方法中可选示例的流程图;
图6a是本发明实施例四中的一种分布式编译方法中在对Unity Shader进行编译时的第一示意图;
图6b是本发明实施例四中的一种分布式编译方法中在对Unity Shader进行编译时的第二示意图;
图7是本发明实施例五中的一种分布式编译系统的结构框图;
图8是本发明实施例六中的一种主服务器的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1是本发明实施例一中提供的一种分布式编译方法的流程图。本实施例可以适用于分布式编译的情况,尤其适用于通过目标网络(即远程)中的工作编译器进行分布式编译的情况。该方法可以由本发明实施例提供的分布式编译系统来执行,该系统包括集成在主服务器上的引擎编辑器和分布式编译模块。
参见图1,本发明实施例的方法具体包括如下步骤:
S110、引擎编辑器在接收到编译任务后,将与编译任务对应的启动任务和启动参数发送给分布式编译模块。
其中,引擎编辑器可以是某引擎中的具备编辑、管理和整理各种资源、及性能分析、打包、部署和版本分布等功能的编辑器(Editor)。编译任务可以是用于对至少一段程序(即代码)进行编译的任务,编译正是打包中的一个环节,其通过编译器(compiler)进行,而编译器可以理解为是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。
通常情况下,引擎编辑器在接收到编译任务后,是在引擎编辑器所在的主服务器(即本地)上启动本地编译器进行编译,但是一台主服务器的计算资源是有限的,为了加快编译速度,可以基于部署在目标网络中可以与引擎编辑器进行通信连接的各工作服务器上的工作编译器进行编译,相对于本地编译器,工作编译器可以理解为远程的编译器,其中目标网络可以是局域网络。由此,引擎编辑器在接收到编译任务后,其可以将与编译任务对应的启动任务和启动参数发送给分布式编译模块,以由分布式编译模块远程启动工作编译器。其中,启动任务可以是与启动工作编译器有关的任务,且启动参数可以是为完成工作编译器的启动和/或编译过程而需要的参数,二者可以根据编译任务具体确定;分布式编译模块可以是能够远程启动工作编译器的模块。
需要说明的是,引擎编辑器和/或分布式编译模块可以是根据本发明实施例提出的分布式编译流程直接编写后得到的框架,也可以是在已有的框架基础上直接修改后得到的框架,在此未做具体限定。示例性的,分布式编译模块可以是改写后的分布式编译工具FastBuild、IncrediBuild、distcc等,它们均具备与工作服务器进行通信、筛选出适合完成编译任务的工作服务器的功能。
S120、分布式编译模块根据接收到的启动任务,从目标网络中的可与引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,并启动部署在工作服务器上的工作编译器,且将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器上。
其中,候选服务器上部署有可与引擎编辑器进行通信连接的候选编译器,候选编译器是目标网络中的可以用于完成编译任务的编译器,每个候选服务器上的候选编译器的数量可以是一个、两个或是多个,在此未做具体限定。为了完成编译任务,这里并非需要涉及到每一个候选编译器(这可能由于候选编译器较多而需要编译的程序较少导致的)、或是并非是每个候选编译器在当前时刻下均能够立即进行编译任务(这可能由于该候选编译器在当前时刻下正在进行其余的编译任务导致的),由此分布式编译模块可以从各候选服务器中确定出工作服务器,部署在工作服务器上的工作编译器可以是能够快速完成本次的编译任务的候选编译器,其中工作编译器的数量可以是一个、两个或是多个,在此未做具体限定。实际应用中,可选的,如果将引擎编辑器理解为起控制作用的服务端,那么工作编译器可以理解为针对于服务端对应的服务而言的被服务端控制的客户端。上述主服务器可以认为是主机,工作服务器可以认为是工作机。
分布式编译模块在确定出工作编译器之后,其可以将为了完成编译任务而需要的各种工具如编译自身的可执行程序、及在编译过程中需要用到的动态库等文件发送到工作编译器上。然后,分布式编译模块可以远程启动部署在工作服务器上的工作编译器,并且在启动过程中可以附带接收到的启动参数,即将启动参数透传给工作编译器。由于启动参数中可以包括引擎编辑器所在的网际协议地址(Internet Protocol Address,IP地址),由此工作编译器可以根据启动参数主动连接到引擎编辑器上,以便能够与引擎编辑器进行通信连接。换言之,针对每个工作编译器,其具有与引擎编辑器进行通信连接的能力,但是其实现的前提是成功连接到引擎编辑器上。这样一来,编译器无论是本地的还是远程的,这对于引擎编辑器而言是全透明无需关心的内容,引擎编辑器只需要控制连接到自身上的编译器进行编译即可。在实际应用中,可选的,当部署在工作服务器上的工作编译器的数量是至少两个时,分布式编译模块可以一个一个地启动这些工作编译器,而且每台工作服务器上可以启动的工作编译器的数量的上限可以根据该工作服务器上的CPU的逻辑核的数量确定。
S130、引擎编辑器将编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。
其中,当引擎编辑器和工作编译器成功连接之后,引擎编辑器可以将编译任务发送到工作编译器上,此时的编译任务可以是工作编译器需要进行编译的程序,由此工作编译器可以根据接收到的编译任务进行编译,然后可以将编译结果返回给引擎编辑器。实际应用中,可选的,由于需要进行编译的程序可能是多段,为了保证编译速度,这多段程序可能需要由至少两个工作编译器共同进行编译,由此在将编译任务发送给工作编译器时,针对于每个工作编译器,可以根据其的承接能力,将编译任务中相应数量的程序发送过来。
本发明实施例的技术方案,部署在主服务器上的引擎编辑器在接收到编译任务后,可以将与编译任务对应的启动任务和启动参数发送给部署在主服务器上的分布式编译模块,以由分布式编译模块完成远程的工作编译器的启动工作;分布式编译模块根据接收到的启动任务从目标网络中可与引擎编辑器进行通信连接的各候选服务器中确定出能够完成编译任务的工作服务器,并启动部署在工作服务器上的工作编译器,且将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器上;由此,引擎编辑器可以将编译任务发送给已成功连接到的工作编译器上,以使工作编译器根据接收到的编译任务进行编译。上述技术方案,通过分布式编译模块启动远程的筛选出的工作编译器,在工作编译器成功连接到引擎编辑器上时,可以在工作编译器上进行编译,这相较于只是在主服务器(即本地)上进行编译的方式,远程的分布式编译更好地利用了工作服务器上的计算资源,由此达到了快速编译的效果。
一种可选的技术方案,将与编译任务对应的启动任务和启动参数发送给分布式编译模块,可包括:根据接收的编译任务确定需要进行编译的工作编译器的编译数量;如果编译数量大于预设启动阈值,则将编译任务拆分为第一编译任务、以及与预设启动阈值对应的第二编译任务,并将与第二编译任务对应的启动任务和启动参数发送给分布式编译模块;相应的,引擎编辑器将编译任务发送给已成功连接到的工作编译器上,以使工作编译器根据接收到的编译任务进行编译,可以包括:引擎编辑器将第二编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的第二编译任务进行编译;引擎编辑器将第一编译任务发送给已成功连接到的且已完成第二编译任务的工作编译器,以使工作编译器根据接收到的第一编译任务进行编译。
其中,引擎编辑器根据接收到的编译任务可以确定需要进行编译的程序的第一程序数量,再结合每个工作编译器能够进行编译的程序的第二程序数量,可以确定本次的编译任务需要的工作编译器的编译数量。示例性的,为了保证编译速度,同一时间可以只为每个工作编译器分配一个程序,即第二程序数量为1,此时编译数量即为第一程序数量。在引擎编辑器内预先设置有用于表示在同一时间内能够启动的工作编译器的启动数量的上限(即预设启动阈值),因此当编译数量大于预设启动阈值时,可以将编译任务拆分为第一编译任务和第二编译任务,其中,第二编译任务内需要进行编译的程序的数量与预设启动阈值相关,或是说与预设启动阈值和第二程序数量相关。进而,将与第二编译任务对应的启动任务和启动参数发送给分布式编译模块,以使分布式编译模块启动预设启动阈值的工作编译器来完成第二编译任务,此时第一编译任务处于等待状态。再进而,当某工作编译器完成编译工作后,其处于空闲状态,引擎编辑器可以将第一编译任务中需要进行编译的程序发送给该工作编译器来继续进行编译,由此保证了编译任务内各需要进行编译的程序的有效编译。
再一种可选的技术方案,在引擎编辑器接收到编译任务后之后,上述分布式编译方法,还可包括:根据接收到的编译任务确定需要进行编译的工作编译器的编译数量、以及已启动且未正在进行编译的工作编译器的空闲数量;如果编译数量大于空闲数量,则根据编译数量和空闲数量间的数量差值、或是编译数量生成启动任务。其中,有些工作编译器的工作模式是在生命周期内可反复处理引擎编辑器发送过来的编译任务,即在一次启动后可以陆续处理多个编译任务,因此引擎编辑器在根据编译任务确定编译数量后,其可以先确定已启动且未正在进行编译(即处于空闲状态)的工作编译器的空闲数量;当编译数量小于或是等于空闲数量时,那么完全可以由这些已启动且处于空闲状态的工作编译器完成本次的编译任务,无需启动新的工作编译器;否则,可以根据编译数量和空闲数量之间的数量差值生成启动任务,即差多少个工作编译器则启动多少个工作编译器,或是也可以根据编译数量生成启动任务,即直接启动能够完成本次的编译任务的那么多的工作编译器,由此保证了编译任务的有效完成。
实施例二
图2是本发明实施例二中提供的一种分布式编译方法的流程图。本实施例以上述各技术方案为基础进行优化。在本实施例中,可选的,从目标网络中可与引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,可以包括:确定需要进行启动的工作编译器的启动数量、以及目标网络中可与引擎编辑器进行通信连接的各候选服务器的可利用计算资源;根据启动数量以及各可利用计算资源,从各候选服务器中确定出工作服务器。其中,与上述各实施例相同或是相应的术语的解释在此不再赘述。
参见图2,本实施例的方法具体可以包括如下步骤:
S210、引擎编辑器在接收到编译任务后,将与编译任务对应的启动任务和启动参数发送给分布式编译模块。
S220、分布式编译模块根据接收到的启动任务,确定需要进行启动的工作编译器的启动数量、及目标网络中可与引擎编辑器进行通信连接的各候选服务器的可利用计算资源,并根据启动数量和各可利用计算资源,从各候选服务器中确定出工作服务器。
其中,某台候选服务器的可利用计算资源可以表示该候选服务器中的多少计算资源还能够被利用,或是说该候选服务器是否处于空闲状态,其可以侧面反映出在当前时刻下部署在该候选服务器中的多少个候选编译器能够进行编译,因此可以根据启动数量和各候选服务器的可利用计算资源,从各候选服务器中确定出用于完成本次的编译任务的工作服务器,由此实现了从目标网络中自动筛选出处于空闲状态的能够匹配启动任务的工作服务器的效果。
S230、分布式编译模块启动部署在工作服务器上的工作编译器,并将接收到的启动参数透传给工作编译器,以使该工作编译器根据启动参数连接到引擎编辑器。
S240、引擎编辑器将编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。
本发明实施例的技术方案,分布式编译模块通过接收到的启动任务,确定需要进行启动的工作编译器的启动数量、及目标网络中的可与引擎编辑器进行通信连接的各候选服务器的可利用计算资源,由于可利用计算资源可以表示出相应的候选服务器是否处于空闲状态,即部署在该候选服务器上的候选编译器在当前时刻下是否能够完成编译任务,因此可以根据启动数量和各可利用计算资源从各候选服务器中确定出处于空闲状态的能够匹配启动任务的工作服务器,由此达到了工作服务器的准确确定的效果。
实施例三
图3是本发明实施例三中提供的一种分布式编译方法的流程图。本实施例以上述各技术方案为基础进行优化在本实施例中,可选的,工作编译器和引擎编辑器间是通过套接字接口进行通信连接的;引擎编辑器将编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译,可以包括:引擎编辑器将编译任务通过套接字接口发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。其中,与上述各实施例相同或相应的术语的解释在此不再赘述。
参见图3,本实施例的方法具体可以包括如下步骤:
S310、引擎编辑器在接收到编译任务后,将与编译任务对应的启动任务和启动参数发送给分布式编译模块。
S320、分布式编译模块根据接收到的启动任务,从目标网络中的可与引擎编辑器通过套接字接口进行通信连接的各候选服务器中确定出工作服务器,并启动部署在工作服务器上的工作编译器,将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器上。
其中,套接字(socket)接口是引擎编辑器和候选编译器中已有的用于进行数据传输的接口,即主服务器和候选服务器之间已经存在socket的连接线路,因此在通信(即数据传输)方面,无需对引擎编辑器和候选编译器进行修改,可以直接通过已有的socket接口进行数据传输,如引擎编辑器通过socket接口将编译任务发送给候选服务器、候选服务器通过socket接口将编译结果返回给引擎编辑器等,由此在保证有效通信的情况下,加快了研发速度。
S330、引擎编辑器将编译任务通过套接字接口发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。
本发明实施例的技术方案,由于引擎编辑器和候选编译器间已经存在socket的连接线路,因此在数据传输方面无需进行任何修改,可以直接利用引擎编辑器和候选编译器上已有的socket接口进行数据传输,由此达到了加快研发速度的效果。
一种可选的技术方案,上述分布式编译方法,还可以包括:引擎编辑器在接收到工作编译器通过套接字接口发送的编译文件请求时,读取编译文件请求对应的编译文件,并将读取到的编译文件通过套接字接口发送给工作编译器;相应的,以使工作编译器根据接收到的编译任务进行编译,可包括:以使工作编译器根据接收到的编译任务和编译文件进行编译。
其中,由于引擎编辑器和编译文件均位于主服务器上,而工作编译器位于候选服务器上,当工作编译器和编译文件位于不同的服务器上时,工作编译器是无法通过编译文件在主服务器上的文件路径直接读取得到编译文件。为此,为了保证工作编译器能够在分布式情况下正常工作,其可以通过socket接口向引擎编辑器发送用于请求编译文件的编译文件请求,由此引擎编辑器可以根据接收到的编译文件请求确定待请求的编译文件,并根据编译文件在主服务器中的文件路径读取得到编译文件,将读取结果通过socket接口发送给工作编译器。上述编译文件可以是工作编译器在完成编译任务时所需要引用的代码。由此,工作编译器可以通过请求方式获取到编译文件,进而根据该编译文件能够继续进行编译任务。除此外,可选的,工作编译器还可以将接收到的编译文件缓存在自身所在的候选服务器的内存中,由此当工作编译器在进行其余的编译任务时也需要应用到已缓存的编译文件时,其无需通过请求方式获取编译文件,而可以直接从候选服务器中获取得到,由此达到了节省带宽和时间的效果。
另一种可选的技术方案,上述分布式编译方法,还可以包括:引擎编辑器启动套接字接口;相应的,以使工作编译器根据启动参数连接到引擎编辑器上,可以包括:以使工作编译器根据启动参数找到套接字接口,并通过套接字接口连接到引擎编辑器上。其中,引擎编辑器启动一个socket接口(即启动一个socket进程),而且工作编译器在被启动后,其也会启动一个socket进程。由于启动参数中包括引擎编辑器的IP地址,因此工作编译器可以通过启动参数找到引擎编辑器启动的socket进程,进而通过自身启动的socket进程和引擎编辑器启动的socket进程实现自身和引擎编辑器间的通信连接。
实施例四
图4是本发明实施例四中提供的一种分布式编译方法的流程图。本实施例以上述各技术方案为基础进行优化。在本实施例中,可选的,在以使工作编译器根据启动参数连接到引擎编辑器上之后,上述分布式编译方法,还可以包括:如果引擎编辑器确定未成功连接到工作编译器上,则启动部署在主服务器上的主编译器,将编译任务发送给主编译器,以使主编译器根据接收到的编译任务进行编译。其中,与上述各实施例相同或相应的术语的解释在此不再赘述。
参见图4,本实施例的方法具体可以包括如下步骤:
S410、引擎编辑器在接收到编译任务后,将与编译任务对应的启动任务和启动参数发送给分布式编译模块。
S420、分布式编译模块根据接收到的启动任务,从目标网络中的可与引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,并启动部署在工作服务器上的工作编译器,将接收到的启动参数透传给工作编译器,以使作编译器根据启动参数连接到引擎编辑器上。
S430、引擎编辑器确定是否已成功连接到工作编译器上,如果是则执行S440,否则执行S450。
其中,由于在目标网络中存在着种种不稳定的因素,在引擎编辑器和工作编译器间可能存在着连接失败的情况,因此引擎编辑器可以先确定一下是否与工作编译器成功连接,如果是则由工作编译器完成编译任务,否则由部署在主服务器上的主编译器(即本地编译器)完成编译任务,由此保证了在任何情况下均能够有效地完成编译任务。
S440、引擎编辑器将编译任务发送给已成功连接到的工作编译器上,以使工作编译器根据接收到的编译任务进行编译。
S450、引擎编辑器启动部署在主服务器上的主编译器,将编译任务发送给主编译器,以使主编译器根据接收到的编译任务进行编译。
其中,当引擎编辑器和工作编译器连接失败后,引擎编辑器可以启动本地编译器,并在引擎编辑器和已启动的本地编译器连接成功后,将编译任务发送给本地编译器,以由本地编译器完成编译任务。
示例性的,参见图5,引擎编辑器在接收到编译任务后,先确定是否已经开启联机编译(即分布式编译),如果否则启动本地编译器以由本地编译器完成编译任务,否则将与编译任务对应的启动任务发送给分布式编译模块,并执行后续步骤;分布式编译模块根据接收到的启动任务启动相应的工作编译器,已启动的工作编译器主动连接到引擎编辑器;如果工作编译器和引擎编辑器连接成功,则由工作编译器开始进行编译,否则由引擎编辑器启动本地编译器来由本地编译器进行编译。
本发明实施例的技术方案,当引擎编辑器未成功连接到工作编译器上时,由引擎编辑器启动部署在主服务器上的主编译器,将编译任务发送给主编译器,以使主编译器根据接收到的编译任务进行编译,由此在任何情况下均能够保证编译任务的有效完成。
为了更好地理解上述各技术方案,结合到本发明实施例可能涉及到的应用场景,以需要进行编译的程序是Unity Shader,工作编译器是修改后的Unity Shader Compiler,分布式编译模块是修改后的FastBuild为例进行阐述。具体的,
原始的Unity Shader Compiler不同于常见的编译器的工作模式,其不是将输入、输出等参数直接作为编译器的启动参数开始工作,编译结束即结束进程,它其实是一个常驻进程,在生命周期中可以反复处理引擎编辑器发送来的编译任务。原始的FastBuild只能支持那些工作模式常见的编译器的本地上的分布式编译,无法直接支持Unity ShaderCompiler的分布式编译,亦无法支持远程的分布式编译。在此基础上,为了能够实现UnityShader Compiler远程的分布式编译,一种可选方案是在不修改FastBuild情况下,完全通过修改Unity Shader Compiler来适配FastBuild,即将Unity Shader Compiler改为上述常见的一次性编译的工作模式—编译完成即退出进程。但是,通过梳理代码发现,这样修改的工作量很大,原因在于:引擎编辑器与Unity Shader Compiler间的交互完全是基于套接字(socket)接口进行通信,这已经基本满足远程编译的需求,那么余下要做的主要是将编译器的启动放在远程实现。但是,如果让Unity Shader Compiler适配FastBuild,这意味着Unity Shader Compiler与引擎编辑器的通信流程完全需要重新实现,工作量较大。为此,本发明各实施例采用了另一可选方案,对FastBuild进行修改,在其原有的框架的基础上增加一种只是远程启动Unity Shader Compiler,而不等待Unity Shader Compiler退出的工作模式,这是因为Unity Shader Compiler自身已经基本支持了远程编译的功能,因此把编译过程中的通信工作都交给Unity Shader Compiler自身完成即可,由此实现了对UnityShader Compiler进行适配达成分布式编译的效果。
在此基础上,Unity Shader Compiler的分布式编译的具体流程可参见图6a和图6b,部署在主机上的Unity Editor在接收到编译任务之后,在已开启联机编译的情况下,通过FastBuild筛选出工作机,并启动部署在工作机上的Unity Shader Compiler;然后,Unity Shader Compiler连接到Unity Editor上,这二者通过socket接口进行数据传输,比如Unity Editor将shader编译过程中需要的相关代码通过socket接口发送给UnityShader Compiler、Unity Shader Compiler将编译结果通过socket接口发送给UnityEditor等。换言之,数据流可以概述为:Unity3D打包/运行游戏——Unity Editor将启动任务给到FastBuild(加入socket模块)——FastBuild自动托管(只启动不结束);UnityShader Compiler启动——socket进程启动——Unity Editor通过socket连接到UnityShader Compiler。
实施例五
图7为本发明实施例五提供的分布式编译系统的结构框图,其可用于执行上述任意实施例所提供的分布式编译方法。该系统与上述各实施例中的分布式编译方法属于同一个发明构思,在该系统的实施例中未详尽描述的细节内容,可以参考上述分布式编译方法的实施例。参见图7,该系统可以包括:部署在主服务器上的引擎编辑器510和分布式编译模块520;其中,
引擎编辑器510,用于接收到编译任务后,将与编译任务对应的启动任务和启动参数发送给分布式编译模块520;
分布式编译模块520,用于根据接收到的启动任务,从目标网络中可与引擎编辑器510进行通信连接的各候选服务器中确定出工作服务器,并启动部署在工作服务器上的工作编译器,将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器510上;
引擎编辑器510,还用于将编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。
可选的,从目标网络中可与引擎编辑器510进行通信连接的各候选服务器中确定出工作服务器,可以包括:
确定需要进行启动的工作编译器的启动数量、及目标网络中可与引擎编辑器510进行通信连接的各候选服务器的可利用计算资源;
根据启动数量和各可利用计算资源,从各候选服务器中确定出工作服务器。
可选的,工作编译器和引擎编辑器510间是通过套接字接口进行通信连接;
引擎编辑器510将编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译,可以包括:
引擎编辑器510将编译任务通过套接字接口发送给已经成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。
在此基础上,可选的,引擎编辑器510,还可以用于:在接收到工作编译器通过套接字接口发送的编译文件请求时,读取编译文件请求对应的编译文件,并将读取到的编译文件通过套接字接口发送给工作编译器;
相应的,以使工作编译器根据接收到的编译任务进行编译,可以包括:
以使工作编译器根据接收到的编译任务和编译文件进行编译。
再可选的,引擎编辑器510,还可以用于:启动套接字接口;
相应的,以使工作编译器根据启动参数连接到引擎编辑器510上,可包括:
以使工作编译器根据启动参数找到套接字接口,并通过套接字接口连接到引擎编辑器510上。
可选的,引擎编辑器510,还可以用于:
如果确定未成功连接到工作编译器上,则启动部署在主服务器上的主编译器,并将编译任务发送给主编译器,以使主编译器根据接收到的编译任务进行编译。
可选的,将与编译任务对应的启动任务和启动参数发送给分布式编译模块520,可以包括:
根据接收的编译任务确定需要进行编译的工作编译器的编译数量;
如果编译数量大于预设启动阈值,则将编译任务拆分为第一编译任务、及与预设启动阈值对应的第二编译任务,并将与第二编译任务对应的启动任务和启动参数发送给分布式编译模块520;
相应的,引擎编辑器510,具体可以用于:
将第二编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的第二编译任务进行编译;
将第一编译任务发送给已成功连接到的且已完成第二编译任务的工作编译器,以使工作编译器根据接收到的第一编译任务进行编译。
本发明实施例五提供的分布式编译系统,可以包括:部署在主服务器上的分布式编译模块和引擎编辑器,其中引擎编辑器在接收到编译任务后,可以将编译任务对应的启动任务和启动参数发送给分布式编译模块,以由分布式编译模块完成远程的工作编译器的启动工作;分布式编译模块根据接收的启动任务从目标网络中可与引擎编辑器进行通信连接的各候选服务器中确定出能够完成编译任务的工作服务器,并启动部署在工作服务器上的工作编译器,将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器上;由此,引擎编辑器可以将编译任务发送给已成功连接到的工作编译器上,以使工作编译器根据接收到的编译任务进行编译。上述技术方案,通过分布式编译模块启动远程的筛选出的工作编译器,并在工作编译器成功连接到引擎编辑器上时,可以在工作编译器上进行编译,这相较于只是在主服务器(即本地)上进行编译的方式,远程的分布式编译更好地利用了工作服务器上的计算资源,由此达到了快速编译的效果。
本发明实施例所提供的分布式编译系统可执行本发明任意实施例所提供的分布式编译方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述分布式编译系统的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
实施例六
图8为本发明实施例六提供的一种主服务器的结构示意图,如图8所示,该主服务器包括存储器610、处理器620、输入系统630和输出系统640。该主服务器中的处理器620的数量可以是一个或是多个,图8中以一个处理器620为例;该主服务器中的存储器610、处理器620、输入系统630和输出系统640可以通过总线或其它方式连接,图8中以通过总线650连接为例。
存储器610作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,比如本发明实施例中的分布式编译方法对应的程序指令/模块(例如,分布式编译系统中的引擎编辑器510和分布式编译模块520)。处理器620通过运行存储在存储器610中的软件程序、指令以及模块,从而执行主服务器的各种功能应用以及数据处理,即实现上述的分布式编译方法。
存储器610可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据主服务器的使用所创建的数据等。此外,存储器610可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器610可进一步包括相对于处理器620远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入系统630可用于接收输入的数字或字符信息,以及产生与系统的用户设置以及功能控制有关的键信号输入。输出系统640可包括显示屏等显示设备。
实施例七
本发明实施例七提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种分布式编译方法,该方法可应用于部署有引擎编辑器和分布式编译模块的主服务器,包括:
引擎编辑器接收到编译任务后,将与编译任务对应的启动任务和启动参数发送给分布式编译模块;
分布式编译模块根据接收到的启动任务,从目标网络中的可与引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,并启动部署在工作服务器上的工作编译器,且将接收到的启动参数透传给工作编译器,以使工作编译器根据启动参数连接到引擎编辑器上;
引擎编辑器将编译任务发送给已成功连接到的工作编译器,以使工作编译器根据接收到的编译任务进行编译。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的分布式编译方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。依据这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种分布式编译方法,其特征在于,应用于主服务器,所述主服务器上部署有引擎编辑器和分布式编译模块,所述方法包括:
所述引擎编辑器接收到编译任务后,将与所述编译任务对应的启动任务和启动参数发送给所述分布式编译模块;
所述分布式编译模块根据接收到的所述启动任务,从目标网络中可与所述引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,并启动部署在所述工作服务器上的工作编译器,且将接收到的所述启动参数透传给所述工作编译器,以使所述工作编译器根据所述启动参数连接到所述引擎编辑器上;
所述引擎编辑器将所述编译任务发送给已成功连接到的所述工作编译器,以使所述工作编译器根据接收到的所述编译任务进行编译。
2.根据权利要求1所述的方法,其特征在于,所述从目标网络中可与所述引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,包括:
确定需要进行启动的所述工作编译器的启动数量、及目标网络中可与所述引擎编辑器进行通信连接的各候选服务器的可利用计算资源;
根据所述启动数量和各所述可利用计算资源,从各所述候选服务器中确定出工作服务器。
3.根据权利要求1所述的方法,其特征在于,所述工作编译器和所述引擎编辑器间是通过套接字接口进行通信连接的;
所述引擎编辑器将所述编译任务发送给已成功连接到的所述工作编译器,以使所述工作编译器根据接收到的所述编译任务进行编译,包括:
所述引擎编辑器将所述编译任务通过所述套接字接口发送给已成功连接到的所述工作编译器,以使所述工作编译器根据接收到的所述编译任务进行编译。
4.根据权利要求3所述的方法,其特征在于,还包括:
所述引擎编辑器在接收到所述工作编译器通过所述套接字接口发送的编译文件请求时,读取所述编译文件请求对应的编译文件,并将读取到的所述编译文件通过所述套接字接口发送给所述工作编译器;
所述以使所述工作编译器根据接收到的所述编译任务进行编译,包括:
以使所述工作编译器根据接收到的所述编译任务和所述编译文件进行编译。
5.根据权利要求3所述的方法,其特征在于,还包括:
所述引擎编辑器启动所述套接字接口;
所述以使所述工作编译器根据所述启动参数连接到所述引擎编辑器上包括:
以使所述工作编译器根据所述启动参数找到所述套接字接口,并通过所述套接字接口连接到所述引擎编辑器上。
6.根据权利要求1所述的方法,其特征在于,在所述以使所述工作编译器根据所述启动参数连接到所述引擎编辑器上之后,还包括:
如果所述引擎编辑器确定未成功连接到所述工作编译器上,则启动部署在所述主服务器上的主编译器,将所述编译任务发送给所述主编译器,以使所述主编译器根据接收到的所述编译任务进行编译。
7.根据权利要求1所述的方法,其特征在于,所述将与所述编译任务对应的启动任务和启动参数发送给所述分布式编译模块,包括:
根据接收的所述编译任务确定需要进行编译的所述工作编译器的编译数量;
如果所述编译数量大于预设启动阈值,则将所述编译任务拆分为第一编译任务、及与所述预设启动阈值对应的第二编译任务,并将与所述第二编译任务对应的启动任务和启动参数发送给所述分布式编译模块;
所述引擎编辑器将所述编译任务发送给已成功连接到的所述工作编译器,以使所述工作编译器根据接收到的所述编译任务进行编译,包括:
所述引擎编辑器将所述第二编译任务发送给已成功连接到的所述工作编译器,以使所述工作编译器根据接收到的所述第二编译任务进行编译;
所述引擎编辑器将所述第一编译任务发送给已成功连接到的且已完成所述第二编译任务的所述工作编译器,以使所述工作编译器根据接收到的所述第一编译任务进行编译。
8.一种分布式编译系统,其特征在于,包括:部署在主服务器上的分布式编译模块和引擎编辑器;其中,
所述引擎编辑器,用于接收到编译任务后,将与所述编译任务对应的启动任务和启动参数发送给所述分布式编译模块;
所述分布式编译模块,用于根据接收到的所述启动任务,从目标网络中可与所述引擎编辑器进行通信连接的各候选服务器中确定出工作服务器,并启动部署在所述工作服务器上的工作编译器,将接收到的所述启动参数透传给所述工作编译器,以使所述工作编译器根据所述启动参数连接到所述引擎编辑器上;
所述引擎编辑器,还用于将所述编译任务发送给已成功连接到的所述工作编译器,以使所述工作编译器根据接收到的所述编译任务进行编译。
9.一种主服务器,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的分布式编译方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7任一所述的分布式编译方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111159250.6A CN113885875A (zh) | 2021-09-30 | 2021-09-30 | 一种分布式编译方法、系统、主服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111159250.6A CN113885875A (zh) | 2021-09-30 | 2021-09-30 | 一种分布式编译方法、系统、主服务器及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113885875A true CN113885875A (zh) | 2022-01-04 |
Family
ID=79004655
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111159250.6A Pending CN113885875A (zh) | 2021-09-30 | 2021-09-30 | 一种分布式编译方法、系统、主服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113885875A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115562676A (zh) * | 2022-10-11 | 2023-01-03 | 中国兵器工业计算机应用技术研究所 | 一种图计算引擎的触发方法 |
-
2021
- 2021-09-30 CN CN202111159250.6A patent/CN113885875A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115562676A (zh) * | 2022-10-11 | 2023-01-03 | 中国兵器工业计算机应用技术研究所 | 一种图计算引擎的触发方法 |
CN115562676B (zh) * | 2022-10-11 | 2023-06-06 | 中国兵器工业计算机应用技术研究所 | 一种图计算引擎的触发方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101099221B1 (ko) | 분산 구축용 시스템, 및 소프트웨어 이미지의 설치를 위임하는 방법 | |
US7823023B2 (en) | Test framework for testing an application | |
US8881149B2 (en) | Control of java resource runtime usage | |
CN109067890B (zh) | 一种基于docker容器的CDN节点边缘计算系统 | |
CN112035172B (zh) | 操作系统启动方法、装置、服务器及存储介质 | |
CN111176801B (zh) | 一种多进程管理方法、装置、设备及存储介质 | |
WO2020233584A1 (zh) | 混合语言任务执行方法、装置及集群 | |
CN111026634A (zh) | 一种接口自动化测试系统、方法、装置及存储介质 | |
TWI414947B (zh) | 在包含多個處理節點之計算系統上載入一程式之方法、電腦可讀媒體及平行計算系統 | |
CN113885875A (zh) | 一种分布式编译方法、系统、主服务器及存储介质 | |
CN112256444B (zh) | 基于dag的业务处理方法、装置、服务器及存储介质 | |
CN116820527B (zh) | 程序升级方法、装置、计算机设备和存储介质 | |
CN112559190B (zh) | 异构系统间的资源分配方法、系统、装置、设备及介质 | |
CN113467931A (zh) | 算力任务的处理方法、装置及系统 | |
US8442939B2 (en) | File sharing method, computer system, and job scheduler | |
CN116483643A (zh) | 一种gpu调试方法、装置、设备及存储介质 | |
CN115878213A (zh) | 物联网设备驱动的动态加载方法 | |
CN110782040A (zh) | 一种pytorch任务训练方法、装置、设备及介质 | |
CN110781137A (zh) | 分布式系统的目录读取方法、装置、服务器和存储介质 | |
CN115268909A (zh) | 一种web前端创建并运行构建任务的方法、系统和终端 | |
CN111669423B (zh) | 基于用户态协议栈的网络隔离空间的批量处理方法及系统 | |
CN115114022A (zh) | 对gpu资源进行使用的方法、系统、设备及介质 | |
CN112445607B (zh) | 一种应用程序执行方法函数的方法及装置 | |
CN109634721B (zh) | 一种虚拟机与主机的启动通信方法及相关装置 | |
CN110958240A (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 |