Matrix Market est un format terrible pour la lecture en parallèle, il est donc préférable de prétraiter vers un meilleur format parallèle. La taille de votre matrice est extrêmement petite, donc les performances ne sont pas un problème, mais le plus simple et le plus général consiste à utiliser Python ou Matlab / Octave pour écrire le fichier Matrix Market au format binaire PETSc, qui peut être lu efficacement en parallèle en utilisant MatLoad()
. Par exemple, vous pouvez utiliser ce code Python pour le prétraitement (ajouter $PETSC_DIR/bin/pythonscripts
à votre PYTHONPATH
)
import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)
Vous pouvez également écrire un vecteur dans le fichier à ce stade. Si vous voulez simplement lire et résoudre le système, vous pouvez utiliser src/ksp/ksp/examples/tutorials/ex10.c
(avec l'option -f petscmatrix
de lire le fichier binaire que vous venez d'écrire).
Dans une application réelle, vous devez éviter un flux de travail qui implique l'écriture de fichiers sur disque dans n'importe quel format. Il est préférable d’assembler la matrice en parallèle en utilisant une représentation du problème décomposée par domaine. La plupart des exemples dans PETSc sont écrits de cette façon.