Simulink.sdi.sendWorkerRunToClient
並列ワーカーで作成された実行をシミュレーション データ インスペクターに送信
説明
例
並列ワーカーからシミュレーション データ インスペクターに手動で実行を送信
この例では、並列ワーカーを使用して作成された実行をSimulink.sdi.sendWorkerRunToClient
を使用して手動でシミュレーション データ インスペクターに送信する方法について説明します。
設定
この例では、ゲインの値 Mu
を変化させて、vdp
モデルの複数のシミュレーションを実行します。並列シミュレーションを設定するには、Mu
値のベクトルを定義し、手動による Parallel Computing Toolbox のサポート用にシミュレーション データ インスペクターを設定します。
% Enable manual Parallel Computing Toolbox support Simulink.sdi.enablePCTSupport('manual'); % Choose several Mu values MuVals = [1 2 3 4];
並列ワーカーの初期化
parpool
(Parallel Computing Toolbox)を使用して 4 つの並列ワーカーのプールを開始します。この例では if ステートメント内の parpool
を呼び出すため、作成するのは並列プールのみです (まだない場合)。spmd
(Parallel Computing Toolbox)を使用してすべてのワーカーに共通の初期化コードを実行できます。たとえば、vdp
モデルを読み込み、クライアント MATLAB のシミュレーション データ インスペクターに送信できる実行にログを記録する信号を選択します。parfor
内の sim
でシミュレーションを実行する場合にデータの同時実行の問題を回避するには、各ワーカーに一時ディレクトリを作成します。シミュレーションが完了した後、別の spmd ブロックが一時ディレクトリを削除します。
p = gcp('nocreate'); if isempty(p) parpool(4); end
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.
spmd % Load system and select signals to log load_system('vdp') Simulink.sdi.markSignalForStreaming('vdp/x1',1,'on') Simulink.sdi.markSignalForStreaming('vdp/x2',1,'on') % Create temporary directory for simulation on worker workDir = pwd; addpath(workDir) tempDir = tempname; mkdir(tempDir) cd(tempDir) end
parfor
を使用した並列シミュレーションの実行
並列ワーカーからシミュレーション データ インスペクターにデータをストリーミングするには、parfor
(Parallel Computing Toolbox)を使用して並列シミュレーションを実行しなければなりません。各ワーカーは Mu
の異なる値を使用して vdp
シミュレーションを実行します。Simulink は parfor
ループの内容にアクセスできないため、変数 MuVal
がワーカーのワークスペースで定義されます。この場合、assignin
を使用して vdp
モデルで内容を表示できます。
parfor (index = 1:4) % Set value of Mu in the worker's base workspace assignin('base','MuVal',MuVals(index)); % Modify the value of Mu in the model and simulate set_param('vdp/Mu','Gain','MuVal') sim('vdp')
データにアクセスしてクライアント MATLAB に実行を送信
クライアント MATLAB で使用する場合と同じ方法で、ワーカーでシミュレーション データ インスペクターのプログラムによるインターフェイスを使用できます。この例では、Simulink.sdi.Run
オブジェクトを作成し、Tag
プロパティを使用したシミュレーションで使われた Mu
の値を付加します。
% Attach metadata to the run IDs = Simulink.sdi.getAllRunIDs; lastIndex = length(IDs); runID = Simulink.sdi.getRunIDByIndex(lastIndex); parRun = Simulink.sdi.getRun(runID); parRun.Tag = strcat('Mu = ',num2str(MuVals(index))); % Send the run to the Simulation Data Inspector on the client MATLAB Simulink.sdi.sendWorkerRunToClient end
一時ディレクトリを閉じてシミュレーション データ インスペクターで実行を表示
シミュレーションが完了したら、別の spmd
セクションを使用してワーカーで作成された一時ディレクトリを削除します。各シミュレーションで、Simulink.sdi.sendWorkerRunToClient
はすべてのワーカーからシミュレーション データ インスペクターに実行をインポートしました。データを表示して実行プロパティを確認し、シミュレーション中に使われた Mu
の値を確認できます。
spmd % Remove temporary directories cd(workDir) rmdir(tempDir, 's') rmpath(workDir) end Simulink.sdi.view
入力引数
run
— 実行 ID または Simulink.sdi.Run
オブジェクト
runID | Simulink.sdi.Run
オブジェクト
シミュレーション データ インスペクターにインポートする実行に対応する実行 ID または Simulink.sdi.Run
オブジェクト。
バージョン履歴
R2018a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)