やあ、
これは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に引き上げられるとなくなります(
私が試した最初の値)。
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! 今すぐテストします