4

そのため、10000x10000より大きい行列を宣言しようとすると、Eigenパッケージがクラッシュすることがわかりましたこのような行列を宣言する必要があります。約13000x13000要素を確実に。私は次のようなテストを実行しました:

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

14008要素で私のマシン(6 GB RAM)でクラッシュします。

ちょっとがっかりしました!EigenはMATLABまたはoctaveのようなものであり、ディスクなどにヒットしたとしても、より大きな配列を使用してもクラッシュしないはずだと思いました。

さらに、このテストを実行してTaskManを開いたままにすると、これらのマトリックスを作成しているプロセスはそれほど多くのメモリを使用しません。TaskManは2kの使用量でレポートします。

Eigen2.0.15安定版リリースの使用

4

4 に答える 4

6

固有開発者はこちら。フォーラムなどのサポート チャンネルで Eigen に質問する方がはるかに良いでしょう... ;-)

簡単な回答: 固定サイズまたは動的サイズの行列を使用していますか?

  • 固定サイズの場合は、動的サイズに切り替えます (このような巨大なサイズの場合、とにかく簡単です)

  • 動的サイズの行列でバグが発生している場合、私は驚いていますが、同時に、値 10000 がどこから来ているかを確認できます。いずれにせよ、eigen3 (開発ブランチ) にアップグレードすれば、問題は解決します。

于 2010-08-11T03:35:41.033 に答える
4

ここでのすべての回答は役に立ちます!

32 ビットアプリとしてコンパイルすると、14000 要素程度を超える密な MatrixXdを宣言しようとすると、Eigen がクラッシュすることが判明しました。クラッシュは、Eigen alloc コード (MatrixXd::resize()) で 0 を返すことで発生します。これは、1.5 GB の連続したアライメントされた RAM を 32 ビットで割り当てることができなかったことを意味します。アドレス可能な最大メモリ loc。4.0 から連続して 1.5 GB を超えるものを見つけることはほとんどありません。残念ながら、Eigen 3.0 にアップグレードしても問題は解決しません。_aligned_malloc

解決策 1

では、64 ビットでコンパイルすると、6 GB のマシンでプログラムが正常に実行され、密な MatrixXd の割り当てとソリューションが正常に機能します。

解決策 2

別の解決策は、DynamicSparseMatrix<double>. Sparse は 32 ビット アプリのように巨大なサイズの割り当てでもクラッシュしませんが、解決のための API サポートは別の話です (API は解決するために MatrixXd の密な型に変換したいと考えているようで、同じ元の問題が残ります)。

于 2010-08-14T16:27:42.773 に答える
1

ハードウェアの仕様を考えると、64 ビット OS で実行しているとしか思えません。

メモリがページ ファイルにページ アウトされた場合でも、クラッシュする可能性があります。メモリが断片化しているか、ページ ファイルがまだ小さすぎる可能性があります。その場合は、ページ ファイルを 8 または 12 GB 程度のかなり大きなものに増やす必要があります。

于 2010-08-10T14:15:25.517 に答える
1

固有ドキュメントから:

密対疎: この Matrix クラスは、疎行列とベクトルではなく、密行列を処理します。スパース行列とベクトルについては、Sparse モジュールを参照してください。
密な行列とベクトルは、通常の係数の配列です。すべての係数は、通常の連続配列に格納されます。これは、係数が非ゼロ係数のリストとして格納されるスパース行列およびベクトルとは異なります。

見てみましょう、 10000x10000x8 (double-Matrix) は約 1.5GB になります。これは、32 ビット OS での連続ヒープ ブロックの最大サイズとほぼ同じです。疎行列を試してください。

このような大規模な密行列が本当に必要な場合は、他にもいくつかの問題があります。次の停電までに計算が終了するでしょうか?

于 2010-08-10T14:08:53.477 に答える