Birçok sağ taraf için seyrek doğrusal çözücü


12

Birçok sağ tarafı (300 ila 1000) ile aynı seyrek doğrusal sistemi (300x300 ila 1000x1000) çözmem gerekiyor. Bu ilk soruna ek olarak, farklı sistemleri de çözmek istiyorum, ancak aynı sıfır olmayan elemanlarla (sadece farklı değerler), sabit seyreklik desenine sahip birçok seyrek sistem. Matrislerim belirsiz.

Çarpanlara ayırma ve başlatma işlemlerinin performansı önemli değildir, ancak çözme aşamasının performansı önemlidir. Şu anda PaStiX veya Umfpack'i düşünüyorum ve muhtemelen Petsc (her iki çözücüyü de destekliyor) ile oynayacağım Özel gereksinimlerimden (vektörleştirme, çoklu iş parçacığı) yararlanabilecek kütüphaneler var mı yoksa genel çözücülere güvenmeli miyim ve belki benim ihtiyaçları için onları biraz değiştirmek?

Seyrek matris kadar daha büyükse ne olur ?106×106

Yanıtlar:


10

Doğrudan veya yinelemeli çözümleyicilerin kullanılıp kullanılmayacağı konusundaki tartışmaları taraf tutmadan, sadece iki nokta eklemek istiyorum:

  1. Birden fazla sağ tarafa sahip sistemler için Krylov yöntemleri vardır ( blok Krylov yöntemleri olarak adlandırılır ). Ek bir bonus olarak, bunlar genellikle Krylov uzayının daha büyük bir vektör koleksiyonundan oluşturulduğu için standart Krylov yöntemlerinden daha hızlı yakınsamaya sahiptir. Bkz. Dianne P. O'Leary, Blok Konjugat Gradyan Algoritması ve İlgili Yöntemler . Lineer Cebir ve uygulamaları 29 (1980), sayfa 239-322. ve Martin H. Gutknecht, çoklu sağ tarafları olan lineer sistemler için Block Krylov uzay yöntemleri: Giriş (2007).

  2. Aynı genişlik modeline sahip farklı matrisleriniz varsa, bu ve sonraki matrisler için sayısal çarpanlara ayırma işleminde yeniden kullanılabilen ilk matris için sembolik çarpanlara ayırma işlemini önceden hesaplayabilirsiniz. (UMFPACK'te, umfpack di symbolicsonucu kullanarak ve iletiyi yapabilirsiniz umfpack_di_numeric.)


9

Tipik olarak, yinelemeli bir çözücü için iyi bir önkoşul oluşturucuya yaptığınız iş miktarı ile doğrusal sistemleri gerçekten çözerken iyi bir önkoşul kullanarak tasarruf ettiğiniz iş arasında bir denge vardır. Sizin durumunuzda, durum oldukça açık: iyi bir ön koşullandırıcı inşa etmek için olabildiğince çok iş yapın çünkü birçok doğrusal sistemi çözmek zorundasınız. Aslında, mükemmel önkoşulu elde etmek için zaman ayırmanın uygun olduğunu düşünüyorum: LU ayrışması (örneğin UMFPACK veya Intel'in MKL'sinin bir parçası olarak gelen Pardiso çözücü kullanarak). O zaman bu ayrışmayı gerektiği kadar uygulayın. Çözülecek lineer sistemleriniz varsa, hiçbir şeyin tam bir ayrışmayı geçmesi beklenemez.O(N)


4
Son ifadeniz tartışmalıdır. çalışması ve bellek kullanımını gerektiren bir küp üzerinde 3D FEM veya FD ayrıklaştırmasının tam bir multifrontal çarpanlarına ayırmayı düşünün . Bu nedenle kesin çözücüler sağ taraf başına flop gerektirir ve bu nedenle yeterince büyük , daha düşük asimptotik karmaşıklığa sahip yinelemeli çözücüler daha hızlı olacaktır. O ( N 4 / 3 ) O ( N 4 / 3 ) KO(N2)O(N4/3)O(N4/3)N
Jack Poulson

3
Olabilir. Ama pratik dikkate meselesi olarak, seyrek doğrudan çözücüleri hala lanetlemek hızlı hatta bir önünde sabit olduğu verilmiştir oldukça büyüktür çözücü önünde sabit oysa olduğunu değil. O ( N 4 / 3 )O(N)O(N4/3)
Wolfgang Bangerth

2
Yakalama, crossover noktasında çarpanlara ayırmak için bellek ve sabırdan kaçmanız. 7 noktalı Laplacian için, multigrid yaklaşık 50 flop / dof'a ihtiyaç duyar, bu da yaklaşık dofta flop geçişine (geri çözüme karşı) yol açar. Geri çözüm çok daha fazla bellek kullanır, ancak birçok sağ taraf için çekirdekler yaygın olarak bulunur. Multigrid genellikle birçok sağ taraf için yazılmaz, böylece vektörleşme potansiyelinden ödün verilir. RHS başına zamanın bazı 300k'de 3D Laplacian için bir CHOLMOD'dan (veya başka bir paketten) daha az çözdüğü bir MG algoritması yazabileceğinizden emin olabilirim . n < 300 k105n<300k
Jed Brown

3

"Aynı sıfır olmayan elemanlar (sadece farklı değerler)" hakkında konuştuğunuzda problemin ifadesinde tam olarak açık değilsiniz Matrisin sabit bir seyreklik desenine sahip olduğunu, ancak gerçek değerlerin değiştiğini mi söylüyorsunuz? Yoksa matrisin aslında sabit olduğunu mu söylüyorsunuz?

PA=LUO(n2)

Birden fazla sağ taraf ve bu büyüklükteki denklem sistemleri için, yinelemeli yöntemler tipik olarak buna değmez.

Bahsettiğiniz tüm paketler doğrudan çarpanlara ayırma yöntemleri sunmaktadır (PetSc çoğunlukla yinelemeli çözücülerle bilinmesine rağmen) Ancak, sistemleriniz o kadar küçüktür ki, özellikle dağıtılmış bir bellek ortamında önemli paralel hızlanmalara sahip olmanız pek olası değildir.

Umfpack'i bu iş için kullanmanızı öneririm - PaStix ve PetSc aşırıya kaçıyor.


Cevabınız için teşekkürler. Açıklığa kavuşturmak için: Önce birçok sağ tarafa sahip tek bir matris istedim ve sonra başka bir sorun, aynı sparite paternine sahip matrislerin bir koleksiyonudur, ancak değerler değişir, her biri birçok rh için çözülmelidir. Yardımcı soru: seyrek matris şimdi 10 ^ 5x10 ^ 5 ila 10 ^ 6x10 ^ 6 ise ne olur?
nat chouf

2
105

Yalnızca tek bir sağ tarafa sahip daha büyük sistemleriniz için yinelemeli bir yöntem kullanmak, özellikle çok doğru çözümlere ihtiyacınız yoksa ve özellikle etkili bir ön koşullandırıcı bulabilirseniz veya sistemleriniz zaten iyi koşullandırılmışsa, mantıklı olabilir. Bununla birlikte, sistemleriniz kötü koşullandırılmışsa, doğru çözümlere ihtiyacınız vardır ve iyi bir ön koşullayıcı bulamazsanız, doğrudan faktorizasyon ile muhtemelen daha iyi durumda olursunuz.
Brian Borchers

N106
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.