Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

为应用程序实施自动拦截接口的一般过程如下:

  1. 确保要分配的进程管理工具支持并行执行非依赖进程。
  2. 创建 Profile XML 文件,介绍将远程执行的工具和作为调用程序的工具。
  3. 创建 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 作业的基础命令行语法为:

IBConsole.exe /command="<TOOL COMMAND>" /profile="<PROFILE XML>" [Other Options]

其中:

  • <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 的工作流程如下:

  1. IncrediBuild 执行主进程exe。
  2. IncrediBuild 将会拦截与exe 即将执行的流程调用相关的所有调用,并将这些调用与 profile.xml 文件中标记为“AllowRemote=true”的进程列表进行比较。
  3. 当 IncrediBuild 遇到在进程中标记为 AllowRemote=true 的进程调用,则 IncrediBuild 引擎不会本地执行此进程,而是将其分配给远程计算机。
  4. 远程执行进程生成的任何输出都会转发至本地计算机(发起程序),就像在其中一个本地核心上执行一样。

要进一步加速 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,因此将在本地和远程计算机上运行。


  • No labels