如何清除大规模计算后的内存占用?
mathematica吧
全部回复
仅看楼主
level 5
进行一次并行的大规模计算后,mma内存占用非常高,
无法有效清除,尝试过ClearAll["Global`*"],ClearSystemCache[],ClearInOut[],$HistoryLength = 0,没卵用。
依旧有着极高的内存占用,如下图:
只有退出内核的语句管用,例如Quit[],Exit[],但是无法自动进行后续语句的计算,必须手动执行。对于庞大的计算来说不太现实。请问有没有两全其美的方法?
2023年03月26日 04点03分 1
吧务
level 10
可能仍有数据绑定于符号。首先要考虑Out或者$HistoryLength,然后要考虑有没有互依赖的临时变量(引用计数不为0的Temporary符号在退出Module时并不会被移除),再就是一些非数据的符号如程序包定义。另外对并行内核,应考虑用ParallelEvaluate执行这些命令。
2023年03月26日 04点03分 2
“引用计数不为0的Temporary符号”这个怎么查? ParallelEvaluate执行的相比于ParallelTable有啥优势么?
2023年03月26日 05点03分
@爱因·思果 我的意思是,你清楚定义要对所有内核清除。
2023年03月26日 05点03分
@爱因·思果 检查自己写的程序有没有循环引用,以及执行结束后有没有未自动Remove的Module变量。
2023年03月26日 05点03分
@asdasd1dsadsa 确实,有些局部变量还能够通过Names查出来。关于这方面有相关的书籍或者文档么?
2023年03月26日 05点03分
level 7
要不换个思路,把任务分解,然后用shell脚本去依次执行
2023年03月27日 04点03分 3
嗯嗯,这种方案也行,我去学学shell。。
2023年03月28日 15点03分
吧务
level 15
在这一帖也链一下好了。LZ的问题可能与上下文有关,该说的这两帖都说了:
tieba.baidu.com/p/8213684418
tieba.baidu.com/p/5633579420
2025年09月28日 06点09分 4
1