Pilihan terbaik solver untuk sistem besar simetris jarang (tapi tidak pasti positif)

10

Saat ini saya sedang bekerja untuk memecahkan sistem simetris yang sangat besar (tapi tidak pasti positif), yang dihasilkan oleh beberapa algoritma tertentu. Matriks ini memiliki sparsity blok bagus yang dapat digunakan untuk pemecahan paralel. Tetapi saya tidak dapat memutuskan apakah saya harus menggunakan pendekatan langsung (seperti Multi-frontal) atau iteratif (GMRES atau MINRES yang telah dikondisikan sebelumnya). Semua penelitian saya menunjukkan bahwa solver iteratif (bahkan dengan konvergensi 7 iterasi dalam yang cukup cepat) gagal mengalahkan operator '\' langsung di MATLAB. Namun secara teori, metode langsung seharusnya lebih mahal. Bagaimana ini terjadi? Apakah ada dokumen atau kertas terbaru untuk kasus semacam itu? Dapatkah saya menggunakan blok sparsity dalam sistem paralel menggunakan metode langsung seefisien pemecah iteratif yang fleksibel seperti GMRES?

Soumyadipta Sarkar
sumber
3
Saya tidak berpikir orang dapat benar-benar mengomentari ini tanpa mengetahui rincian lebih lanjut tentang matriks spesifik Anda. Apa dimensinya? Seperti apa pola sparsity?
Costis
2
Banyak tergantung pada apa yang Anda maksud dengan besar. Apakah jumlah variabel, , dalam ratusan ribu? jutaan? n
Brian Borchers
2
Pertanyaan ini tumpang tindih dengan scicomp.stackexchange.com/q/81/276 ; Anda dapat menemukan informasi yang berguna di sana. Juga, berdasarkan pertanyaan itu, mungkin berguna untuk berbicara tentang spektrum operator Anda (atau spektrum operator prakondisi Anda).
Geoff Oxberry

Jawaban:

9

