dgemm segfauling mit großen F-Order-Matrizen in scipy

8

Ich versuche, A * A.T in Python mit SciPy's dgemm zu berechnen, aber einen segfault zu erhalten, wenn A eine große Zeilendimension (~ 50.000) hat und ich die Matrizen in F-Reihenfolge übergebe. Natürlich ist die resultierende Matrix sehr groß, aber sowohl sgemm als auch nach dgemm in C-Reihenfolge arbeiten,

%Vor%

Hat jemand diesen Bug schon einmal erlebt oder hat er eine Ahnung, was ihn verursacht? Ich benutze Python 2.7.3, numpy 1.8.0 und scipy 0.13.2.

EDIT: FWIW, das ist die einzige Reihenfolge, die den Fehler erzeugt.

%Vor%

Beide oben genannten sind erfolgreich.

BEARBEITEN: BLAS info

%Vor%     
Brielin Brown 10.12.2013, 17:48
quelle

1 Antwort

1

Sie dürfen beim Aufruf von Fortran keine Alias-Argumente angeben. Ich bin mir nicht sicher, ob das dein Problem ist, aber es könnte sein.

Die ersten beiden BLAS-Aufrufe aliasieren die Argumente nicht, da vor dem Aufruf von fortran temporäre Arrays erstellt werden. Das heißt, wegen dtype Mismatch und C-ordnung, beziehungsweise.

Der dritte BLAS-Aufruf aliasiert die Argumente. Versuchen Sie es mit b = A.copy (). T stattdessen.

    
Sturla Molden 13.02.2014 21:41
quelle

Tags und Links