1

Eigen を使用して、サイズが 300k * 1000k と 1000k*300k の 2 つの大きな疎行列を乗算しようとしています。マトリックスは非常にスパースであり、0.01% の非ゼロ エントリですが、スパース性にブロックやその他の構造はありません。

Eigen がチョークし、最終的に 55 ~ 60G のメモリを消費することが判明しました。実際には、最終的な行列が密になり、これが大量のメモリを必要とする理由を説明しています。

マトリックスの1つが対角であり、乗算が2〜3 Gのメモリで正常に機能する場合、同様のサイズのマトリックスを乗算しようとしました。

何がうまくいかないかについて何か考えはありますか?

4

1 に答える 1

2

行列が疎であっても、結果は完全に密になる可能性があります。(A*B).prune(ref,eps);ref はゼロではないものの参照値で、eps は許容値です。基本的に、積の計算中に ref*eps より小さいすべてのエントリが削除されるため、メモリ使用量と結果のサイズの両方が削減されます。より良いオプションは、この製品を実行しないようにする方法を見つけることです.

于 2013-09-20T07:21:03.817 に答える