Büyük seyrek simetrik (ancak pozitif olmayan) sistem için en iyi çözücü seçimi


10

Şu anda bazı büyük algoritmalar tarafından oluşturulan çok büyük simetrik (ancak pozitif tanımlı değil) sistemleri çözmeye çalışıyorum. Bu matrislerin paralel çözme için kullanılabilecek hoş bir blok genişliği vardır. Ancak doğrudan bir yaklaşım (Multi-frontal gibi) mi yoksa yinelemeli (ön koşullu GMRES veya MINRES) mi kullanacağım konusunda karar veremiyorum. Tüm çalışmalarım yinelemeli çözücülerin (7 iç yinelemenin oldukça hızlı yakınsamasıyla bile) MATLAB'daki doğrudan '\' operatörünü yenemediğini gösteriyor. Ancak teoride, doğrudan yöntemlerin daha pahalı olduğu varsayılmaktadır. Bu nasıl oluyor? Böyle bir durum için güncel bir belge veya kağıt var mı? GMRES gibi esnek yinelemeli çözücüler kadar doğrudan yöntemler kullanarak paralel sistemlerde blok seyrekliğini kullanabilir miyim?


3
İnsanların, özel matrisiniz hakkında daha fazla ayrıntı bilmeden bu konuda gerçekten etkili bir şekilde yorum yapabileceğini sanmıyorum. boyutlar nedir? Seyreklik şekli nasıldır?
Costis

2
Bir çok şey ne demek istediğine bağlı. Değişken sayısı , yüzbinlerce mi? milyonlar? n
Brian Borchers

2
Bu soru scicomp.stackexchange.com/q/81/276 ; orada yararlı bilgiler bulabilirsiniz. Ayrıca, bu soruya dayanarak, operatörünüzün spektrumu (veya önkoşullu operatörünüzün spektrumu) hakkında konuşmak yararlı olabilir.
Geoff Oxberry

Yanıtlar:


9

