Матричний ринок - це жахливий формат для паралельного читання, тому краще попередньо обробити до кращого паралельного формату. Ваш розмір матриці надзвичайно малий, тому продуктивність не є проблемою, але найпростіше і найзагальніше - використовувати 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 написані таким чином.