我需要在我的电脑上进行一些矩阵操作。这些矩阵非常大,1000000x1000000以上,有些操作需要TB的内存。显然,它们不能直接加载到内存中进行计算。那么,在我的电脑上解决这些矩阵问题应该采用什么方法呢?假设这些矩阵已经以紧凑形式存储,并且无法使用矩阵优化进一步减少矩阵的大小。我正在考虑使用一些内存映射方案,但需要一些想法。
我需要在我的电脑上进行一些矩阵操作。这些矩阵非常大,1000000x1000000以上,有些操作需要TB的内存。显然,它们不能直接加载到内存中进行计算。那么,在我的电脑上解决这些矩阵问题应该采用什么方法呢?假设这些矩阵已经以紧凑形式存储,并且无法使用矩阵优化进一步减少矩阵的大小。我正在考虑使用一些内存映射方案,但需要一些想法。
两个建议:
使用mmap2系统调用来映射包含输入和输出数据的文件。这样可以将文件映射到2^44字节,将其视为已经在内存中。也就是说,您只需使用标准指针语法访问数据,操作系统会负责从磁盘读取或写入数据,无需您担心。而且,mmap比手动文件I/O快得多-请参阅此SO帖子。
阅读Ulrich Drepper的“关于内存,每位程序员都应该知道什么”。他所处理的一个例子问题是高度优化的矩阵运算。