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/pythonscripts
a 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 petscmatrix
de 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.