ドキュメンテーション

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

並列計算によるパフォーマンスの向上

スピードに影響を与える要因

いくつかの要因が並列処理の実行速度に影響を与えます。

  • 並列オーバーヘッド。for の代わりの parfor の呼び出しにオーバーヘッドがあります。関数評価が速い場合、このオーバーヘッドがかなりの量になる可能性があります。とくに、並列で問題を解く場合は、その問題を連続して解く場合より遅くなることがあります。

  • 入れ子形式でない parfor ループ。これは 入れ子形式の並列関数 で説明されています。parfor は他の parfor ループから呼び出された場合は並列処理を行いません。並列処理を利用して目的関数または制約関数をプログラミングした場合、入れ子形式でない parfor ループであってもソルバーの実行は予想以上に遅くなる可能性があります。特に、それが外側のループであるため有限差分の並列計算が優先されます。これにより、目的関数または制約関数内のすべての並列コードが連続して実行され、並列に処理されなくなります。

  • 連続して実行した場合、parfor ループは for ループよりも実行が遅くなります。したがって、最良のパフォーマンスを得るには、最も外側のループのみが parfor を呼び出すようにします。たとえば、コードが parfor ループ内で fmincon を呼び出すとします。この場合に最良のパフォーマンスを得るには、fmincon UseParallel オプションを false に設定します。

  • 渡されるパラメーター。パラメーターは並列計算の実行中に自動的にワーカー マシンに渡されます。パラメーターが多数ある場合、またはパラメーターが大量のメモリを使用する場合、パラメーターを渡すと計算の実行が遅くなる可能性があります。

  • ネットワークと計算のリソースの競合。ワーカー マシンのネットワークが低帯域幅である場合や待ち時間が長い場合、計算が遅くなる可能性があります。

結果に影響を与える要因

並列処理を使用すると、いくつかの要因が数値結果に影響を与えます。Parallel Computing Toolbox™ ドキュメンテーションの 「制限」節には、parfor に関連する警告がより多く記述されています。

  • 永続変数またはグローバル変数。目的関数または制約関数が変数 persistent またはグローバル変数を使用する場合、これらの変数はワーカー プロセッサによって異なる値を取る可能性があります。さらに、これらはワーカー プロセッサ上で適切に消去されない可能性があります。

  • 外部ファイルへのアクセス。外部ファイルは並列処理中に予期しない方法でアクセスされる可能性があります。並列処理中は計算順序は保証されません。そのため外部ファイルは予期しない順番でアクセスされ、予期しない結果につながる可能性があります。

  • 外部ファイルへのアクセス。2 つ以上のプロセッサが外部ファイルを同時に読み取ろうとすると、ファイルはロックされ、読み取りエラーが起こる可能性があります。その場合、最適化の実行は停止します。

  • 目的関数が Simulink® を呼び出す場合、結果は並列の勾配推定を使用すると信頼性のないものになる可能性があります。

  • inputplotkeyboard のような計算をしない関数は、目的関数や制約関数で使用すると、うまく処理されない可能性があります。parfor ループで呼び出された場合、これらの関数はワーカー マシンで実行されます。これにより、ワーカーは入力待ちの状態になるため応答しなくなります。

  • parforbreak または return ステートメントを受け付けません。

大域的な最適値の検索

大域的な最適解を見つけるための 1 つの方法は、さまざまな初期点からのソルバーを実行することです。関数 parfor を使用して、これらの実行をいくつかのプロセッサに分割する場合、parfor ループは入れ子形式にできないため、並列勾配推定を無効にします。すべてのプロセッサに計算を分割する場合、一般的には最適化の実行は並列勾配推定を使用して連続的に処理するより速くなります。しかし、初期点より多くのプロセッサがある場合、並列の勾配推定をするより初期点を分配した方が良いかどうかは明確にわかりません。

Global Optimization Toolbox ライセンスをお持ちの場合は、MultiStart ソルバーを使用して、複数の開始点を並列で調べることができます。Global Optimization Toolbox ドキュメンテーションの「Parallel Computing」および「Parallel MultiStart」を参照してください。

この情報は役に立ちましたか?