gpt4 book ai didi

memory-leaks - 减少扩展 Mathematica session 中的内存使用量

转载 作者:行者123 更新时间:2023-12-03 22:31:58 24 4
gpt4 key购买 nike

我正在做一些相当长的计算,很容易跨越几天。在这些计算过程中,有时 Mathematica 会耗尽内存。为此,我最终求助于以下方面:

ParallelEvaluate[$KernelID]; (* Force the kernels to launch *)
kernels = Kernels[];

Do[
If[Mod[iteration, n] == 0,
CloseKernels[kernels];
LaunchKernels[kernels];
ClearSystemCache[]];
(* Complicated stuff here *)
Export[...], (* If a computation ends early I don't want to lose past results *)
{iteration, min, max}]

这很好,但随着时间的推移,主内核会积累内存。目前,我的主内核消耗了大约 1.4 GB 的 RAM。有什么办法可以强制 Mathematica 清除它正在使用的内存?我试过乱扔垃圾 ShareClear遍及众多 Modules我在我的代码中使用,但内存似乎仍然随着时间的推移而建立。

我还尝试确保在 Module 之外没有任何大而复杂的运行。 ,以便某些内容不会在范围内停留太久。但即便如此,我仍然有我的内存问题。

我能做些什么吗?我总是会使用大量内存,因为我的大部分计算都涉及几个大而密集的矩阵(通常是 1200 x 1200,但也可以更多),所以我对使用 MemoryConstrained 持谨慎态度。 .

更新:

问题正是 Alexey Popkov 在他的回答中所说的。如果您使用 Module ,随着时间的推移,内存会慢慢泄漏。碰巧在这种情况下加剧,因为我有多个 Module[..]声明。 “主” ModuleParallelTable 内8 个内核同时运行。处理(相对)大量的迭代,这是 的温床手数由于 Module 的错误导致的内存泄漏.

最佳答案

由于您使用的是 Module广泛,我想你可能有兴趣了解 this非删除临时错误 Module变量。

示例(不删除未链接的临时变量及其定义):

In[1]:= $HistoryLength=0;
a[b_]:=Module[{c,d},d:=9;d/;b===1];
Length@Names[$Context<>"*"]

Out[3]= 6

In[4]:= lst=Table[a[1],{1000}];
Length@Names[$Context<>"*"]

Out[5]= 1007

In[6]:= lst=.
Length@Names[$Context<>"*"]

Out[7]= 1007

In[8]:= Definition@d$999

Out[8]= Attributes[d$999]={Temporary}

d$999:=9

请注意,在上面的代码中我设置了 $HistoryLength = 0;强调 Module 的这种错误行为.如果你不这样做,临时变量仍然可以从历史变量( InOut )中链接,并且由于这个原因在更广泛的情况下不会被删除它们的定义(这不是错误,而是正如列昂尼德提到的那样)。

更新:只是为了记录。还有一个老 bug with non-deleting unreferenced Module variables after Part assignments to them在 v.5.2 中,即使在 7.0.1 版本中也没有完全修复:
In[1]:= $HistoryLength=0;$Version
Module[{L=Array[0&,10^7]},L[[#]]++&/@Range[100];];
Names["L$*"]
ByteCount@Symbol@#&/@Names["L$*"]
Out[1]= 7.0 for Microsoft Windows (32-bit) (February 18, 2009)
Out[3]= {L$111}
Out[4]= {40000084}

关于memory-leaks - 减少扩展 Mathematica session 中的内存使用量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867892/

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