Optimization Toolbox での並列計算の使用
マルチコア プロセッサでの並列計算の使用方法
マルチコア プロセッサを使用している場合は、並列処理を使用すると処理速度が向上することがあります。Parallel Computing Toolbox™ ライセンスで、いくつかのワーカーの並列プールを設定できます。Parallel Computing Toolbox ソフトウェアの詳細は、Parallel Computing Toolbox 入門 (Parallel Computing Toolbox)を参照してください。
デュアルコア プロセッサが搭載されており、並列計算を使用するとします。次のコードをコマンド ラインで入力します。
parpool
MATLAB® が、マルチコア プロセッサを使用してワーカーのプールを開始します。既定ではないクラスター プロファイルが既に設定されている場合は、次のコードを入力することによって、マルチコア (ローカル) コンピューティングを実行できます。
parpool('local')
メモ
基本設定によっては、MATLAB は並列プールを自動的に起動できます。この機能を有効にするには、[ホーム] タブの [環境] グループで [並列]、[並列基本設定] を選択してから、[並列プールを自動的に作成する] をオンにします。
並列計算を使用するようにソルバー オプションを設定します。
options = optimoptions('solvername','UseParallel',true);
options
を使用して適用可能なソルバーを実行すると、そのソルバーは自動的に並列計算を使用します。
並列での最適化計算を停止するには、UseParallel
を false
に設定します。すべての並列計算を停止するには、次のコードを入力します。
delete(gcp)
メモ
ドキュメンテーションでは、Simulink® を呼び出す場合は parfor
または parfeval
を使用しないように推奨されています。parfor 内での関数 sim の使用 (Simulink)を参照してください。そのため、ソルバーの組み込み並列機能を使用して Simulink シミュレーションを並列で最適化すると問題が発生する可能性があります。
マルチプロセッサ ネットワークでの並列計算の使用
ネットワーク上に複数のプロセッサがある場合は、Parallel Computing Toolbox 関数と MATLAB Parallel Server™ ソフトウェアを使用して並列計算を設定します。
システムが並列計算用に正しく設定されていることを確認します。システム管理者にチェックを依頼するか、Parallel Computing Toolbox ドキュメンテーションを参照してください。
次のコードを入力して、基本チェックを実行します。ここで、
prof
はクラスター プロファイルです。parpool(prof)
ワーカーは目的関数のファイルと、該当する場合は非線形制約関数のファイルにアクセスできなければなりません。確実にアクセスするため、次のステップのいずれかを実行します。
parpool
(Parallel Computing Toolbox)AttachedFiles
引数を使用してワーカーにファイルを分散する。この例では、objfun.m
が目的関数ファイルで、constrfun.m
が非線形制約関数ファイルです。parpool('AttachedFiles',{'objfun.m','constrfun.m'});
ワーカーはファイルの独自のコピーにアクセスします。
目的または制約関数ファイルへのネットワーク ファイル パスを指定します。
pctRunOnAll('addpath network_file_path')
ワーカーはネットワークを通じて関数ファイルにアクセスします。
ファイルがすべてのワーカーのパス上にあるかどうかをチェックします。
ワーカーにファイルへのパスがない場合は、次のように出力されます。pctRunOnAll('which filename')
filename not found.
並列計算の使用を指定するようにソルバー オプションを設定します。引数 'solvername'
は、並列評価をサポートする非線形ソルバーを表します。
options = optimoptions('solvername','UseParallel',true);
並列計算環境を設定した後は、適用可能なソルバーは、options
を使用して呼び出したときにはいつでも自動的に並列計算を使用します。
並列での最適化計算を停止するには、UseParallel
を false
に設定します。すべての並列計算を停止するには、次のコードを入力します。
delete(gcp)
メモ
ドキュメンテーションでは、Simulink を呼び出す場合は parfor
または parfeval
を使用しないように推奨されています。parfor 内での関数 sim の使用 (Simulink)を参照してください。そのため、ソルバーの組み込み並列機能を使用して Simulink シミュレーションを並列で最適化すると問題が発生する可能性があります。
並列計算のテスト
次の手順に従って、問題が並列で正しく動作するかどうかをテストします。
並列計算を使用せずに問題を試し、それが逐次実行されることを確認します。次のテストに進む前に、このテストが成功する (正しい結果が得られる) ことを確認します。
UseParallel
をtrue
に設定し、delete(gcp)
を入力して並列プールが存在しないことを確認します。MATLAB が並列プールを作成しないことを確認するには、[ホーム] タブの [環境] グループで [並列]、[並列基本設定] を選択してから、[並列プールを自動的に作成する] をオフにします。for
ループとは逆順のループの反復によりparfor
で逐次的に問題を実行します。次のテストに進む前に、このテストが成功する (正しい結果が得られる) ことを確認します。UseParallel
をtrue
に設定し、parpool
を使用して並列プールを作成します。マルチコア プロセッサまたはネットワークを設定していない場合は、このテストの処理速度が向上しません。このテストは計算の正確性を検証するためのものです。
options
引数を使用してソルバーを呼び出し、並列機能をテストまたは使用するようにしてください。