Ich muss das gleiche dünne lineare System (300x300 bis 1000x1000) mit vielen rechten Seiten (300 bis 1000) lösen. Zusätzlich zu diesem ersten Problem möchte ich auch verschiedene Systeme lösen, aber mit denselben Nicht-Null-Elementen (nur unterschiedlichen Werten), das sind viele spärliche Systeme mit konstantem Sparsity-Muster. Meine Matrizen sind unbestimmt.
Die Leistung der Faktorisierung und Initialisierung ist nicht wichtig, die Leistung der Lösungsstufe jedoch. Derzeit denke ich über PaStiX oder Umfpack nach und werde wahrscheinlich mit Petsc (das beide Löser unterstützt) herumspielen. Gibt es Bibliotheken, die meine spezifischen Bedürfnisse (Vektorisierung, Multithreading) ausnutzen können, oder sollte ich mich auf allgemeine Löser verlassen, und Vielleicht etwas modifizieren für meine Bedürfnisse?
Was ist, wenn die dünne Matrix größer ist, bis zu ?
quelle
Wenn Sie von "denselben Nicht-Null-Elementen (nur unterschiedlichen Werten)" sprechen, sind Sie in Ihrer Erklärung des Problems nicht ganz klar. Wollen Sie damit sagen, dass die Matrix ein konstantes Sparsity-Muster aufweist, sich aber die tatsächlichen Werte ändern? Oder sagen Sie, dass die Matrix tatsächlich konstant ist?
Für mehrere rechte Seiten und Gleichungssysteme dieser Größe lohnen sich iterative Methoden in der Regel nicht.
Alle Pakete, die Sie erwähnt haben, bieten direkte Faktorisierungsmethoden (obwohl PetSc hauptsächlich für seine iterativen Löser bekannt ist). Ihre Systeme sind jedoch so klein, dass es unwahrscheinlich ist, dass Sie in einer verteilten Speicherumgebung erhebliche parallele Beschleunigungen erzielen können.
Ich würde vorschlagen, Umfpack für diesen Job zu verwenden - PaStix und PetSc sind übertrieben.
quelle