Решение простой системы Ax = b параллельно с PETSc

10

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

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

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

Есть ли простой набор инструкций для этого?

smilingbuddha
источник

Ответы:

14

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 написаны именно так.

Джед браун
источник