2017-04-24 8 views
0

Eigenライブラリでは、行ごとに疎行列の行(行ごとに異なる)の領域を予約することは可能ですか?Eigen:行主要な疎行列の異なる行単位のメモリ予約

私は非常に大きな疎なマトリックス(約70mio x 70mio〜20億nnzが私が手に入れることができる最大のものですが、もっと行きたいと思います)を満たすためにメモリ消費を最適化しようとしています。

最初に私は推奨されているsetFromTripletsを使用していましたが、これはおそらくマトリックスを充填する最も速い方法ですが、メモリ消費量を調べる私はこれを使った時点で平均メモリの約2倍のピークを見つけました関数は、ある時点では、ベクトルが範囲外になるまで、トリプレットの両方、行列、ベクトルにエフェクトを格納するので意味があります。

insert()を使用すると、明らかに最大メモリ消費量が大幅に改善されました。しかし、私はまだ再割り当てのためにピークを持っています。私はまた、reserve()を使って再割り当てがないようにしました。ピークもかなり下がりますが、やはり再配置(valgrindが正しい場合)のために完全に消えません。私の行の大部分はmaxよりも低いNNZを持つので、私はストレージに空の割り当てられたエントリをかなりいくつも得て、平均メモリ消費量を増やします。 makeCompressedを使用すると、平均値が再び下がりますが、呼び出すときにもっと多くの再割り当てが行われなければならないので、明らかにピークが高くなります。

今上に質問をする理由は、次のとおり私はフロント行ごとNNZを計算し、また、私は実際に完全に空の割り当てなしとで圧縮マトリックスを有し、これを最適化することができなければならないようにそれらを並べ替えることができ各行に異なる数のNNZを予約できる場合、再割り当てのピークはありません。

誰でも私にそれが可能であるかどうかを知らせてくれれば幸いです。そうでない場合は、それをサポートするライブラリを知っていますか?

ありがとうございました!

答えて