LAPACK üçgensel sistemleri nasıl çözer ve neden?


9

Projemde her zaman adımında birkaç tridiagonal matrisi çözmem gerekiyor, bu yüzden bunlar için iyi bir çözücüye sahip olmak çok önemlidir. Kendi uygulamamı yaptım, sadece Vikipedi'de açıklanan klasik yol. Daha sonra Lapack'i kullanmayı denedim ve sürprizime göre daha yavaştı!

Şimdi, Lapack'in içinde LU çarpanlarına ayırma ile çözme gibi görünüyor ve merak ediyorum, neden olabileceğinden daha karmaşık değil mi?

Ayrıca, nr.com'un "Nümerik Tarifler" kitabında, sistemi tekrar tekrar küçük üçgen sorunlara bölen bir algoritma buldum. Umut verici görünüyordu. Dışarıda başka güzellikler var mı?

Güncelleme: sorun boyutu yaklaşık 1000x1000. GotoBLAS'ı kullandım, size bir Lapack 3.1.1 kütüphanesi de veriyor. Sorun simetrik değil. Genel tridiagonal matrisler için Lapack rutinini kullandım.


2
Bunun için hangi LAPACK rutinlerini kullandığınızı belirtmeniz gerekecektir. Not o dgtsv gerçekleştirdiği kısmi döner, ancak kod bunu olmayabilir. Lütfen hangi LAPACK uygulamasını test ettiğinizi ve hangi sorun boyutlarıyla karşılaştırdığınızı belirtin. Ayrıca, probleminiz simetrik pozitif kesin mi?
Jed Brown

Soru formülasyonuna biraz bilgi ekledim.
tiam

Uygulamanız Sonlu Hacim Yöntemleri ile bir ilgisi var mı?
12'de

Sonlu farklar, ama bu perspektifte sanırım aşağı yukarı aynı.
tiam

Yanıtlar:


7

Kısmi pivot işlemi yapan bir başvuru uygulaması kullanıyorsunuz. Tridiagonal çözümler çok az iş yapar ve BLAS'ı çağırmaz. Kısmen pivotlama yaptığı için muhtemelen kodunuzdan daha yavaştır. Dgtsv için kaynak kodu basittir.

Aynı matrisi birden çok kez çözecekseniz , faktörleri dgttrf ve dgttrs kullanarak saklamak isteyebilirsiniz . MKL, ACML veya ESSL gibi optimize edilmiş bir LAPACK'teki uygulamaların daha performanslı olması mümkündür.


Biraz merak ediyorum. PP'li Gauss Elim, TriDiagonal dahil tüm matrisler için çalışacaktır. CFD'de TDMA adı verilen FVM 1D vakaları için özel bir yöntem kullanıyoruz . Tartıştığı dava için hangisinin daha hızlı olacağını düşünüyorsunuz? Bununla birlikte, matrislerinin çapraz olarak baskın olduğundan tamamen emin değilim.
12'de

TDMA kodumda uyguladığım şey. Soru şu ki, süper hızlı Lapack, TDMA gibi kolay bir yöntemle daha hızlı çözülen böyle bir matristeki kısmi pivotlama prosedürünü neden kullanacaktır.
tiam

1
Tam olarak aynı algoritmadır (üçgensel bir matris için uzmanlaşmış Gauss eliminasyonu), ancak uygulamanız kısmi pivotlama yapmaz, bu nedenle sayısal olarak kararsız olabilir. Bu pivot işlemi ücretsiz değildir ve referans uygulamasıyla karşılaştırıyorsunuz. Referans uygulaması performans için optimize edilmemiştir ve kısmi dönme serbest değildir.
Jed Brown

Ne demek istediğini anlıyorum, çözdüğüm sistemler hakkındaki bilgimden faydalanıyorum. LAPACK'in diğer uygulamaları, belirli mimariye uyum nedeniyle performans artışı sağlıyor mu yoksa bunun ötesine geçiyor mu?
tiam
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.