Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

スタンドアロン アプリケーションとしての並列対応 MATLAB 関数のデプロイ

この例では、MATLAB® Compiler™ を使用してスタンドアロン アプリケーションとして並列で実行されるモンテカルロ シミュレーションをデプロイする方法について説明します。

スタンドアロン アプリケーションとして並列で実行される MATLAB® 関数をデプロイする場合は、コードが実行されるクラスターのクラスター プロファイルが MATLAB 関数で使用可能でなければなりません。以下によってクラスター プロファイルを設定できます。

  • MATLAB 関数コードにクラスター プロファイルのパスを含める。

  • MATLAB 関数をスタンドアロン アプリケーションにパッケージ化する際に追加ファイルとしてクラスター プロファイルを含める。

  • 実行時にスタンドアロン アプリケーションにクラスター プロファイルを渡す。

関数setmcruserdataを使用して MATLAB 関数内でクラスター プロファイルを設定し、mcruserdata オプションを使用して実行時にスタンドアロン アプリケーションにクラスター プロファイルを渡すことができます。詳細については、デプロイ アプリケーションでの Parallel Computing Toolbox の使用を参照してください。

この例では、MATLAB 関数をスタンドアロン アプリケーションにパッケージ化する際にクラスター プロファイルが追加ファイルとして含まれます。実行時にクラスター プロファイルを渡す方法の詳細については、実行時にクラスター プロファイルを渡すを参照してください。

MATLAB 関数の作成

ドル オークションに基づいて単純な確率的シミュレーションを実行する mcsim という名前の MATLAB 関数を作成します。この関数はモンテカルロ法を使用することで、複数のシミュレーションを実行して 1 ドル紙幣の市場価値を求めます。この関数を mcsim.m という名前のファイルに保存します。詳細については、parfor を使用したモンテカルロ コードの高速化 (Parallel Computing Toolbox)を参照してください。

function B = mcsim(nTrials, nPlayers, incr, dropoutRate)

%% specify cluster profile
mpSettingsPath = which('deployLocal.mlsettings'); 
setmcruserdata('ParallelProfile', mpSettingsPath);

%% parfor-loop to produce nTrials samples
% store the last bid from each trial in B
t = zeros(1,5);
for j = 1:5
    tic
    parfor i = 1:nTrials
        bids = dollarAuction(nPlayers,incr,dropoutRate);
        B(i) = bids.Bid(end);
    end
    t(j) = toc;
end
parforTime = min(t);

%% display results
disp(['parforTime = ' num2str(parforTime)])
disp(['Average market value = ' num2str(mean(B))])

この例では、MATLAB 関数をスタンドアロン アプリケーションにパッケージ化する際にクラスター プロファイルが追加ファイルとして含まれます。パッケージ化の際にアプリケーションに追加されたファイルはすべてアプリケーションの検索パスに追加されるため、上記コードで which コマンドを使用すると、クラスター プロファイルの絶対パスが返されます。その後、関数 setmcruserdata により、クラスター プロファイルのパスを使用してクラスター プロファイルを設定できます。

"compiler.build.standaloneApplication" を使用したスタンドアロン アプリケーションの作成

関数 compiler.build.standaloneApplication を使用して、MATLAB 関数からスタンドアロン アプリケーションを作成します。

appFile = "mcsim.m";
parallelProfileFile = fullfile(pwd,'deployLocal.mlsettings');
buildResults = compiler.build.standaloneApplication(appFile,...
    "AdditionalFiles",parallelProfileFile,...
    "TreatInputsAsNumeric",'on')
buildResults = 
  Results with properties:

                  BuildType: 'standaloneApplication'
                      Files: {2×1 cell}
    IncludedSupportPackages: {}
                    Options: [1×1 compiler.build.StandaloneApplicationOptions]

この関数により、現在の作業ディレクトリの mcsimstandaloneApplication という名前のフォルダー内に実行可能ファイルが生成されます。

メモ:

  1. 生成されるスタンドアロン アプリケーションはクロス プラットフォームでないため、実行可能ファイルのタイプは生成されたプラットフォームによって異なります。

  2. 生成されたスタンドアロン アプリケーションには MATLAB Runtime やインストーラーが含まれていません。buildResults オブジェクトを使用してインストーラーを作成するには、関数compiler.package.installerを使用します。

スタンドアロン アプリケーションのテスト

MATLAB 内から mcsim を実行するには、MATLAB デスクトップ環境内から mcsimstandaloneApplication フォルダーに移動し、オペレーティング システムに基づいて以下のコマンドのいずれかを実行します。

Windows

!mcsim.exe 10000 20 0.05 0.01
Starting parallel pool (parpool) using the 'deployLocal' profile ... 
Connected to parallel pool with 4 workers. 
parforTime = 5.3772 
Average market value = 5.8624 

Linux

!./mcsim 10000 20 0.05 0.01

macOS

system(['./run_mcsim.sh', matlabroot, '10000','20', '0.05', '0.01']);

スタンドアロン アプリケーションの実行

システム コマンド プロンプトで、スタンドアロン実行可能ファイルが含まれているフォルダーに移動します。

オペレーティング システムに基づいて次のいずれかのコマンドを使用し、mcsim を実行します。

Windows

mcsim.exe 10000 20 0.05 0.01

Linux

シェル スクリプトを使用:

./run_mcsim.sh <MATLAB_RUNTIME_INSTALL_DIR> 10000 20 0.05 0.01

実行可能ファイルを使用:

./mcsim 10000 20 0.05 0.01

macOS

シェル スクリプトを使用:

./run_mcsim.sh <MATLAB_RUNTIME_INSTALL_DIR> 10000 20 0.05 0.01

実行可能ファイルを使用:

./mcsim.app/Contents/macOS/mcsim 10000 20 0.05 0.01

実行時にクラスター プロファイルを渡す

実行時にクラスター プロファイルを渡すには、アプリケーションの実行時に mcruserdata オプションを使用します。

mcsim 10000 20 0.05 0.01 -mcruserdata ParallelProfile:'<path>\clusterProfile.mlsettings'

参考

関連するトピック