Lapack: Segfault in ./EIG/xeigtstz

Erstellt am 19. Apr. 2019  ·  11Kommentare  ·  Quelle: Reference-LAPACK/lapack

Hallo,

das ist mit Lapack 3.8.0.

Ein Segfault tritt in xeigtstz mit lapack 3.8.0 und aktuellem gfortran auf:

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

Dies verschwindet, wenn das Stack-Limit von der Standardeinstellung von 8192 kb auf 81920 kb erhöht wird (die
erster Wert, den ich ausprobiert habe).

Build System Testing

Alle 11 Kommentare

Scheint ein Duplikat von https://github.com/Reference-LAPACK/lapack/issues/276 zu sein.

gfortran9 markiert einen Out-of-Bounds-Zugriff in (unter anderem) TESTING/EIG/zhet21.f Zeile 304 (Schleife auf J, die von 1 bis N-1 läuft, Zugriff auf Array-Element U(1, J-1 ) ... Autsch). Ich bin mir noch nicht sicher, ob dies die tatsächliche und einzige Ursache für dieses Problem ist ...
BEARBEITEN: Meine Beobachtung ist nicht verwandt (und ich hatte tatsächlich übersehen, dass Sie bereits # 333 dafür geöffnet haben) xeigtstz versucht, etwa 10 MB auf dem Stapel für die NEP-Tests zuzuweisen, wie bereits in https://github.com/xianyi/OpenBLAS/ erwähnt

Das Festlegen ulimit -s 16384 anstelle des Standardwerts 8192 hat dieses Problem auch für mich behoben

Dasselbe Problem hier Nr. 85.

Die erste Lösung für dieses Problem bestand darin, das Stack-Limit zu erhöhen, aber da dies ein Test ist, wäre die Heap-Zuweisung nicht eine bessere Lösung?

Ich glaube, es sind zuweisbare Arrays, die aufgrund der Option „rekursiv“ (erforderlich für die Threadsicherheit) auf dem Stapel landen, aber ich habe es noch nicht geschafft, eine funktionierende Lösung zu finden.

@weslleyspereira wird versuchen, zchkee.f nur ohne die Option -frecursive zu kompilieren. Daher werden alle Dateien (insbesondere liblapack.a) mit der Option -frecursive kompiliert, aber zchkee.f wird ohne die Option -frecursive kompiliert. Wir denken/hoffen, dass das ausreicht. Wir werden testen. Ich denke, es ist wichtig, LAPACK mit -frecursive zu kompilieren. Jetzt kann zchkee.f ohne kompiliert werden. Das wird gut. CMake und make sehen etwas hässlicher aus. Ich denke, wir sind längst überfällig für eine neue Testsuite, also schlagen wir vor, dass wir es vorerst hässlich machen und uns auf eine neue Testsuite konzentrieren.

Hat bei mir funktioniert, solange ich nicht auch OpenMP verwendet habe, aber letzteres impliziert leider -frekursiv
(Kann filter_out in Makefile verwenden, um frecursive/Mrecursive von FFLAGS zu entfernen, also nicht viel neue Hässlichkeit)

Hat bei mir funktioniert, solange ich nicht auch OpenMP verwendet habe, aber letzteres impliziert leider -frekursiv

Ah. Ja, das ist ein potenzielles Problem.

(Kann filter_out in Makefile verwenden, um frecursive/Mrecursive von FFLAGS zu entfernen, also nicht viel neue Hässlichkeit)

Ah, gute Idee. Keine Ahnung, wie das filter_out im Makefile funktioniert. Schlimmer Nachforschungen. Danke für den Tipp.

TESTING/EIG/Makefile, nach dem include ../../make.inc hinzufügen

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

für cmake wäre es so etwas wie
string(REGEX REPLACE "-(fM)recursive" "" FFLAGS ${FFLAGS})
(ungetestet)

Danke @martin-frbg! Ich werde es jetzt testen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Peter9606 picture Peter9606  ·  7Kommentare

5tefan picture 5tefan  ·  3Kommentare

nboelter picture nboelter  ·  3Kommentare

christoph-conrads picture christoph-conrads  ·  26Kommentare

hokb picture hokb  ·  16Kommentare