Mic*_*ett 5 memory parallel-processing wolfram-mathematica mathematica-8
我有一个类似的问题: Mathematica耗尽内存
我对以下内容感兴趣:
ParallelTable[F[i], {i, 0, 14.9, 0.001}]
Run Code Online (Sandbox Code Playgroud)
哪里F[i]是一个复杂的数值积分(我还没有找到一种简单的方法来重现问题,而没有页面填充定义的积分).
我的问题是子内核在内存中爆炸,如果我不让机器交换,我必须停止评估.
但即使我已经停止评估,内核也不会释放他们占用的内存.
ClearSystemCache[]
Run Code Online (Sandbox Code Playgroud)
我甚至试过了
ParallelEvaluate[ClearSystemCache[]]
Run Code Online (Sandbox Code Playgroud)
但
ParallelEvaluate[MemoryInUse[]]
Run Code Online (Sandbox Code Playgroud)
留在
{823185944, 833146832, 812429208, 840150336, 850057024, 834441704,
847068768, 850424224}
Run Code Online (Sandbox Code Playgroud)
似乎所有内存控制只适用于主内核?到目前为止,唯一的方法是关闭所有内核并再次启动它们.
我真的希望有一些解决方案...非常感谢.
内存控制适用于内核,其中计算涉及MemoryConstrained、MemoryInUse、Clear、Unset、Remove、$HistoryLength等函数ClearSystemCache 的控制表达式。在您的情况下,内存泄漏的根源似乎不是由于Mathematica的内部缓存机制(感谢您的链接,顺便说一句!)。
$HistoryLength=0;在使用它们进行计算之前,您是否尝试过在所有子内核中进行评估?如果您还没有,我强烈建议您尝试一下。
由于您正在使用数值积分函数,我建议还尝试优化它们的使用。例如,如果您使用NDSolve有限的一组计算点(甚至是唯一的一个点)进行数值积分,则应该使用形式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内存控制。