Simulink Control Design

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

並列計算を使用した周波数応答推定の高速化

この例では、Simulink モデルの周波数応答推定を高速化するために並行計算を使用する方法を説明します。状況により、コマンド FRESTIMATE は、複数の Simulink シミュレーションを実行して Simulink モデルの周波数応答を推定します。これらのシミュレーションは、Parallel Computing Toolbox を使用して MATLAB ワーカーのプールに配布できます。

この例では、Parallel Computing Toolbox が必要です。オプションで MATLAB Distributed Computing Server を使用して、コンピューター クラスターでシミュレーションを実行できます。この例では、Parallel Computing Toolbox で使用できるローカル ワーカーの機能を使用します。

FRESTIMATE で実行される Simulink シミュレーションの高速化

FRESTIMATE コマンドを使用して周波数応答を計算する場合、計算時間のほとんどは通常、Simulink シミュレーションに費やされます。シミュレーションの合計時間を短縮するには、次のようにします。

1. ラピッド アクセラレータ モードを使用する。FRESTIMATE コマンドを用いたラピッド アクセラレータ モードの使用例として、「線形化の検証例」を参照してください。この方法は、FRESTIMATE で Simulink シミュレーションを 1 つだけを実行するときに使用します。

2. MATLAB プールのワーカー間でシミュレーションを配布する。この方法は、FRESTIMATE で複数の Simulink シミュレーションを実行するときに使用します。FRESTIMATE は、以下を指定すると複数の Simulink シミュレーションを実行します。

  • "SimulationOrder" パラメーターが "OneAtATime" に設定されている Sinestream の入力信号。この場合、Sinestream 信号の各周波数は別々にシミュレートされます。

  • 複数の入力ポイントまたは非スカラーの入力ポイントをもつ線形化 I/O 点。この場合、各線形化入力ポイントまたは非スカラー線形化入力ポイントの各チャンネルで、個別の Simulink シミュレーションを実行します。

並行計算オプションを使用した FRESTIMATE コマンドは、ノーマル モード、アクセラレータ モード、ラピッド アクセラレータ モードもサポートしています。

MATLAB プールの構成

並行計算を使用して周波数応答推定を高速化するには、FRESTIMATE コマンドを実行する前に MATLAB ワーカーのプールを構成して開始します。

gcp および parpool コマンドを使用して MATLAB プールが開いていることを確認し、マルチコア デスクトップでローカル プールを開きます。これには、Parallel Computing Toolbox が必要です。

if isempty(gcp)
   %The parpool is not open, so open one
   parpool local
end
Starting parallel pool (parpool) using the 'local' profile ... connected to 6 workers.

Sinestream の入力における各周波数の Simulink シミュレーションの配布

FRESTIMATE コマンドで Sinestream の入力信号を使用し、"SimulationOrder" パラメーターを "OneAtATime" に設定すると、Sinestream 信号の各周波数は別個の Simulink シミュレーションでシミュレートされます。並行計算オプションを有効にすると、個々の周波数に対応するシミュレーションが MATLAB プールのワーカー間で配布されます。

scdengine
mdl = 'scdengine';
io = getlinio(mdl);
in = frest.Sinestream('Frequency',logspace(-1,1,50),'Amplitude',1e-3,...
    'SimulationOrder','OneAtATime');

上記のエンジン モデルには、単一の線形化入力ポイントと単一の線形化出力ポイントがあります。Sinestream 信号には 50 の周波数があり、"SimulationOrder" パラメーターが "OneAtATime" に設定されているため、FRESTIMATE コマンドは 50 の別個の Simulink シミュレーションを実行します。FRESTIMATE の並列計算オプションを有効にして、これらのシミュレーションをワーカー間で配布するには、frestimateOptions コマンドを使用して周波数応答推定オプション オブジェクトを作成し、"UseParallel" パラメーターを "on" に設定します。このオブジェクトを FRESTIMATE の入力引数として使用します。

opt = frestimateOptions('UseParallel','on');
sysest = frestimate(mdl,io,in,opt);
bode(sysest,'r*')

FRESTIMATE コマンドが、有効にされた並列計算オプションを使用した場合と使用しない場合で完全に最後まで実行するのに要する時間は次のとおりです。この例では、Intel Core(TM)2 Quad 2.4 GHz プロセッサと 4 GB の RAM を搭載した PC を使用しています。

Parallel Computing Option Time(secs) Speedup
------------------------- ---------  -------
Disabled                     43.69         1
Enabled with 2 workers       25.34      1.72
Enabled with 3 workers       15.46      2.83
Enabled with 4 workers       11.52      3.79

並行計算によって、周波数応答推定が著しく高速化されます。クライアントとワーカー間のデータおよびコード転送のオーバーヘッドやワーカー プロセスと OS プロセス間のリソース競合などのさまざまな要因によって、不完全な高速化が発生する場合があります。最初のシミュレーションの場合 (つまり、MATLAB ワーカーのプールを開いた直後)、Simulink の起動時間がオーバーヘッドに追加されます。

bdclose(mdl);

入力チャンネルの Simulink シミュレーションの配布

線形化入力ポイントの数または線形化入力ポイントのチャンネル数が複数の場合、FRESTIMATE コマンドは、これらの入力チャンネルに対応する個々の Simulink シミュレーションを MATLAB プールのワーカー間で配布します。

scdmechconveyor
mdl = 'scdmechconveyor';

io(1) = linio('scdmechconveyor/Constant',1,'input');
io(2) = linio('scdmechconveyor/Position Controller',1,'input');
io(3) = linio('scdmechconveyor/Joint Sensor',1,'output');

% Find the steady state operating point
op = findop(mdl,20);
% Linearize the system and create input signal using linearization result
sys = linearize(mdl,io,op);
in = frest.Sinestream(sys);

linio コマンドを使用して、2 つの線形化入力ポイントを指定します。これはどちらもスカラーの Simulink 信号にあります。FRESTIMATE コマンドを実行してこのモデルの周波数応答を推定すると、2 つの Simulink シミュレーションが各入力に対して 1 つずつ実行されます。並行計算オプションを有効にすると、シミュレーションはワーカー間で配布されます。並行計算オプションが有効である FRESTIMATE コマンドを実行し、解析的な線形化に対して推定結果をプロットします。

opt = frestimateOptions('UseParallel','on');
sysest = frestimate(mdl,io,in,op,opt);
bodeopts = bodeoptions;
bodeopts.PhaseMatching = 'on';
bodeplot(sys,sysest,'r*',bodeopts)

FRESTIMATE コマンドが、有効にされた並列計算オプションを使用した場合と使用しない場合で完全に最後まで実行するのに要する時間は次のとおりです。この例では、Intel Core(TM)2 Quad 2.4 GHz プロセッサと 4 GB の RAM を搭載した PC を使用しています。

Parallel Computing Option Time(secs) Speedup
------------------------- ---------  -------
Disabled                     56.99         1
Enabled with 2 workers       31.94      1.72

周波数のシミュレーションを配布する場合と同様に、並行計算オプションを有効にすると、速度が 2 倍近く向上することが表に示されています。前述のように、いくつかの要因によって、クライアントとワーカー間のデータおよびコード転送やワーカー プロセスと OS プロセス間のリソース競合などの不完全な高速化が発生する場合があります。

モデルと並列プールを閉じます。

bdclose(mdl);
delete(gcp);
Parallel pool using the 'local' profile is shutting down.