在有限内存上对大型矩阵进行矩阵运算
Posted
技术标签:
【中文标题】在有限内存上对大型矩阵进行矩阵运算【英文标题】:matrix operations on large matrices on limited memory 【发布时间】:2010-09-20 12:11:04 【问题描述】:我需要在我的电脑上做一些矩阵运算。这些矩阵大到 1000000x1000000 甚至更多,一些操作需要 TB 的内存。显然,这些不能直接加载到内存中并计算。我可以使用哪些方法在计算机上求解这些矩阵?假设不能使用矩阵优化进一步减少矩阵并且已经以紧凑形式存储。我正在考虑使用一些内存映射方案,但需要一些想法。
【问题讨论】:
您是否尝试过仅使用 64 位操作系统并让 VM 子系统完成繁重的工作? 您将这些存储在哪些磁盘上? 您运行的是什么操作系统? Win、Linux 或 POSIX 兼容的基于 Unix 的系统(如 MacOSX)?正如 Paul 指出的那样,无论您运行什么,它都应该是相关的 64 位版本。 是的,我在 64 位 Linux Gentoo 上运行。当我尝试分配这些矩阵时,它会耗尽内存。 【参考方案1】:两个建议:
使用mmap2 系统调用来映射包含输入和输出数据的文件。这允许您映射最多 2^44 字节的文件并将它们视为已经在内存中。 IE。您只需使用标准指针语法来访问数据,操作系统会负责从/到磁盘读取或写入数据,而您无需担心。不仅如此,mmap 比手动文件 I/O 快很多倍 - See this SO post。
阅读 Ulrich Drepper 的“What every programmer should know about memory”。他处理的示例问题之一是高度优化矩阵运算。
【讨论】:
这是一个比我更好的参考答案。 +1 先生 我会试试 mmap2。谢谢!以上是关于在有限内存上对大型矩阵进行矩阵运算的主要内容,如果未能解决你的问题,请参考以下文章