在有限内存上对大型矩阵进行矩阵运算

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。谢谢!

以上是关于在有限内存上对大型矩阵进行矩阵运算的主要内容,如果未能解决你的问题,请参考以下文章

MKL普通矩阵运算示例及函数封装

python中的矩阵运算

怎样在matlab中进行矩阵的运算?

python numpy 大矩阵运算容易内存爆炸

如何用matlab编写矩阵运算程序?

Numpy中的矩阵运算+聚合操作+arg运算(2019.1.17)