このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
スタンドアロン アプリケーションとしての並列対応 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
という名前のフォルダー内に実行可能ファイルが生成されます。
メモ:
生成されるスタンドアロン アプリケーションはクロス プラットフォームでないため、実行可能ファイルのタイプは生成されたプラットフォームによって異なります。
生成されたスタンドアロン アプリケーションには 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'