Matrix Market - ужасный формат для параллельного чтения, поэтому лучше предварительно обработать его до лучшего параллельного формата. Размер вашей матрицы очень мал, поэтому производительность не является проблемой, но самый простой и общий способ - использовать Python или Matlab / Octave для записи файла Matrix Market в двоичном формате PETSc, который можно эффективно читать параллельно при использовании MatLoad()
. Например, вы можете использовать этот код Python для предварительной обработки (добавить $PETSC_DIR/bin/pythonscripts
в свой PYTHONPATH
)
import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)
Вы также можете записать вектор в файл в это время. Если вы просто хотите прочитать и решить систему, вы можете использовать ее src/ksp/ksp/examples/tutorials/ex10.c
(с возможностью -f petscmatrix
чтения двоичного файла, который вы только что написали).
В реальном приложении вы должны избегать рабочего процесса, который включает запись файлов на диск в любом формате. Гораздо лучше собирать матрицу параллельно, используя разложенное по области представление задачи. Большинство примеров в PETSc написаны именно так.