1

Linux で実行されている長い処理パイプラインの途中に、matlab 処理スクリプトがあります。

matlab スクリプトは、(8 コア) で並列に多数Nのデータセットに同じ操作を適用します。通常、データセット全体の処理には約 2 時間かかります (8 コアの場合)。D_i (i=1,2,...,N)parfor

残念ながら、時々、matlab サブプロセスの 1 つがランダムにクラッシュするようです。これにより、ジョブを完了できなくなります (そして、パイプラインを完了できません)。

D_iプロセスがクラッシュした場所を具体的に再処理した場合、問題なく実行されるため、これはデータに依存しないと確信しています。さらに、これまでに数千の前述のデータセットを処理しました。


今問題に対処する方法(...手動で...):

matlab ジョブを開始した後、マシンのプロセス リストを定期的にチェックします (単純な を使用top)。2 時間の作業の後、1 つの matlab プロセスが生きている場合はいつでも、それがクラッシュしたことを確認できます。次に、単純にそれを強制終了し、分析されていないデータセットの部分を処理します。


質問:

実行中のすべての matlab プロセスをタイムアウトし、たとえば 2 時間以上 CPU が稼働している場合はいつでもそれらを強制終了する方法についての提案を探しています。

4

1 に答える 1

0

PARFORの代わりに PARFEVALを使用するようにコードを再構築することで、これを実行できるはずです。Loren のブログ ( http://blogs.mathworks.com/loren/2013/12/09/getting-data-from-a-web-api-in-parallel/ ) のこのエントリに簡単な例があります。一定時間後に作業を待つのをやめます。

于 2014-09-26T15:22:56.957 に答える