2013-01-03 3 views
12

タイトルはそれをすべて言っています。RAMの使用量が指定された量を超えた場合は、直ちにMATLABを停止します。方法はありますか?

私が作成している多くのパラメータを持つシミュレーションで、MATLABが大量のRAMを誤って使用するようになるたびに、私は自分のコンプをリセットする必要があります。

RAMの使用量が全RAMの指定されたパーセンテージを超え始めると、停止/エラーを出す方法はありますか?

私はメモリを割り当てる場所ごとにtry/catchを置くことを知っていますが、これは既に書かれているプログラムのためのもので、将来の参照のために、最初にパラメータを設定できるようにしたいそしてそれで済ませてください。

方法はありますか?

ありがとうございます!

答えて

7

Matlabが仮想メモリの使用を開始すると、表示される問題が発生します。通常、Task Managerを介してMatlabプロセスを終了することができますが、必ずしもそうとは限りません。残念ながら、最大の配列サイズをグローバルに制限する単純なMatlab内部スイッチはありません。

あなたができることは、スワップファイルのサイズを非常に小さくすることです。そのため、Matlabは実際にはそれほど多く書くことはできませんが、これは他のプログラムのパフォーマンスに影響を与える可能性があります。他のMatlab以外のソリューションは、Linuxに切り替えることです(プログラムのメモリ制限をより簡単に設定でき、setting limits on both Windows and Linuxの詳細については、@ BenVoigtの回答を参照)、またはすべてを仮想マシンで実行することです。

私のシミュレーションでは、シミュレーションパラメータを使用した場合の推定メモリ使用量を計算する事前割り振りの開始時に、メソッド(サブ関数、OOPを実行したくない場合)があります私は2倍のために時間8を使用するすべての大きな配列の要素の数はバイト単位のメモリです)、それはあまりにも多くのRAMを使用するとエラーをスローします。

ここでは、簡単なメモリチェックの例を示します。私は3m×3xアレイと5m×tアレイを割り当てようとしていることを知っています。

maxMemFrac = 0.8; %# I want to use at most 80% of the available memory 

numElements = 3 * (m * 3 * t) + 5 * (m * t); 
numBytesNeeded = numElements * 8; %# I use double 

%# read available memory 
[~,memStats] = memory; 

if numBytesNeeded > memStats.PhysicalMemory.Available * maxMemFrac 
    error('MYSIM:OUTOFMEMORY','too much memory would be needed') 
end 
+0

ジョナス参照してください、その答えに感謝は、あなたがここにあなたのRAM-電卓-法を使用して/作っているかをより詳細に記述することができますか?私はそれを使うことができればそれが実行可能な解決策になると私は思う。ありがとう。 – Spacey

+0

Linuxに切り替えますか?われわれが知っている限り、彼はすでにLinuxを走らせている可能性があります –

+0

@BenVoigt私はWindowsマシン上で、Lunixへの切り替えは現時点で実現可能かもしれないとは思わない。 – Spacey

8

プロセスグループの仮想メモリ割り当てを設定できます。 Windowsでは、Jobオブジェクトを使用します。 * nixではulimitを使用してください。これは、MatLabだけでなく、どのプロセスでも機能します。

+0

ジョブオブジェクトは現在のプロセスの制限のみを作成できますか、それとも将来のインスタンスでも機能しますか? – Jonas

+2

@ Jonas:これは、ジョブオブジェクトに追加するプロセスに関係なく動作します。実行可能ファイルには永続的ではありませんが、それはあなたが意味することですが、ジョブオブジェクトを設定してMatLabインスタンスを起動するための小さなランチャーを書くことができます(またはダウンロードしてください。その仕事の中で –

+0

説明をありがとう。私は私の答えを修正します。 (+1 btw)。 – Jonas

関連する問題