Lösen eines einfachen Ax = b-Systems parallel zu PETSc

10

Ich bin neu im PETSc-Paket.

Ich habe eine ~ 4000x4000 Matrix A im Matrix-Market-Format und möchte PETSc dazu bringen, dies mit mehreren Prozessoren zu lösen.

Ich weiß, wie man das System auf einem einzelnen Prozessor löst, aber ich weiß nicht, wie man die Matrix und die Vektoren auf verschiedene Prozessoren verteilt.

Gibt es eine einfache Anleitung, um dies zu tun?

lächelnder Buddha
quelle

Antworten:

14

Matrix Market ist ein schreckliches Format zum parallelen Lesen, daher ist es besser, ein besseres Parallelformat vorzuverarbeiten. Ihre Matrixgröße ist extrem klein, sodass die Leistung kein Problem darstellt. Am einfachsten und allgemeinsten ist es jedoch, Python oder Matlab / Octave zu verwenden, um die Matrix Market-Datei im PETSc-Binärformat zu schreiben, das mithilfe von parallel effizient gelesen werden kann MatLoad(). Beispielsweise können Sie diesen Python-Code für die Vorverarbeitung verwenden ( $PETSC_DIR/bin/pythonscriptszu Ihrem hinzufügen PYTHONPATH)

import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)

Sie können zu diesem Zeitpunkt auch einen Vektor in die Datei schreiben. Wenn Sie nur das System lesen und lösen möchten, können Sie es verwenden src/ksp/ksp/examples/tutorials/ex10.c(mit der Option -f petscmatrix, die gerade geschriebene Binärdatei zu lesen).

In einer realen Anwendung sollten Sie einen Workflow vermeiden, bei dem Dateien in einem beliebigen Format auf die Festplatte geschrieben werden. Es ist viel besser, die Matrix parallel zusammenzusetzen, indem eine domänenzerlegte Darstellung des Problems verwendet wird. Die meisten Beispiele in PETSc sind so geschrieben.

Jed Brown
quelle