为应用程序实施自动拦截接口的一般过程如下:
- 确保要分配的进程管理工具支持并行执行非依赖进程。
- 创建 Profile XML 文件,介绍将远程执行的工具和作为调用程序的工具。
- 创建 Profile XML 文件,为需要 IncrediBuild 处理的各个任务指定设置,无论这些任务属于调用程序或需要远程运行。 您需要 IncrediBuild 处理的任务,不必在 XML 配置文件中声明。
对于每个调用程序任务,请设置
AllowIntercept=true
应在 Profile XML 中定义软件中的主可执行文件,并将 AllowIntercept 属性设置为“True”。
如果即将远程执行的进程由主可执行文件的子进程生成,则由主可执行文件启动的整个进程架构都应将 AllowIntercept 属性设置为“True”。
例如,如果主项目是“a”,由“a”执行“b”,“b”执行“c”(我们希望分配该进程的执行),则必须通过将 AllowIntercept 属性设置为“True”来指定“a”和“b”。
对于即将分配给远程计算机的每个任务,请设置
AllowRemote=true
4.通过 IBConsole 命令运行使用 IncrediBuild 加速的应用程序或工具,提供 Profile XML 文件名称以及作业的命令行,或是包含运行应用程序的命令的批处理文件名称(请参阅以下详细信息)。 出于测试目的,在运行应用程序时,激活的进程数将超过本地计算机上拥有的核心数量,因此 IncrediBuild 必须在远程计算机上分配某些进程。
如果使用“/COMMAND=”语法运行 IBConsole.exe ,则会对 /COMMAND 参数(或 .bat 文件的 cmd.exe)中指定的应用程序隐式赋予 AllowIntercept 行为。
注意:
- 通过将 AllowRemote 设置为“True”来指定可执行文件,这会在指定核心(例如,远程核心)中自动执行该分支下的所有进程。 因此,无需为每个子任务指定 AllowRemote。
在自动拦截接口中使用 IBConsole.exe
上述步骤执行完成后,可以使用命令行字符串在并行进程执行模式下运行任何工具。
应将此命令行指定为 IBConsole.exe 的输入参数(请参见以下示例)。
注意,同样在命令行参数中指定了 Profile XML 文件。
该进程应该在本地并行模式下执行,而在 Profile XML 文件中通过“AllowRemote=True”指定的工具则在远程计算机上执行。
通过 XML 接口运行已分配 XML 作业的基础命令行语法为:
其中:
- <TOOL COMMAND> - 在启用并行进程执行模式时用于运行工具的命令行字符串
- <PROFILE XML>– Profile XML 文件
- 其他选项 - 请参阅 IBConsole 命令参考部分了解更多 IBConsole.exe 命令行选项。
作为使用 Profile XML 文件的替代方法,还可在 IBConsole 命令行中显式指定 AllowIntercept 和 AllowRemote 指令:
IBConsole.exe /command="<TOOL COMMAND>" /allowremote="<FILENAME1[,FILENAME2,...]>" /allowintercept="<FILENAME1[,FILENAME2,...]>" [Other Options]
其中:
- <TOOL COMMAND> - 在启用并行进程执行模式时用于运行工具的命令行字符串
- <FILENAME1[,FILENAME2,...]> - 逗号分隔的工具文件名列表
- 其他选项 - 请参阅 IBConsole 命令参考部分了解更多exe 命令行选项。
示例
假设您有一个名为 RenderApp.exe 的应用程序,该程序与 RenderTask.exe 的许多任务并行运行,其中每个 RenderTask.exe 都将获取框架并渲染。 如果以正常方式运行此应用程序,即,没有多核心,则您可以按以下方式调用:
RenderApp 1-1000
这会导致应用程序依次应用 RenderTask.exe 的 1000 个任务,并在每次运行时都会显示帧 (1-1000) 并渲染。 这就意味着,完成渲染所有帧的所需时间是处理单个帧的 1000 倍。
除此之外,您可以使用此应用程序支持的其他方法。 在此方法中,我们将使用本地计算机上的本地核心。 此时,您可以调用 RenderApp 在四个核心上运行,如下所示:
RenderApp 1-1000 –cores4
此时,该应用程序会在计算机的四个核心上同时运行四个 RenderTask.exe 任务,而不是每次运行一个任务。 使用此方法,运行 1000 个任务所需的时间相当于运行 250 个单独任务的时间。
使用 IncrediBuil,您可按 XML 文件的方式创建 Profile,该文件指定 IncrediBuild 如何在应用程序中处理其他任务(进程)。 由于主应用程序 RenderApp 在本地计算机上运行,并且是子进程的调用程序,您可以通过 AllowIntercept=true 在 Profile XML 中定义。而且,由于 RenderTask 将在远程计算机上运行,您可以将其定义为远程任务。
注意:
- 您不需要在远程计算机上安装任何程序,也无需向其上传任何文件。 IncrediBuild 在处理这些任务时,就像远程计算机上的核心位于本地计算机一样。
RenderApp.exe AllowIntercept=true
RenderTask.exe AllowRemote=true
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
<Tools>
<Tool Filename=" RenderApp" AllowIntercept="true" />
<Tool Filename=" RenderTask" AllowRemote="true" />
</Tools>
</Profile>
在此示例中,IncrediBuild 的工作流程如下:
- IncrediBuild 执行主进程exe。
- IncrediBuild 将会拦截与exe 即将执行的流程调用相关的所有调用,并将这些调用与 profile.xml 文件中标记为“AllowRemote=true”的进程列表进行比较。
- 当 IncrediBuild 遇到在进程中标记为 AllowRemote=true 的进程调用,则 IncrediBuild 引擎不会本地执行此进程,而是将其分配给远程计算机。
- 远程执行进程生成的任何输出都会转发至本地计算机(发起程序),就像在其中一个本地核心上执行一样。
要进一步加速 RenderApp 执行,建议不要运行 RenderApp 1-1000 –cores4,而是运行命令
IBConsole RenderApp.exe 1-1000 -cores1000 /profile=profile.xml
这会导致 1000 个任务进入 IncrediBuild 队列,且 IncrediBuild 会根据可用核心数量管理任务执行。例如,如果 200 个核心可用,则会每次运行 200 个任务,从而运行 1000 个任务的时间只相当于运行 5 个任务的时间。
欢迎您在 IncrediBuild 安装文件夹下 Samples\Dev Tools Interfaces Usage Samples\Interception Interface 中查看我们的示例项目。其中一个示例 Sample Project 展示了简单的自动化拦截示例。
此示例需要以下参数:
- 要运行的 exe 文件 (DummyProcess.exe)
- 执行进程的次数
- 终止进程前的休眠时间
- [可选]子进程自行终止前的时间
自动拦截接口示例项目:
以下示例进行了作业演示,其中名为 MainProcess 的进程执行多个名为 Dummy 的子进程。
以下示例中的 XML 文件另存为 Profile.xml。
- IBConsole /command="MainProcess.exe DummySubProcess.exe 10 2000 2000" /profile="profile.xml" /openmonitor /title="Automatic Interception Sample"
在此示例中,MainProcess.exe 并行加速 DummySubProcess.exe 的 10 个实例,每个实例运行两秒钟。 由于这些流程在配置文件中定义为 AllowRemote=true,因此将在本地和远程计算机上运行。
集成接口:
Choosing the Ideal Interface
Using Submission Interfaces
Using Automatic Interception Interfaces
Creating a Profile XML File
Using XML Interfaces
Combined Interfaces
IncrediBuild Solutions 简介:
Visual Studio Solution
Make and Other Build Tools Solution
DevTools Solution
IncrediBuild for Qt Creator
IncrediBuild For Game Development
IncrediBuild for Unit Tests
Working with Build Groups
Running Gitlab Builds with Incredibuild
用户手册:
List of Open Sources
Getting Started
Set Up and Installation
IncrediBuild Solutions
The Coordinator
IncrediBuild Agents
IncrediBuild Cloud
Working from Home
Troubleshooting Issues
IncrediBuild Additional Resources
Release Notes