12

タイトルがすべてを物語っています。

基本的に、作成している多くのパラメーターを使用したシミュレーションで、MATLABに大量のRAMを誤って使用させるたびに、コンプをリセットしなければならないことにうんざりしています。

RAMの使用量がRAM全体の指定された割合を超え始めた場合に停止/エラーを発生させる方法はありますか?

私はメモリを割り当てるすべての場所でtry/catchを配置していることを知っていますが、これはすでに作成されているプログラム用であり、また、将来の参考のために、最初にパラメータを設定するだけで完了できるようにしたいと思いますそれ。

方法はありますか?

ありがとう!

4

2 に答える 2

8

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

見る

于 2013-01-03T18:12:24.617 に答える
7

表示される問題は、Matlabが仮想メモリの使用を開始したときに発生します。通常、タスクマネージャーを介してMatlabプロセスを強制終了できるはずですが、それが常に望ましいとは限りません。残念ながら、最大アレイサイズをグローバルに制限する単純なMatlab内部スイッチはありません。

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

将来の参考のために、私のシミュレーションでは、事前割り当ての最初に、シミュレーションパラメータ(の要素数)を指定して推定総メモリ使用量を計算するメソッド(サブ関数、OOPを実行したくない場合)があります。ダブルスに8倍使用するすべての大きな配列はバイト単位のメモリです)、RAMを使いすぎるとエラーが発生します。

簡単なメモリチェックの例を次に示します。3 m x 3xtの配列と5mxtの配列を割り当てる予定です。これらはすべて2倍になります。

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
于 2013-01-03T17:52:16.790 に答える