2017-04-24 45 views
0

在特徵庫中是否有可能爲行主稀疏矩陣逐行保留空間(每行不同)?Eigen:不同的行內存預留行主稀疏矩陣

我想優化內存填充​​一個相當大的稀疏矩陣(〜70mio x 70mio與〜20億nnz是我可以達到的最大,但我希望更進一步)。爲了消除我去的方式:

首先我使用的是推薦的setFromTriplets,它可能是填充矩陣的最快方式,但檢查內存消耗時,我發現一個峯值約爲我用這個點時平均內存的兩倍函數,這是有道理的,因爲我 - 在某些時候 - 將元素存儲在三元組的矩陣和向量中,直到向量超出範圍。

使用insert()明顯改善了最大內存消耗。儘管如此,由於重新分配,我仍然處於高峯期。然後,我還使用了reserve(),以便沒有(或更少)重新分配。它也降低了峯值,但它並沒有完全消失,再次由於一些重新分配(如果valgrind是正確的)。由於我的大部分行的NNZ都比最大值低,因此我在存儲器中獲得了相當多的空分配條目,這會增加平均內存消耗。使用makeCompressed會再次降低平均值,但顯然會使峯值再次上升,因爲調用它時需要進行更多的重新分配。

爲什麼我問上面的問題現在是:我可以計算每個行的前期NNZ和排序,以便我實際上應該能夠完全優化這個具有壓縮矩陣沒有任何空分配和與如果我可以爲每一行保留不同數量的NNZ,則不需要重新分配高峯。

如果有人告訴我,如果Eigen中可能或不可能,我會非常感激,如果不是的話:你知道任何支持它的庫嗎?

非常感謝!

回答