ich einige numerische Simulationen der Quantenberechnung mache, und ich wünsche die Eigenvektoren einer großen hermitesche Matrix (~ 2^14 Zeilen/Spalten)Schnelle Eigenvektoren auf einem HPC Suche mit Qutip und slepc4py
ich finden bin läuft auf einem 24-Core/48-Threads XEON-Rechner. Der Code wurde ursprünglich mit Hilfe der Qutip-Bibliothek geschrieben. Ich habe herausgefunden, dass die mitgelieferte eigenstates()
Funktion nur einen einzigen Thread auf meiner Maschine verwendet, also versuche ich, einen schnelleren Weg zu finden, dies zu tun.
Ich versuchte scipy.linalg
eig()
und eigh()
Funktionen sowie scipy.sparse.linalg
eig()
und eigh()
aber beide mit scheinen langsamer als die in Qutip gebaut Funktion.
Ich habe einige Vorschläge gesehen, dass ich etwas Beschleunigung von der Verwendung von slepc4py bekommen könnte, aber die Dokumentation des Pakets scheint sehr mangelhaft. Ich kann nicht herausfinden, wie man das numpige komplexe Array in eine SLEPC-Matrix umwandelt.
A = PETSc.Mat().create()
A[:,:] = B[:,:]
# where B is a scipy array of complex type
TypeError: Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe'
Willkommen bei Stackoverflow! Es scheint, dass Ihre Frage ähnlich zu http://stackoverflow.com/questions/29525041/petsc4py-creating-aij-matrix-from-csc-matrix-results-in-typeerror Sie müssen PETSc und SLEPc neu kompilieren und bauen install petsc4py und slepc4py ... Wenn Sie nur von niedrigen Energien reinen Quantenzuständen interessiert sind, werden Sie von Optionen \t EPS_SMALLEST_MAGNITUDE von EPSSetWhichEigenpairs() und EPSSetDimensions() in Kombination mit EPSType wie EPSARNOLDI oder EPSLANCZOS interessiert sein. – francis
Übrigens, [scipy.sparse.linalg.eigsh] (https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.sparse.linalg.eigsh.html) kann auch beweisen hilfreich ... – francis