Lapack: ./EIG/xeigtstzのセグメンテーション違反

作成日 2019年04月19日  ·  11コメント  ·  ソース: Reference-LAPACK/lapack

やあ、

これはLapack3.8.0の場合です。

segfaultは、lapack3.8.0および最近のgfortranを使用したxeigtstzで発生します。

./EIG/xeigtstz <nep.in> znep.out 2>&1
/ bin / sh:Zeile 1:9026 Speicherzugriffsfehler(Speicherabzug geschrieben)./ EIG / xeigtstz <nep.in> znep.out 2>&1

これは、スタック制限がデフォルトの8192kbから81920kbに引き上げられるとなくなります(
私が試した最初の値)。

Build System Testing

全てのコメント11件

gfortran9は、(とりわけ)TESTING / EIG / zhet21.f行304の範囲外アクセスにフラグを立てます(1からN-1まで実行されるJでループを実行し、配列要素U(1、 J-1 )にアクセスします...痛い)。 これがこの問題の実際の唯一の原因であるかどうかはまだわかりませんが...
編集:私の観察は無関係です(そして私はあなたがすでに#333を開いていることを実際に見逃していました)xeigtstzはhttps://github.com/xianyi/OpenBLAS/ですでに述べたようにNEPテストのためにスタックに約10MBを割り当てようとします

デフォルトの8192の代わりにulimit -s 16384を設定すると、この問題も修正されました

ここで同じ問題#85。

この問題の解決策はスタック制限を増やすことでしたが、これはテストであるため、ヒープ割り当てはより良い解決策ではないでしょうか?

'recursive'オプション(スレッドセーフに必要)が原因でスタックに配置されるのは割り当て可能な配列だと思いますが、まだ実用的な解決策を見つけることができていません。

@weslleyspereiraは、-frecursiveオプションなしでzchkee.fのみをコンパイルしようとします。 したがって、すべてのファイル(特にliblapack.a)は-frecursiveオプションを使用してコンパイルされますが、zchkee.fは-frecursiveオプションなしでコンパイルされます。 私たちはそれがうまくいくと思います/願っています。 テストします。 LAPACKを-frecursiveでコンパイルすることが重要だと思います。 これで、zchkee.fはなしでコンパイルできます。 それでいいでしょう。 CMakeとmakeは少し醜く見えます。 新しいテストスイートはかなり遅れていると思うので、今は醜いものにして、新しいテストスイートに焦点を当てることをお勧めします。

私がOpenMPも使用していない限り、私のために働いたが、後者は残念ながら-frecursiveを意味する
(Makefileでfilter_outを使用して、FFLAGSからfrecursive / Mrecursiveを削除できるため、新しい醜さはあまりありません)

私がOpenMPも使用していない限り、私のために働いたが、後者は残念ながら-frecursiveを意味する

ああ。 はい、それは潜在的な問題です。

(Makefileでfilter_outを使用して、FFLAGSからfrecursive / Mrecursiveを削除できるため、新しい醜さはあまりありません)

ああ、いい考えだ。 Makefileのfilter_outがどのように機能するかわかりません。 さらに悪い調査。 先端をありがとう。

TESTING / EIG / Makefile、 include ../../make.inc追加後

FFLAGS := $(filter-out -frecursive -Mrecursive,$(FFLAGS))
FFLAGS_DRV := $(filter-out -frecursive -Mrecursive,$(FFLAGS_DRV))
LDFLAGS := $(filter-out -frecursive -Mrecursive,$(LDFLAGS))

cmakeの場合は次のようになります
string(REGEX REPLACE "-(fM)recursive" "" FFLAGS ${FFLAGS})
(未テスト)

ありがとう@ martin-frbg! 今すぐテストします

このページは役に立ちましたか?
0 / 5 - 0 評価