PETSc ile paralel basit bir Ax = b sistemi çözme


10

PETSc paketinde yeniyim.

Matris market formatında ~ 4000x4000 matris A'ya sahibim ve bunu PETSc'nin birden fazla işlemci kullanarak çözmesini istiyorum.

Sistemi tek bir işlemcide nasıl çözeceğimizi biliyorum, ancak matrisi ve vektörleri farklı işlemciler arasında nasıl dağıtacağımı bilmiyorum.

Bunu yapmak için basit bir talimatlar kümesi var mı?

Yanıtlar:


14

Matrix Market, paralel olarak okumak için korkunç bir formattır, bu nedenle daha iyi bir paralel formata önişleme yapmak daha iyidir. Matris boyutunuz son derece küçüktür, bu nedenle performans bir sorun değildir, ancak en kolay ve en genel şey, Matrix Market dosyasını PETSc ikili biçiminde yazmak için Pytc veya Matlab / Octave'yi kullanarak paralel olarak verimli bir şekilde okunabilir MatLoad(). Örneğin, ön işleme için bu Python kodu kullanabilirsiniz (ekleme $PETSC_DIR/bin/pythonscriptsadresinden Müşteri PYTHONPATH)

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

Ayrıca, dosyaya şu anda bir vektör de yazabilirsiniz. Sadece sistemi okumak ve çözmek istiyorsanız, kullanabilirsiniz src/ksp/ksp/examples/tutorials/ex10.c( -f petscmatrixaz önce yazdığınız ikili dosyayı okuma seçeneğiyle ).

Gerçek bir uygulamada, herhangi bir biçimde diske dosya yazmayı içeren bir iş akışından kaçınmalısınız. Sorunun etki alanı ile ayrıştırılmış bir temsilini kullanarak matrisi paralel olarak birleştirmek çok daha iyidir. PETSc'deki örneklerin çoğu bu şekilde yazılmıştır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.