Розв’язування простої системи Ax = b паралельно PETSc


10

Я новачок у пакеті PETSc.

У мене є ~ 4000x4000 матриця A у форматі матричного ринку, і я хочу отримати PETSc для вирішення цього питання за допомогою декількох процесорів.

Я знаю, як вирішити систему на одному процесорі, але я не знаю, як розподілити матрицю та вектори між різними процесорами.

Чи існує простий набір інструкцій для цього?

Відповіді:


14

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.