Risolvere un semplice sistema Ax = b in parallelo con PETSc


10

Sono nuovo nel pacchetto PETSc.

Ho una matrice A ~ 4000x4000 in formato mercato di matrice e voglio ottenere PETSc per risolverlo utilizzando più processori.

So come risolvere il sistema su un singolo processore, ma non so come distribuire matrice e vettori tra processori diversi.

C'è una semplice serie di istruzioni per farlo?

Risposte:


14

Matrix Market è un formato terribile per la lettura in parallelo, quindi è meglio preelaborare un formato parallelo migliore. Le dimensioni della matrice sono estremamente ridotte, quindi le prestazioni non sono un problema, ma la cosa più semplice e più generale è utilizzare Python o Matlab / Octave per scrivere il file Matrix Market in formato binario PETSc, che può essere letto in modo efficiente in parallelo usando MatLoad(). Ad esempio, puoi usare questo codice Python per la preelaborazione (aggiungi $PETSC_DIR/bin/pythonscriptsal tuo PYTHONPATH)

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

Puoi anche scrivere un vettore sul file in questo momento. Se vuoi solo leggere e risolvere il sistema, puoi usare src/ksp/ksp/examples/tutorials/ex10.c(con l'opzione -f petscmatrixper leggere il file binario che hai appena scritto).

In un'applicazione reale, è necessario evitare un flusso di lavoro che comporta la scrittura di file su disco in qualsiasi formato. È molto meglio assemblare la matrice in parallelo usando una rappresentazione del problema scomposta per dominio. La maggior parte degli esempi in PETSc sono scritti in questo modo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.