2017-04-24 44 views
0

在特征库中是否有可能为行主稀疏矩阵逐行保留空间(每行不同)?Eigen:不同的行内存预留行主稀疏矩阵

我想优化内存填充​​一个相当大的稀疏矩阵(〜70mio x 70mio与〜20亿nnz是我可以达到的最大,但我希望更进一步)。为了消除我去的方式:

首先我使用的是推荐的setFromTriplets,它可能是填充矩阵的最快方式,但检查内存消耗时,我发现一个峰值约为我用这个点时平均内存的两倍函数,这是有道理的,因为我 - 在某些时候 - 将元素存储在三元组的矩阵和向量中,直到向量超出范围。

使用insert()明显改善了最大内存消耗。尽管如此,由于重新分配,我仍然处于高峰期。然后,我还使用了reserve(),以便没有(或更少)重新分配。它也降低了峰值,但它并没有完全消失,再次由于一些重新分配(如果valgrind是正确的)。由于我的大部分行的NNZ都比最大值低,因此我在存储器中获得了相当多的空分配条目,这会增加平均内存消耗。使用makeCompressed会再次降低平均值,但显然会使峰值再次上升,因为调用它时需要进行更多的重新分配。

为什么我问上面的问题现在是:我可以计算每个行的前期NNZ和排序,以便我实际上应该能够完全优化这个具有压缩矩阵没有任何空分配和与如果我可以为每一行保留不同数量的NNZ,则不需要重新分配高峰。

如果有人告诉我,如果Eigen中可能或不可能,我会非常感激,如果不是的话:你知道任何支持它的库吗?

非常感谢!

回答