MUMPS seyrek doğrudan çözücü simetrik belirsiz sistemleri işleyebilir ve serbestçe kullanılabilir ( http://graal.ens-lyon.fr/MUMPS/ ). Ian Duff, hem MUMPS hem de MA57'nin yazarlarından biriydi, bu nedenle algoritmaların birçok benzerliği var.

MUMPS dağıtılmış bellek paralel bilgisayarları için tasarlanmıştır, ancak tek işlemcili makinelerde de iyi çalışır. Çok iş parçacıklı bir BLAS kitaplığına bağlarsanız, paylaşılan bellekte, çok çekirdekli işlemcilerde makul hızlanma elde edebilirsiniz.

"Çok büyük" ne kadar büyük olduğunu söylemediniz, ancak MUMPS, çarpanlarına ayrılmış matrisin kullanılabilir belleğe sığmayacağı sorunları ele almak için temel dışı bir özelliğe sahiptir.


7

Doğrudan çözücülerin maruz kaldığı genel problem, doldurma olgusudur, yani seyrek bir matrisin tersi yoğun olabilir. Matrisin yapısı "uygun" değilse bu, büyük bellek gereksinimlerine yol açar.

Bu sorunları çözmek için girişimler vardır ve luMATLAB'ın varsayılan işlevi bunlardan birkaçını kullanır. Permütasyonlara, diyagonal ölçeklendirmeye ve benzerlerine genel bir bakış için http://www.mathworks.de/de/help/matlab/ref/lu.html adresine bakın . Aynı şey MUMPS ( http://graal.ens-lyon.fr/MUMPS/ ) gibi daha gelişmiş paketler için de geçerlidir .

Genel olarak, eğer probleminiz yeterince büyükse, o hafıza sınırına ulaşacaksınız ve tekrarlamalı (Krylov) yöntemlerini kullanmanız gerekecek.

Sorununuz simetrik ve belirsiz ise, MINRES bariz bir seçim olabilir. Bununla birlikte, sorun simetrik ise GMRES ve MINRES'in tam olarak aritmetik olarak aynı şeyi yaptığını, ancak GMRES'in ortogonalite kaybından daha az muzdarip olma eğiliminde olduğunu unutmayın. Bu nedenle, bazı insanlar GMRES'i "MINRES'in en iyi uygulaması" olarak görmektedir.

Her durumda, muhtemelen sisteminizin ön koşullandırmasından faydalanırsınız. Bir önkoşulu uyarlamak için zaman harcamak istemiyorsanız, eksik LU-çarpanlara ayırma önkoşulu (ILU) sizi zaten bir yere götürebilir.


2

Herhangi bir yinelemeli çözücü, yalnızca sorun yeterince büyükse (büyük, gerekli depolama alanı, uygulama verimliliği gibi çeşitli faktörlere bağlıdır) doğrudan yöntemleri yenebilir. Ve ayrıca herhangi bir krylov yöntemi (örneğin GMRES) sadece uygun bir ön koşullandırma (uygulamada) kullanıyorsanız iyidir. Herhangi bir önkoşul kullanmıyorsanız, krylov yöntemlerinin genel olarak hiçbir faydası yoktur. Ben de blok seyrek matrislerle çalışıyorum (bunlar PDE uygulamalarından geliyor) ve ön koşullu (örtüşen katkı schwarz) krylov çözücüsünün (ya yeniden başlatılan GMRES veya BiCG-Stab) blok için bir kaba ızgara düzeltmesi (veya bir multigrid) ile ölçeklenebilir olduğunu gözlemledim matris türü.


2

Matlab '\' operatörü birinci sınıf programlama sayesinde oldukça verimlidir. Timothy Davis'in kitabında bazı fikirleri ve olası tüm kısa yolları nasıl kullandıklarını görebilirsiniz.

Matlab'da iyi gelişmiş ve istikrarlı gmres kullanabilirsiniz. Muhtemelen, teorik olarak davanız için ideal olması gereken madenciler bu kadar güvenilir olmayabilir (en azından benim deneyimim böyle söylüyor). Matlab gmres'den eşit veya daha yüksek verim almalısınız.

  1. Sisteminiz yeterince büyük (en az birkaç bin ila birkaç bin).
  2. Doğru türde parametreler kullanıyorsanız (RESTART, MAXIT, X0). Bunun için açık bir kılavuz yok. Deneyiminizi kullanın.
  3. İyi bir ön koşullayıcı kullanın. ILU veya daha ucuz bir blok Jacobi kullanabilirsiniz. Bu çabayı önemli ölçüde azaltacaktır.
  4. EN ÖNEMLİ: Matrisiniz seyrek ise, matlab seyrek biçimini kullanın. Matlab gmres bunun için idealdir. Maliyeti büyük ölçüde azaltacaktır.

Daha büyük sistemler için PETSc gibi bir araç kullanın.


1

Matrisinizin onbinlerce veya daha azının ortasında bir boyutu varsa, belirsiz simetrik sistemler için pek çok serbest doğrudan yöntem olmasa da (aslında bildiğim hiçbiri açık kaynak değildir) doğrudan bir yöntem kullanın. HSL'den MA57 var , ama bu sadece akademik kullanım için ücretsiz. Kesinlikle simetriyi görmezden gelebilir ve UMFPACK kullanabilirsiniz .

Yaklaşık on yüzlerce boyutta, doğrudan bir yöntemin bellek kullanımı, tipik bir masaüstü bilgisayarın makul bir şekilde işleyebildiğini aşmaya başlar, bu nedenle etli bir paylaşılan bellek makineniz yoksa, yinelemeli yöntemlere geçmeniz gerekir. Belirsiz sorunlar için, arıza mümkün olsa da, simetrik sistemler için BiCG (biconjugate gradyanı) uzmanlaştırabilirsiniz. Simetrik sistemler için yakın zamanda piyasaya sürülen ve daha fazla sayısal kararlılık sağlayan bir MINRES-QLP bulunmaktadır.

İki yöntem oldukça farklı uygulamalar gerektirir, çünkü doğrudan yöntemler için matrisi oluşturmanız gerekir, yinelemeli yaklaşımda ise genellikle matrisi açıkça oluşturmazsınız.

Özellikle matris boyutunun bir fonksiyonu olarak bir yaklaşımın diğerinden daha hızlı olmasının birkaç nedeni vardır. Oldukça kötü koşullandırılmış sistemler için, yinelemeli yöntemler oldukça kötü bir şekilde durgunlaşabilir. Çok seyrek olmayan matrisler için, doğrudan yöntemler bir sürü dolgu yaratır ve bu da işleri çok yavaşlatır. Ayrıca, Matlab'daki doğrudan yöntemler son derece optimize edilmiştir (dahili olarak UMFPACK veya MA57 kullanır), yinelemeli yöntemler genellikle doğrudan Matlab'da kodlanır ve darboğazlar matvecs ve dot ürünlerinin uygulanması olduğundan seviye 3 BLAS'tan yararlanma için daha az fırsat vardı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.