gpt4 book ai didi

memory - Mathematica 中的子内核内存控制

转载 作者:行者123 更新时间:2023-12-04 20:54:04 25 4
gpt4 key购买 nike

我有一个有点类似的问题:
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}

似乎所有内存控制只适用于主内核?
现在唯一的方法是关闭所有内核并再次启动它们。

我真的希望有一些解决方案......
非常感谢。

最佳答案

内存控制适用于内核,其中控制表达式涉及诸如 MemoryConstrained 之类的函数。 , MemoryInUse , Clear , Unset , Remove , $HistoryLength , ClearSystemCache等进行评价。似乎在您的情况下,内存泄漏的来源不是由于 Mathematica's internal caching mechanism (感谢链接,顺便说一句!)。

您是否尝试过评估$HistoryLength=0;在将它们用于计算之前在所有子内核中?如果您还没有,我强烈建议您尝试一下。

由于您正在使用数值积分函数,我还建议尝试优化它们的使用。例如,如果您使用 NDSolve 进行数值积分并且只需要一组有限的计算点(甚至只有一个点)你应该use the form NDSolve[eqns,y,{x,x_needed_min,x_needed_max}] (or even NDSolve[eqns,y,{x,x_max,x_max}] ) instead of NDSolve[eqns,y,{x,x_min,x_max}] or NDSolve[eqns,y,{x,0,x_max}] .在某些情况下,这可以显着减少内存使用!您也可以use EventLocator for memory control .

关于memory - Mathematica 中的子内核内存控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6773009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com