web-dev-qa-db-ja.com

本当に忙しいときにMATLABを中断するにはどうすればよいですか?

[〜#〜] matlab [〜#〜] で長いシミュレーションを実行していますが、停止して再実行する必要があることに気付きました。ただし、MATLABは実際にこの計算に関与しており、応答を停止しています。 MATLABを終了せずにこの実行を中断するにはどうすればよいですか?

(これは多くのWindowsプログラムの問題であることがわかりますが、MATLABでは非常に深刻です。)

34
Nathan Fellman

コマンドウィンドウに移動し、Ctrl-Cを何度か押します。私の経験から、シングルコアマシンでは、大量の出力を行わない限り、チャンスはありません。マルチコアまたはマルチプロセッサマシンでは、おそらく最終的に停止しますが、時間がかかります。

こちらもご覧ください http://www.mathworks.com/support/solutions/en/data/1-188VX/index.html

追加:(1)本当に長いものを実行する前にワークスペースのスナップショットを保存し、(2)非常に長い計算内で、停電が原因で計算が中断された場合に計算を再開できるように、変数の一部をファイルに時々書き込むことができます。

22
AVB

MATLABがCTRL-Cにどれだけうまく応答するかは、何をしているのかに依存します。たとえば、BLASまたはLAPACK呼び出しの途中にある場合、その呼び出しが戻るまで応答しません。 MATLABの多くの行が実行されているコードブロックにいる場合、CTRL-Cの応答性が向上することが期待できます。

18
Edric

応答しない実行を一時停止(または停止)する非常に簡単なトリックがあります。シミュレーションで長いループが実行されている場合、私は常に次のことを行います。

for ii = 1:N
   do_stuff();
   clear empty_script;
   empty_script;
end

次に、以下を含むファイルempty_script.mを作成します。

%keyboard

実行を一時停止するには、外部テキストエディターを開き、empty_script.mkeyboardという行のコメントを解除します。これにより、変数を監視したり、内容を変更したり、プログラムを停止したりできるデバッグモードになります。

6

この問題に対処する別の戦略は、次のように、計算のどこか(特にFORまたはWHILEループ)で非常に短い休止を導入することです。

for ii = 1:N
do_stuff();
pause(0.1);
end

これにより、熱狂的なCtrl-Cが実際に停止する可能性が高くなります。

5
Doodles

windowsタスクマネージャーでMATLABプロセスを見つけて、優先度を高または低に設定し、他のプログラムに低または高の優先度を持たせることができます。私の経験では、それは効率的な方法です。

1