Yoğun Matrisler için PETSc ne kadar yararlıdır?


14

Gördüğüm her yerde, PETSc öğreticisi / belgeleri vb. Doğrusal cebir için yararlı olduğunu söyler ve genellikle seyrek sistemlerin fayda sağlayacağını belirtir. Yoğun matrisler ne olacak? Yoğun A için çözmekle ilgileniyorum .Ax=bA

Fortran'da CG ve QMR için kendi kodumu yazdım. Temel yapı sözde kodunu ayrı rip ve BLAS rutinleri mümkün (eklemektir ddot, dnrmve dgemvbiraz kendinden ayarlı). Bu PETSc ile nasıl karşılaştırılacak?

En iyi cevabın kendim denemem olacağını biliyorum ama zaman ve diğerleri yüzünden bu mümkün değil.

Herhangi bir yardım çok takdir edilmektedir.

Yanıtlar:


7

Yapı ile yoğun matrisleriniz varsa (örneğin hızlı dönüşümler, Schur tamamlayıcıları, vb.), PETSc yararlı olabilir. Bu durumlarda, tam matrisi bir araya getirmeyeceksiniz.

Birleştirilmiş yoğun sistemler için, PETSc şu anda PLAPACK kullanmaktadır, ancak PETSc yerel formatındaki matris dağılımı iletişimi en aza indirmek için en iyi değildir (çoğu işlem için). Jack Poulson, Matt Knepley ve ben PETSc'nin yoğun lineer cebirini , Jack'in daha modern yoğun lineer cebir kütüphanesi olan Elemental'i kullanmak için ele aldık . Henüz olmadı, ama zamanımız olduğunda yapacağız.

Tam özellikli yoğun doğrusal cebir kütüphanesi istiyorsanız Elemental kullanın. Bu işlemler için her zaman PETSc'den daha eksiksiz bir API'ye sahip olması muhtemeldir. Seyrek veya monte edilmemiş sistemlerle etkileşime girmeniz gerekiyorsa, PETSc ile sadık kalmak ve yoğun parçalar için Elemental'i kullanmanız gerekenleri çıkarmak mantıklıdır (veya PETSc arayüzünü Elemental'a yazmamıza yardımcı olun).


Paylaşılan Bellek sistemi üzerinde çalışsaydım cevabınız ne olurdu?
tahkikat

1
Birden çok MPI işlemi veya birden çok pthreads kullanabilirsiniz. Yalnızca paylaşılan bellekle çalışan paralel yazılım yazarken fazla bir nokta görmüyorum, çünkü genellikle dağıtılmış bellek için yazarken düşündüğünüz bellek konumu , en iyi iş parçacığı uygulamaları dışındaki herkese göre performansı geliştirir . Yalnızca yoğun lineer cebir için dahili olarak iş parçacıkları kullanan bir "seri" API istiyorsanız, dişli bir BLAS kullanabilirsiniz.
Jed Brown

Kodlarımın Xeon 12 çekirdek iş istasyonumda çalışmasını istiyorum (şu an Kümeler'e bakmıyorum). Intel MKL (dişli) BLAS için kullanıyorum. PETSc'yi denememi tavsiye eder misiniz?
tahkikat

İstediğiniz tek şey BLAS ise, bundan memnun kalırsınız ve kodu zaten yazdınız, sadece kullanın. Daha fazla esneklik ve / veya dağıtılmış belleği kullanma fırsatı istiyorsanız, PETSc isteyebilirsiniz.
Jed Brown

Esneklik açısından? Dağıtılmış bellek?
tahkikat

5

O(n3)O(n2)

Eğer bir paylaşılan bellek sistemi üzerinde olduklarını belirtilen beri, tavsiye olurdu libFLAME ve / veya PLASMA ama ben de önemli ölçüde daha hızlı satıcı seviye 1 ve seviye 2 operasyonlar için BLAS dişli daha olacağını sanmıyorum.

Jed , geliştirdiğim Elemental'i önerdi , ancak yine seviye 1 ve seviye 2 işlemlerinin paralel yoğun lineer cebir kütüphanelerinin ana odağı olmadığını vurgulayacağım. Dürüst olmak gerekirse bu rutinlerden hiçbirini kıyaslamamıştım.


Böylece, elde ettiğim kadarıyla, her paralel paralel yoğun lineer cebir kütüphanesi, özvektör hesaplaması, BLAS yerine sistem çözümü gibi işlemleri optimize etmeye çalışacaktır. Ayrıca, Elemental gerçekten etkileyici görünüyor. Yapabileceğim zaman kesinlikle koşacağım.
tahkikat

Genellikle seviye 3 BLAS'ı optimize ederler. Bunun nedeni, kütüphaneyi kullanan çoğu insanın genellikle seviye 3 BLAS ile eşleştirilebilen büyük hesaplamalar yapmasıdır.
Jack Poulson

Bu BLAS 1/2 daha iyi olamaz çünkü? (Belki yüzey-hacim özelliği nedeniyle?) O (N ^ 2) veri ve O (N ^ 2) hesaplaması?
tahkikat

Çünkü BLAS 1 ve 2 genellikle hesaplamada daha düşük dereceli terimlerdir. Yüksek performanslı yoğun lineer cebirin tüm 'oyunu' her işlemde doğru şekilde şaşıracak, böylece xGEMM ve arkadaşlarını mümkün olduğu kadar çok iş için arayabilirsiniz.
Jack Poulson

Ayrıca, evet, kabaca memops ile aynı miktarda flop gerçekleştirmeleri, neden olabildiğince kaçınılmasıdır.
Jack Poulson
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.