Resolver un sistema Ax = b simple en paralelo con PETSc

10

Soy nuevo en el paquete PETSc.

Tengo un ~ 4000x4000 matriz A en formato de mercado de matriz y quiero obtener PETSc para resolver esto usando múltiples procesadores.

Sé cómo resolver el sistema en un único procesador, pero no sé cómo distribuir la matriz y los vectores entre diferentes procesadores.

¿Hay un conjunto simple de instrucciones para hacer esto?

smilingbuddha
fuente

Respuestas:

14

Matrix Market es un formato terrible para leer en paralelo, por lo tanto, es mejor preprocesar a un mejor formato paralelo. El tamaño de su matriz es extremadamente pequeño, por lo que el rendimiento no es un problema, pero lo más fácil y general es usar Python o Matlab / Octave para escribir el archivo Matrix Market en formato binario PETSc, que puede leerse eficientemente en paralelo MatLoad(). Por ejemplo, puede usar este código de Python para el preprocesamiento (agregar $PETSC_DIR/bin/pythonscriptsa su PYTHONPATH)

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

También puede escribir un vector en el archivo en este momento. Si solo quiere leer y resolver el sistema, puede usarlo src/ksp/ksp/examples/tutorials/ex10.c(con la opción -f petscmatrixde leer el archivo binario que acaba de escribir).

En una aplicación real, debe evitar un flujo de trabajo que implique escribir archivos en el disco en cualquier formato. Es mucho mejor ensamblar la matriz en paralelo usando una representación descompuesta del dominio del problema. La mayoría de los ejemplos en PETSc se escriben de esta manera.

Jed Brown
fuente