Python细胞自动机脚本中使用了全部RAM

3
我有一个用Python编写的高强度模型,需要进行涉及超过200,000个单元的数组计算,并进行超过4000个时间步长。有两个数组,其中一个是细网格数组,另一个是粗网格网格。从细网格数组中获取的信息用于通知粗网格网格的特征。运行程序时,它只使用1%的CPU但最大化了RAM(8GB)。运行需要几天时间。解决此问题的最佳方法是什么? GPU处理是否是一个好主意,还是需要找到一种将已完成计算的一部分卸载到HDD的方法?
我只是试图找到思路以解决问题。我的模型是否只是将太多数据拖入RAM,导致计算缓慢?

很可能你的主要数据结构设置得不够高效。例如,如果每个单元格只需要一个位,则可以将32个单元格表示为每个32位字中的32个单元格,而不是在每个32位字中表示一个单元格。对我来说,听起来你很可能正在存储多个副本的数据,而你自己并没有意识到。此外,你可能正在使用类似于字典的东西来存储数据,而不是列表? - Itsme2003
2个回答

1
听起来你的问题是内存管理。你可能正在写入交换文件,这会极大地减慢处理速度。GPU对此无济于事,因为你说你的RAM已经满了,而不是你的处理器(CPU)。你可能需要重写你的算法或使用不同的数据类型,但你没有分享你的代码,所以仅仅根据你所写的内容进行诊断是很困难的。我希望这些信息足以让你朝着正确的方向前进。

我同意:我们需要看到一些代码或至少是一些伪代码。你是使用Python列表来保存你的二维数组吗?还是其他数据结构?你是否保留了多个数组的副本?你预计它将占用多少内存?200,000 x 50字节=8GB?你是自己编写的代码,还是从其他地方获取的?也许这是一个库?你的同事们在解决这类问题时使用什么? - Flortify
你能否尝试使用更小的输入数据进行测试?内存消耗是否与数据大小呈线性比例关系?输入模型大小缩小十倍是否会导致内存消耗减少十倍?(例如从8GB减少到800MB) - Flortify

1
如果网格稀疏,你最好跟踪只有填充部分,并使用不同的数据结构而不是巨大的Python列表(数组)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接