2017-11-03 3 views
-2

これは既知の問題かどうか疑問です。そうでない場合は、これを経験した人がいて、誰でも修正を見つけることができましたか?固定サイズの行列の `std :: vector 'を使うとき、Ivy Bridge上のAVXを使った固有セグメンテーション

私は、Core i7-3700のFedora 25でGCC 6.4を使ってEigen 3.3.4を使って数値計算コードを構築しています。私のproc/cpuinfoはAVXを持っているべきだと言います。私は2つのビルドを試みました。 1のビルド:

g++ -std=c++14 -O3 -m64 -mavx 

と2を構築:

g++ -std=c++14 -O3 -m64 -msse4.2 

ビルド2つの実行罰金。しかし、ビルド1を試すと、inverse()メソッドと同様に正方形の固定サイズの行列のZero関数でsegfaultが得られます。私は何が起こっているのかについての指針を感謝します。

EDIT:私は実際には固定サイズの固有行列のstd::vectorを使用していました。

+2

未定義の動作のようなサウンドです。あなたは[mcve]を投稿できますか? – wally

答えて

1

私が固定サイズの行列のstd::vectorを使用していたという事実が鍵です。最小限の例である@rexのリクエストに感謝します。この例を準備しながら、私は以下を見つけました。

大きな入力サイズ(std::vectorの行列を含む)の場合、Eigenはランタイムエラーをスローし、thisサイトにつながりました。指示に従って、問題が解決されました。

本質的に、標準アロケータを持つstd::vectorは、固定サイズ配列操作のベクトル化のためのEigenのアラインメント要件を混乱させるようです。 Eigenのaligned_allocatorで提供されている問題を修正しました。

関連する問題