O Matrix Market é um formato terrível para leitura em paralelo; portanto, é melhor pré-processar para um formato paralelo melhor. O tamanho da sua matriz é extremamente pequeno, portanto o desempenho não é um problema, mas a coisa mais fácil e geral é usar Python ou Matlab / Octave para gravar o arquivo Matrix Market no formato binário PETSc, que pode ser lido eficientemente em paralelo MatLoad()
. Por exemplo, você pode usar este código Python para o pré-processamento (adicione $PETSC_DIR/bin/pythonscripts
ao seu PYTHONPATH
)
import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)
Você também pode gravar um vetor no arquivo no momento. Se você quiser apenas ler e resolver o sistema, pode usar src/ksp/ksp/examples/tutorials/ex10.c
(com a opção -f petscmatrix
de ler o arquivo binário que acabou de escrever).
Em um aplicativo real, você deve evitar um fluxo de trabalho que envolva gravar arquivos em disco em qualquer formato. É muito melhor montar a matriz em paralelo usando uma representação do problema decomposta em domínio. A maioria dos exemplos no PETSc é escrita dessa maneira.