Pemecah langsung MUMPS jarang dapat menangani sistem tak terbatas simetris dan tersedia secara bebas ( http://graal.ens-lyon.fr/MUMPS/ ). Ian Duff adalah salah satu penulis MUMPS dan MA57 sehingga algoritme memiliki banyak kesamaan.

MUMPS dirancang untuk komputer paralel memori terdistribusi tetapi juga bekerja dengan baik pada mesin prosesor tunggal. Jika Anda menautkannya dengan perpustakaan BLAS multi-utas, Anda dapat mencapai peningkatan yang wajar pada memori bersama, prosesor multicore.

Anda tidak mengatakan seberapa besar "sangat besar" tetapi MUMPS juga memiliki kemampuan out-of-core untuk menangani masalah di mana matriks yang difaktorkan tidak akan muat dalam memori yang tersedia.

Bill Greene
sumber
7

Masalah umum yang dialami pemecah langsung adalah fenomena fill-in, yang berarti bahwa kebalikan dari matriks jarang mungkin padat. Ini mengarah ke persyaratan memori yang sangat besar jika struktur matriks tidak "cocok".

Ada upaya untuk mengatasi masalah ini, dan lufungsi default-MATLAB mempekerjakan beberapa dari mereka. Lihat http://www.mathworks.de/de/help/matlab/ref/lu.html untuk ikhtisar permutasi, penskalaan diagonal dan semacamnya. Hal yang sama berlaku tentu saja untuk paket yang lebih maju seperti MUMPS ( http://graal.ens-lyon.fr/MUMPS/ ).

Namun, secara umum, jika masalah Anda cukup besar, Anda akan mencapai batas memori itu, dan Anda harus menggunakan metode iteratif (Krylov).

Jika masalah Anda simetris dan tidak terbatas, MINRES mungkin merupakan pilihan yang jelas. Namun, perlu dicatat bahwa GMRES dan MINRES melakukan hal yang sama dalam perhitungan aritmatika jika masalahnya simetris, tetapi GMRES cenderung kurang menderita karena kehilangan ortogonalitas. Karenanya, beberapa orang menganggap GMRES sebagai "implementasi MINRES terbaik".

Bagaimanapun, Anda mungkin akan mendapat untung dari memprakondisikan sistem Anda. Jika Anda tidak ingin menghabiskan waktu untuk merancang sebuah prekondisi, preconditioner LU-faktorisasi yang tidak lengkap (ILU) mungkin sudah membawa Anda ke suatu tempat.

Nico Schlömer
sumber
2

Setiap pemecah iteratif dapat mengalahkan metode langsung hanya jika masalahnya cukup besar (besar, tergantung pada beberapa faktor seperti penyimpanan yang diperlukan, efisiensi implementasi). Dan juga metode krylov (misalnya GMRES) hanya baik jika Anda menggunakan prekondisi yang sesuai (dalam praktiknya). Jika Anda tidak menggunakan prasyarat apa pun, metode krylov tidak ada gunanya secara umum. Saya juga bekerja dengan matriks blok jarang (ini berasal dari aplikasi PDE) dan mengamati bahwa blok prasyarat (schwarz aditif tumpang tindih) pemecah krylov (baik memulai kembali GMRES atau BiCG-Stab) ditambah dengan koreksi grid kasar (atau multigrid) dapat diukur untuk ini jenis matriks.

pengguna1964178
sumber
2

Operator Matlab '\' sangat efisien karena pemrograman kedudukan tertinggi. Anda dapat melihat beberapa gagasan dan bagaimana mereka menggunakan semua jalan pintas yang mungkin dalam buku Timothy Davis.

Di matlab Anda dapat menggunakan gmres, yang dikembangkan dengan baik dan stabil. Mungkin tambang, yang secara teoritis harus ideal untuk kasus Anda, mungkin tidak dapat diandalkan (setidaknya pengalaman saya mengatakan demikian). Anda harus mendapatkan efisiensi yang sama atau lebih tinggi dari matlab gmres jika

  1. Sistem Anda cukup besar (setidaknya beberapa ribu beberapa ribu).
  2. Jika Anda menggunakan jenis parameter yang tepat (RESTART, MAXIT, X0). Tidak ada pedoman yang jelas tersedia untuk ini. Gunakan pengalaman Anda.
  3. Gunakan prekondisi yang bagus. Anda dapat menggunakan ILU atau bahkan lebih murah, blok Jacobi. Ini akan sangat mengurangi upaya.
  4. PALING PENTING: Jika matriks Anda jarang, gunakan format jarang matlab. Matlab gmres idealnya dibangun untuk itu. Ini akan memangkas biaya sebagian besar.

Untuk sistem yang lebih besar, gunakan alat seperti PETSc.

Soumyadipta Sarkar
sumber
1

Jika matriks Anda memiliki dimensi di pertengahan puluhan ribu atau kurang, gunakan metode langsung, meskipun tidak ada banyak metode langsung yang tersedia secara bebas untuk sistem simetris tak terbatas (sebenarnya tidak ada yang saya tahu adalah open source). Ada MA57 dari HSL, tapi itu hanya gratis untuk penggunaan akademis. Anda tentu saja dapat mengabaikan simetri dan menggunakan UMFPACK .

Pada sekitar puluhan rendah dalam dimensi, penggunaan memori dari metode langsung mulai melebihi apa yang bisa ditangani oleh komputer desktop biasa, jadi kecuali jika Anda memiliki mesin memori bersama yang gemuk, Anda perlu beralih ke metode berulang. Untuk masalah yang tidak terbatas, Anda dapat mengkhususkan BiCG (bikonjugat gradien) untuk sistem simetris, meskipun kerusakan mungkin terjadi. Ada MINRES-QLP yang baru-baru ini dirilis untuk sistem simetris yang memberikan stabilitas lebih numerik.

Kedua metode ini membutuhkan implementasi yang agak berbeda, karena untuk metode langsung Anda sebenarnya perlu membentuk matriks, sedangkan dalam pendekatan iteratif, Anda biasanya tidak akan membentuk matriks secara eksplisit.

Ada sejumlah alasan mengapa satu pendekatan mungkin lebih cepat dari yang lain, terutama sebagai fungsi dimensi matriks. Untuk sistem yang dikondisikan sangat sakit, metode berulang dapat mandek cukup buruk. Untuk matriks yang tidak terlalu jarang, metode langsung berakhir dengan menciptakan banyak pengisian, yang memperlambat banyak hal. Juga, metode langsung di Matlab sangat dioptimalkan (menggunakan UMFPACK atau MA57 secara internal), sementara metode iteratif biasanya dikodekan langsung di Matlab, dan ada lebih sedikit peluang untuk mengeksploitasi BLAS level 3 karena kemacetan adalah aplikasi matvec dan produk dot.

Victor Liu
sumber