所以,我发现的 包崩溃时,我试着宣布一个矩阵比10000x10000.我需要宣布一个矩阵像这样..关于13000x13000元素可靠。我跑了一个试验,如:

for( int tortureEigen = 1 ; tortureEigen < 50000 ; tortureEigen++ )
{
  printf( "Torturing Eigen with %dx%d..\n", tortureEigen, tortureEigen ) ;
  Eigen::MatrixXd m( tortureEigen, tortureEigen ) ;
}

崩溃我的机器上(6GB RAM)在14008要素。

我有点失望!我想特征是喜欢MATLAB或倍频程,且不应崩溃使用大阵列,即使它不打盘或东西。。

与什么更重要的是,当我运行这个测试,并保持TaskMan开放的,该过程,是创造这些矩阵甚至不使用那么多的存储器。TaskMan报告2k使用情况。

使用征2.0.15稳定释放

有帮助吗?

解决方案 2

所有的答案在这里是有帮助的!

事实证明, 当汇编 作为一个 32位的 应用程序,征将会崩溃,如果你试和声明 密MatrixXd, 我,更大的14000元左右。坠机发生 _aligned_malloc 回0在征分配代码(MatrixXd::调整()),这意味1.5个连续的,对准RAM不能被分配在32位,这使得有道理的,因为这是越来越接近一半的最大可存loc.找到超过1.5GB连续出的4.0变得真正不可能的,我想!升级到本3.0不幸的是 不不 解决这个问题。

方案#1

Ok,那么,所以我编64位,并在我6GB机,节目成功运行,与密集MatrixXd分配和方案的工作。

方案#2

另一个办法是使用一个 DynamicSparseMatrix<double>.疏不会崩溃的巨大的大小分配,甚至作为32位的程序,但API支持,用于解决是另一个故事(API似乎想要转换到MatrixXd密集型以解决,这让我们用相同的原先的问题。)

其他提示

本征开发人员在这里。您最好在我们的支持渠道上询问 Eigen 问题,例如论坛...;-)

简短回答:您使用的是固定大小矩阵还是动态大小矩阵?

  • 如果是固定大小,则切换到动态大小(对于如此巨大的尺寸,无论如何这是理所当然的)

  • 如果您遇到动态大小矩阵的错误,我会感到惊讶,但同时我可以看到值 10000 从何而来。无论如何,如果你升级到eigen3(开发分支),你的问题就会消失。

出了本征文档的:

密集还是稀疏: 这个矩阵类处理致密,不稀疏矩阵和向量。对于稀疏矩阵和向量,请参阅稀疏模块。结果 稠密矩阵和向量是系数的平原通常阵列。所有的系数存储,在普通的连续阵列。这不同于稀疏矩阵和向量,其中系数被存储为非零系数的列表。

让我们看看,10000x10000x8(双矩阵),使约1.5GB。约32位操作系统下一个连续的堆块的最大尺寸那是,人们所期望的。尝试稀疏矩阵。

如果您真的需要这么大的密集的矩阵,那么你已经得到了一些完全不同的问题:请问下断电前的计算结束

鉴于规格硬盘洁具我只能假设您是在64位操作系统上运行。

您仍然可以,如果内存被调出到页面文件,甚至崩溃。这可能意味着内存碎片,或者说你的页面文件还是太小。如果是这样,你应该提高你的页面文件的东西相当大的像8或12 GB的左右。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top