Memecahkan sistem Ax = b sederhana secara paralel dengan PETSc

10

Saya baru mengenal paket PETSc.

Saya memiliki ~ 4000x4000 matriks A dalam format matriks-pasar dan saya ingin mendapatkan PETSc untuk menyelesaikannya dengan menggunakan beberapa prosesor.

Saya tahu bagaimana menyelesaikan sistem pada satu prosesor, tetapi saya tidak tahu bagaimana mendistribusikan matriks dan vektor di antara prosesor yang berbeda.

Apakah ada seperangkat instruksi sederhana untuk melakukan ini?

smilingbuddha
sumber

Jawaban:

14

Matrix Market adalah format yang buruk untuk membaca secara paralel, oleh karena itu lebih baik untuk melakukan preproses ke format paralel yang lebih baik. Ukuran matriks Anda sangat kecil sehingga kinerjanya tidak menjadi masalah, tetapi hal yang paling mudah dan paling umum adalah menggunakan Python atau Matlab / Oktaf untuk menulis file Pasar Matriks dalam format biner PETSc, yang dapat dibaca secara efisien secara paralel menggunakan MatLoad(). Misalnya, Anda dapat menggunakan kode Python ini untuk preprocessing (tambahkan $PETSC_DIR/bin/pythonscriptske Anda PYTHONPATH)

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

Anda juga dapat menulis vektor ke file saat ini. Jika Anda hanya ingin membaca dan menyelesaikan sistem, Anda dapat menggunakan src/ksp/ksp/examples/tutorials/ex10.c(dengan opsi -f petscmatrixuntuk membaca file biner yang baru saja Anda tulis).

Dalam aplikasi nyata, Anda harus menghindari alur kerja yang melibatkan penulisan file ke disk dalam format apa pun. Adalah jauh lebih baik untuk merakit matriks secara paralel menggunakan representasi masalah yang didekomposisi-domain. Sebagian besar contoh dalam PETSc ditulis dengan cara ini.

Jed Brown
sumber