Main Content

Simulink.sdi.sendWorkerRunToClient

並列ワーカーで作成された実行をシミュレーション データ インスペクターに送信

説明

Simulink.sdi.sendWorkerRunToClient は、ワーカーによって最後に生成された実行をクライアント MATLAB® に送信し、実行をシミュレーション データ インスペクターにインポートします。

Simulink.sdi.sendWorkerRunToClient(run) は、run に対応する実行をクライアント MATLAB に送信し、実行をシミュレーション データ インスペクターにインポートします。

すべて折りたたむ

この例では、並列ワーカーを使用して作成された実行を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

入力引数

すべて折りたたむ

シミュレーション データ インスペクターにインポートする実行に対応する実行 ID または Simulink.sdi.Run オブジェクト。

バージョン履歴

R2018a で導入