最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Simulink.sdi.WorkerRun クラス

パッケージ: Simulink.sdi

並列ワーカーからシミュレーション データにアクセスする

説明

Simulink.sdi.WorkerRun クラスは、Parallel Computing Toolbox™ 並列ワーカーで生成された実行データへのアクセスを提供します。ワーカーで Simulink.sdi.WorkerRun オブジェクトを作成した後に、このオブジェクトを使用してローカル MATLAB® セッションのデータにアクセスします。

作成

workerRun = Simulink.sdi.WorkerRun(runID) は、runID で指定された実行識別子をもつ Simulink.sdi.WorkerRun オブジェクトを作成します。

workerRun = Simulink.sdi.WorkerRun.getLatest は、最新の実行の Simulink.sdi.WorkerRun オブジェクトを作成します。

入力引数

すべて展開する

実行の識別子

メソッド

getDatasetワーカー実行データのデータセットを作成する
getDatasetRefワーカー実行の DatasetRef を作成する
getLatest最新の実行のワーカー実行を作成する
getLocalRunワーカー実行からローカル実行を作成する

コピーのセマンティクス

ハンドル。ハンドル クラスがコピー操作にどのように影響するかについては、オブジェクトのコピー (MATLAB)を参照してください。

すべて折りたたむ

この例では、さまざまな入力フィルターの時定数でモデル slexAircraftExample の並列シミュレーションを実行し、シミュレーション データ インスペクターのプログラムによるインターフェイスを使用してデータにアクセスするいくつかの方法を示します。

設定

シミュレーション データ インスペクターが空であり、Parallel Computing Toolbox のサポートがローカル ワーカーで作成された実行を自動的にインポートするように、確実に設定されていることから始めます。次に、各シミュレーションで使用するフィルター パラメーター値のベクトルを作成します。

% Make sure the Simulation Data Inspector is empty, and PCT support is
% enabled. 
Simulink.sdi.clear
Simulink.sdi.enablePCTSupport('local')

% Define Ts values
Ts_vals = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; 

並列ワーカーの初期化

並列シミュレーションを実行するローカル ワーカーのプールを未作成の場合は、gcp を使用して作成します。spmd コード ブロックで、slexAircraftExample モデルを読み込み、ログに記録する信号を選択します。simparfor で使用する際のデータの同時実行の問題を回避するには、シミュレーション中に使用する一時ディレクトリをワーカーごとに作成します。

p = gcp;
Starting parallel pool (parpool) using the 'local' profile ...
connected to 4 workers.
spmd
    
    % Load system and select signals to log
    load_system('slexAircraftExample')
    Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot', 1, 'on')
    Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model', 4, 'on')
    
    % Create temporary directory on each worker
    workDir = pwd;
    addpath(workDir)
    tempDir = tempname;
    mkdir(tempDir)
    cd(tempDir)
    
end

並列シミュレーションの実行

parfor を使用して 7 つのシミュレーションを並列実行します。各シミュレーションの Ts の値を選択し、モデル ワークスペースで Ts の値を変更します。次に、シミュレーションを実行し、Simulink.sdi.WorkerRun オブジェクトの配列を作成して、シミュレーション データ インスペクターでデータにアクセスします。parfor ループの後、別の spmd セグメントを使用して一時ディレクトリをワーカーから削除します。

parfor index = 1:7
    
    % Select value for Ts
    Ts_val = Ts_vals(index);
    
    % Change the filter time constant and simulate
    modelWorkspace = get_param('slexAircraftExample','modelworkspace');
    modelWorkspace.assignin('Ts',Ts_val)
    sim('slexAircraftExample')
    
    % Create a worker run for each simulation
    workerRun(index) = Simulink.sdi.WorkerRun.getLatest
    
end

spmd
        
    % Remove temporary directories
    cd(workDir)
    rmdir(tempDir, 's')
    rmpath(workDir)
    
end

並列シミュレーション出力から Dataset オブジェクトを取得

getDataset メソッドは WorkerRun から Dataset オブジェクトにデータを格納し、簡単に後処理できるようにします。

ds(7) = Simulink.SimulationData.Dataset;

for a = 1:7
    ds(a) = workerRun(a).getDataset;
end
ds(1)
ans = 
Simulink.SimulationData.Dataset '' with 2 elements

                         Name        BlockPath                                
                         __________  ________________________________________ 
    1  [1x1 Signal]      alpha, rad  ...rcraftExample/Aircraft Dynamics Model
    2  [1x1 Signal]      Stick       slexAircraftExample/Pilot               

  - Use braces { } to access, modify, or add elements using index.

並列シミュレーション出力から DatasetRef オブジェクトを取得

ビッグ データのワークフローの場合は、getDatasetRef メソッドを使用して WorkerRun に関連付けられているデータを参照します。

for b = 1:7
    datasetRef(b) = workerRun(b).getDatasetRef;
end

datasetRef(1)
ans = 
  DatasetRef with properties:

           Name: 'Run 3: slexAircraftExample'
            Run: [1×1 Simulink.sdi.Run]
    numElements: 2

シミュレーション データ インスペクターで並列シミュレーション データを処理

ローカルの Run オブジェクトを作成し、シミュレーション データ インスペクター API を使用してデータの解析と可視化を行うこともできます。この例では各実行に対するフィルター時定数値を示すタグを追加します。

for c = 1:7
    
    Runs(c) = workerRun(c).getLocalRun;
    Ts_val_str = num2str(Ts_vals(c));
    desc = strcat('Ts = ', Ts_val_str);
    Runs(c).Description = desc;
    Runs(c).Name = strcat('slexAircraftExample run Ts=', Ts_val_str);
    
end

ワーカー リポジトリをクリーンアップ

ワーカーが使用したファイルをクリーンアップし、ワーカー プールで実行するその他のシミュレーション用にディスク容量を解放します。

Simulink.sdi.cleanupWorkerResources

代替方法

シミュレーション データ インスペクター UI を使用して Parallel Computing Toolbox ワーカーからシミュレーション データにアクセスし、表示および解析することもできます。

R2017b で導入