【问题标题】:All of Ram being used in a Cellular Automata Python Script [closed]元胞自动机 Python 脚本中使用的所有 Ram [关闭]
【发布时间】:2014-06-30 13:07:45
【问题描述】:

我有一个用 python 编写的高强度模型,数组计算涉及超过 200,000 个单元,时间步长超过 4000 个。有两种阵列,一种是细网格阵列,一种是较粗网格网格,来自细网格阵列的信息用于告知粗网格网格的特征。当程序运行时,它只使用了 1% 的 cpu,但最大限度地使用了 ram (8GB)。运行需要几天时间。开始解决这个问题的最佳方法是什么? GPU 处理是个好主意还是我需要找到一种方法将一些已完成的计算卸载到 HDD 上?

我只是想找到解决方案的思路。我的模型是否只是将太多数据拉入内存,导致计算缓慢?

【问题讨论】:

  • 您的主要数据结构很可能是以低效的方式设置的。例如,如果每个单元只需要一个位,那么您可以在每个 32 位字中表示 32 个单元,而不是在每个 32 位字中表示一个单元。对我来说,听起来您比您意识到的更有可能使用存储数据的多个副本。另外,您是否可能使用字典之类的东西而不是列表来存储数据?

标签: python arrays memory-management anaconda cellular-automata


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    听起来您的问题是内存管理。您可能正在写入交换文件,这会大大减慢您的处理速度。 GPU 无法帮助您解决此问题,正如您所说,您正在最大化您的 RAM,而不是您的处理(CPU)。您可能需要重写您的算法或使用不同的数据类型,但您没有共享您的代码,因此很难仅根据您编写的内容进行诊断。我希望这些信息足以让您朝着正确的方向前进。

    【讨论】:

    • 我同意:我们需要查看一些代码或至少一些伪代码。您是否使用 python 列表来保存您的二维(?)数组?还是其他一些数据结构?您是否保留了数组的多个副本?您期望占用多少内存? 200,000 x 50 字节 = 8GB?代码是你写的,还是从某个地方得到的?也许它是一个图书馆?你的同事用什么来解决这类问题?
    • 你能在更小的输入数据上试试吗?内存消耗是否与数据大小成线性关系?输入模型大小的十分之一是否会导致内存消耗的十分之一? (800MB 而不是 8GB)
    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2021-12-04
    • 2013-06-12
    • 2013-11-25
    相关资源
    最近更新 更多