Resolvendo um sistema Ax = b simples em paralelo com o PETSc

10

Eu sou novo no pacote PETSc.

Eu tenho uma matriz A de 4000 x 4000 no formato de mercado de matriz e quero que o PETSc resolva isso usando vários processadores.

Sei como resolver o sistema em um único processador, mas não sei como distribuir a matriz e os vetores entre diferentes processadores.

Existe um conjunto simples de instruções para fazer isso?

smilingbuddha
fonte

Respostas:

14

O Matrix Market é um formato terrível para leitura em paralelo; portanto, é melhor pré-processar para um formato paralelo melhor. O tamanho da sua matriz é extremamente pequeno, portanto o desempenho não é um problema, mas a coisa mais fácil e geral é usar Python ou Matlab / Octave para gravar o arquivo Matrix Market no formato binário PETSc, que pode ser lido eficientemente em paralelo MatLoad(). Por exemplo, você pode usar este código Python para o pré-processamento (adicione $PETSC_DIR/bin/pythonscriptsao seu PYTHONPATH)

import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)

Você também pode gravar um vetor no arquivo no momento. Se você quiser apenas ler e resolver o sistema, pode usar src/ksp/ksp/examples/tutorials/ex10.c(com a opção -f petscmatrixde ler o arquivo binário que acabou de escrever).

Em um aplicativo real, você deve evitar um fluxo de trabalho que envolva gravar arquivos em disco em qualquer formato. É muito melhor montar a matriz em paralelo usando uma representação do problema decomposta em domínio. A maioria dos exemplos no PETSc é escrita dessa maneira.

Jed Brown
fonte