インターセプション インターフェイス

インターセプション インターフェイスの一般的な使用方法は次の通りです。

  1. 分散したいプロセスを管理するツールが並列実行に対応していることを確認します。

  2. リモートで実行するツールとそれらを呼び出すツールを記述した Profile XML ファイルを作成します。

  3. Incredibuild で処理したいタスク (呼び出し元のタスクやリモートで実行したいタスクなど) ごとに設定用の Profile XML ファイルを作成します(Incredibuild で処理したくないタスクの宣言は不要です)。呼び出し元の各タスクに「AllowIntercept=true」を設定します。メインの実行ファイルは AllowIntercept 属性を「True」に設定した Profile XML で定義しなければなりません。リモートで実行するプロセスが、メイン実行ファイルの子プロセスによって生成される場合、メイン実行ファイルの下位プロセスの「AllowIntercept」属性を「True」に設定する必要があります。例えば、B を実行するメイン プロジェクト A があり、B が C (分散実行したいプロセス) を実行する場合、A と B の「AllowIntercept」属性を「True」に設定する必要があります。リモートマシンに分散するタスクは「AllowRemote=true」を設定します。

  4. IBConsole コマンドで、Profile XML ファイルの名前とジョブのコマンドライン、またはバッチ ファイル (アプリの実行コマンドを含む) の名前を指定して、高速化したいアプリまたはツールを Incredibuild を使って実行します (詳細は以下を参照)。テストのために、ローカルマシンのコア数以上のプロセスを起動するようにアプリを実行します。これで Incredibuild は一部のプロセスをリモートマシンに分散しなければならなくなります。IBConsole.exe を「/COMMAND=」構文で実行している場合、/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 ファイル

  • Other Options-その他のIBConsole.exeコマンドラインオプションについては、「DevToolsコマンドライン 」を参照してください。プロファイル XML ファイルを使用する代わりに、AllowInterceptAllowRemote ディレクティブを IBConsole のコマンドラインで明示的に指定することも可能です。

    IBConsole.exe /command="<TOOL COMMAND>" /allowremote="<FILENAME1[,FILENAME2,...]>" /allowintercept="<FILENAME1[,FILENAME2,...]>" [Other Options]

コマンドの詳細:

  • <TOOL COMMAND>: 並列実行モードでツールを実行するためのコマンドライン文字列

  • <FILENAME1[,FILENAME2,...]>: ツール ファイル名のリスト (コンマ区切りで複数入力)

  • [Other Options]: IBConsole.exe のオプションについては「IBConsole コマンドライン オプション」をご覧ください。

コマンドの例

RenderApp.exe というアプリケーションがあるとします。このアプリケーションはRenderTask.exe の多くのタスクを並行して実行することを認識しており、それぞれのRenderTask.exe はフレームを取得して、それらのタスクをレンダリングします。このアプリを通常通りに実行する(つまり複数のコアがない) 場合は、次のように呼び出します。

RenderApp 1-1000

この場合、アプリは RenderTask.exe タスクを 1,000 回実行して、その都度フレーム (1 ~ 1,000 まで) を取得してレンダリングすることになるので、すべてのフレームを処理するのに、1 フレームを処理する 1,000 倍の時間がかかります。

ほかにもローカルマシン上のローカルコアを指定する方法もあります。この場合、RenderApp を呼び出して 4 つのコアで実行します。

RenderApp 1-1000 –cores4

アプリは 4 つのコアで 1 つのタスクを実行する代わりに、4 つのコアで 4 つの RenderTask.exe タスクを同時に実行します。この方法では 1,000 件のタスクを 250 件分の時間で処理することができます。

Incredibuild では XML 形式のプロファイルを使ってアプリのさまざまなタスク (プロセス) の処理方法を指定することができます。メイン アプリの RenderApp はローカルマシン上で実行され、サブプロセスの呼び出し元となるので Profile XML では「AllowIntercept=true」と定義でき、リモートマシンで実行される RenderTask はリモートタスクとして定義することができます。

注意: リモートマシンにソフトウェアをインストールしたり、ファイルをアップロードしたりする必要はありません。リモートマシン上のコアは、まるでローカルマシン上に存在するかのように使用されます。

RenderApp.exe AllowIntercept=trueRenderTask.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. メイン プロセス「RenderApp.exe」を実行します。

  2. 「RenderApp.exe」の実行プロセスの呼び出しに関するすべてのコールが傍受し、profile.xml ファイルで「AllowRemote=true」と指定されたプロセスのリストと比較します。

  3. プロセス内で「AllowRemote=true」に指定されたプロセスを検出してリモートマシンに分散します。

  4. リモートマシンで生成された出力をローカルマシン (Initiator) に転送します。

RenderApp 1-1000 -cores4」の代わりに、次のコマンドを実行して RenderApp をもっと高速に処理することができます。

IBConsole RenderApp.exe 1-1000 -cores1000 /profile=profile.xml」。このコマンドを実行すると、1,000 件のタスクが Incredibuild のキューに入り、利用可能なコア数に応じてタスクが実行されます。例えば、200 個のコアが利用可能であれば、一度に 200 件のタスクを実行するので、5 件のタスクを実行する時間で 1,000 件のタスクをすべて処理することができます。

Incredibuild のインストール フォルダ内の「Samples\Dev Tools Interfaces Usage Samples\Intercepted Interface」にサンプル プロジェクトが用意されています。「サンプル プロジェクト」で簡単なインターセプション インターフェイスを試すことができます。

このサンプルで必要なパラメーターは次の通りです。

  • 実行する 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 個のインスタンスが 2 秒にわたって並列実行されます。このプロセスはプロファイルで「AllowRemote=true」と定義されているため、ローカルマシンとリモートマシンの両方で実行されます。