Matrix Market to straszny format do równoległego czytania, dlatego lepiej jest wstępnie przetworzyć na lepszy format równoległy. Rozmiar macierzy jest bardzo mały, więc wydajność nie stanowi problemu, ale najłatwiejszą i najbardziej ogólną rzeczą jest użycie Pythona lub Matlaba / Octave'a do zapisania pliku Matrix Market w formacie binarnym PETSc, który można efektywnie odczytywać równolegle MatLoad()
. Na przykład możesz użyć tego kodu Python do przetwarzania wstępnego (dodaj $PETSC_DIR/bin/pythonscripts
do swojego PYTHONPATH
)
import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)
W tym momencie możesz również napisać wektor do pliku. Jeśli chcesz tylko przeczytać i rozwiązać system, możesz użyć src/ksp/ksp/examples/tutorials/ex10.c
(z opcją -f petscmatrix
odczytu właśnie zapisanego pliku binarnego).
W prawdziwej aplikacji należy unikać przepływu pracy polegającego na zapisywaniu plików na dysk w dowolnym formacie. O wiele lepiej jest złożyć matrycę równolegle, używając dekompozycji reprezentacji problemu. Większość przykładów w PETSc jest napisanych w ten sposób.