【问题标题】: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 上运行。当我尝试分配这些矩阵时,它会耗尽内存。

标签: c++ optimization matrix


【解决方案1】:

两个建议:

  1. 使用mmap2 系统调用来映射包含输入和输出数据的文件。这允许您映射最多 2^44 字节的文件并将它们视为已经在内存中。 IE。您只需使用标准指针语法来访问数据,操作系统会负责从/到磁盘读取或写入数据,而您无需担心。不仅如此,mmap 比手动文件 I/O 快很多倍 - See this SO post

  2. 阅读 Ulrich Drepper 的“What every programmer should know about memory”。他处理的示例问题之一是高度优化矩阵运算。

【讨论】:

  • 这是一个比我更好的参考答案。 +1 先生
  • 我会试试 mmap2。谢谢!
猜你喜欢
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
相关资源
最近更新 更多