5

次のような質問があります: Mathematica running out of memory

私はこのようなものに興味があります:

ParallelTable[F[i], {i, 0, 14.9, 0.001}]

どこでF[i]は複雑な数値積分です (積分の定義をページいっぱいにせずに問題を再現する簡単な方法はまだ見つけていません)。

私の問題は、サブカーネルがメモリ内で爆発し、マシンをスワップさせない場合は評価を停止する必要があることです。

しかし、評価を停止したとしても、カーネルは占有されているメモリを解放しません。

ClearSystemCache[] 

私も試してみました

ParallelEvaluate[ClearSystemCache[]]

しかし

ParallelEvaluate[MemoryInUse[]]

にとどまる

{823185944, 833146832, 812429208, 840150336, 850057024, 834441704, 
847068768, 850424224}

すべてのメモリ制御はメイン カーネルに対してのみ機能するようですか? 今のところ唯一の方法は、すべてのカーネルをシャットダウンしてから再起動することです。

そこにいくつかの解決策があることを本当に願っています...どうもありがとう。

4

2 に答える 2

3

MemoryConstrainedメモリ制御は、MemoryInUseClearUnsetRemove$HistoryLengthClearSystemCache などの関数を含む制御式が評価されるカーネルに対して機能します。あなたの場合、メモリ リークの原因はMathematicaの内部キャッシング メカニズムによるものではないようです (リンクをありがとう、BTW!)。

$HistoryLength=0;計算に使用する前に、すべてのサブカーネルで評価を試みましたか? まだお持ちでない場合は、ぜひお試しください。

数値積分関数を使用しているため、それらの使用を最適化することもお勧めします。たとえば、 を使用して数値積分をNDSolve行い、計算された点の限られたセット (または 1 つの点のみ) のみが必要な場合は、またはの代わりに形式NDSolve[eqns,y,{x,x_needed_min,x_needed_max}](またはNDSolve[eqns,y,{x,x_max,x_max}]NDSolve[eqns,y,{x,x_min,x_max}]NDSolve[eqns,y,{x,0,x_max}]) を使用する必要があります。これにより、場合によってはメモリ使用量を大幅に削減できます。メモリ制御に使用EventLocatorできます。

于 2011-07-24T06:05:31.643 に答える
0

私はまったく同じ問題を抱えていました。ほぼ一言一句です。問題の積分にオプションを追加することで、幸運がありました。

Method-> {"GlobalAdaptive", "SymbolicProcessing"->False}

必要に応じて他の方法を選択することもできますが、ここ数分でこれで成功しました。また、私が得ていた厄介な矛盾の多くがなくなり、統合がはるかに速く進みます。

于 2011-08-18T22:26:33.783 に答える