Simulink.sdi.enablePCTSupport
並列シミュレーションからシミュレーション データ インスペクターにデータをインポートするタイミングを制御
説明
Simulink.sdi.enablePCTSupport(
は、mode
)mode
によって指定されたモードに従って、並列ワーカーからシミュレーション データ インスペクターへのデータ インポートを設定します。シミュレーション データ インスペクターは、ローカル ワーカーのデータのみ、またはローカル ワーカーとリモート ワーカーのデータをインポートするように設定できます。モードを手動に設定することもできます。これにより、関数 Simulink.sdi.sendWorkerRunToClient
を使用して実行をシミュレーション データ インスペクターに手動でインポートできます。既定では、シミュレーション データ インスペクターは手動インポート モードに設定されています。
例
すべての並列ワーカーに対して自動データ インポートを有効化
ローカル ワーカーとリモート ワーカーの両方から出力を自動的にインポートするようにシミュレーション データ インスペクターの並列ワーカー サポートを設定します。
Simulink.sdi.enablePCTSupport('all')
並列ワーカーからの自動データ インポートの無効化
Parallel Computing Toolbox™ ワーカーからの出力がシミュレーション データ インスペクターに自動的にインポートされるのを防ぐには、手動サポート モードを指定します。
Simulink.sdi.enablePCTSupport('manual')
並列ワーカーからシミュレーション データ インスペクターに手動で実行を送信
この例では、並列ワーカーを使用して作成された実行を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
並列シミュレーションからデータにアクセス
この例では、さまざまな入力フィルターの時定数でモデル 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
モデルを読み込み、ログに記録する信号を選択します。sim
を parfor
で使用する際のデータの同時実行の問題を回避するには、シミュレーション中に使用する一時ディレクトリをワーカーごとに作成します。
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
入力引数
mode
— 並列ワーカーのデータ インポート モード
'manual'
(既定値) | 'local'
| 'all'
並列ワーカーで記録されたデータに関するシミュレーション データ インスペクターのデータ インポート モード。次のいずれかのオプションとして指定します。
'manual'
— 並列ワーカーで作成された実行を自動的にインポートしません。並列ワーカーで作成された実行を関数Simulink.sdi.sendWorkerRunToClient
を使用して手動でインポートできます。'local'
— ローカル ワーカーで作成された実行を自動的にインポートします。'all'
— ローカル ワーカーおよびリモート ワーカーで作成された実行を自動的にインポートします。
データ型: char
| string
代替機能
[基本設定] 、 [並列] を選択することで、シミュレーション データ インスペクターで並列計算サポート モードを変更することができます。
バージョン履歴
R2017b で導入R2020a: 'none'
入力はサポートされない
R2020a 以降、関数 Simulink.sdi.enablePCTSupport
では 'none'
入力オプションをサポートしなくなりました。並列ワーカーで記録されたデータのシミュレーション データ インスペクターへの自動インポートを無効にするには、'manual'
オプションを使用します。
R2020a: 論理入力は無視される
R2020a 以降、関数 Simulink.sdi.enablePCTSupport
は論理入力を無視します。関数 Simulink.sdi.enablePCTSupport
に対して論理入力を指定するスクリプトでは、0
または false
入力を 'manual'
入力オプションで置き換え、1
または true
入力を 'all'
オプションで置き換えることで同等の動作が得られます。
R2018a: 入力値の変更
R2018a 以降、Simulink.sdi.enablePCTSupport
の入力値が次に変更されました。
'local'
'none'
'all'
'manual'
R2017b では、関数 Simulink.sdi.enablePCTSupport
は、並列シミュレーションで記録されたデータに対するシミュレーション データ インスペクターのサポートを有効または無効にするために論理入力を受け入れていました。
true
または1
は、すべての並列ワーカーからシミュレーション データ インスペクターへのデータの自動インポートのサポートを有効にします。R2018a では、同じ動作に対して
'all'
オプションを使用します。ローカル ワーカーからのみデータを自動でインポートする必要がある場合は、新しい'local'
入力を使用することもできます。false
または0
は、並列ワーカーで記録されたデータのインポートのサポートをすべて無効にします。R2018a では、同じ動作に対して
'none'
オプションを使用します。ワーカーでデータを解析して、個々の実行を並列ワーカーからシミュレーション データ インスペクターにインポートするかどうかを判断する場合は、新しい'manual'
オプションを使用することもできます。
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)