Seberapa berguna PETSc untuk Matriks Padat?

14

Di mana pun saya melihat, tutorial / dokumen dll PETSc mengatakan bahwa itu berguna untuk aljabar linier dan biasanya menentukan bahwa sistem jarang akan mendapat manfaat. Bagaimana dengan matriks padat? Saya khawatir tentang menyelesaikan untuk padat .Ax=bA

Saya telah menulis kode saya sendiri untuk CG dan QMR di Fortran. Konstruk dasarnya adalah merobek kode pseudo dan menambahkan rutin BLAS sedapat mungkin ( ddot, dnrmdan dgemv) dengan sedikit penyetelan sendiri. Bagaimana ini dibandingkan dengan PETSc?

Saya tahu jawaban terbaik bagi saya untuk mencobanya sendiri tetapi karena alasan waktu dan lainnya, itu tidak mungkin.

Bantuan apa pun sangat kami hargai.

Pemeriksaan resmi
sumber

Jawaban:

7

Jika Anda memiliki matriks padat dengan struktur (mis. Transformasi cepat, komplemen Schur, dll), PETSc bisa berguna. Dalam kasus ini, Anda tidak akan merakit matriks penuh.

Untuk sistem rakitan padat, PETSc saat ini menggunakan PLAPACK, tetapi distribusi matriks dalam format asli PETSc bukan yang terbaik untuk meminimalkan komunikasi (untuk sebagian besar operasi). Jack Poulson, Matt Knepley, dan saya telah membahas porting aljabar linier padat PETSc untuk menggunakan Elemental , perpustakaan aljabar linier padat Jack yang lebih modern. Itu belum terjadi, tetapi kita akan melakukannya ketika kita punya waktu.

Jika ingin pustaka aljabar linier padat berfitur lengkap, gunakan Elemental. Tampaknya selalu memiliki API yang lebih lengkap untuk operasi-operasi itu daripada PETSc. Jika Anda perlu berinteraksi dengan sistem yang jarang atau belum dirakit, mungkin masuk akal untuk tetap menggunakan PETSc dan mengekstrak apa yang Anda perlukan untuk menggunakan Elemental untuk bagian yang padat (atau membantu kami menulis antarmuka PETSc ke Elemental).

Jed Brown
sumber
Apa jawaban Anda jika saya menggunakan sistem Memori Bersama?
Pemeriksaan
1
Anda dapat menggunakan beberapa proses MPI atau beberapa pthreads. Saya tidak melihat banyak gunanya menulis perangkat lunak paralel yang hanya berfungsi dengan memori bersama karena biasanya lokalitas memori yang Anda pikirkan ketika menulis untuk memori terdistribusi meningkatkan kinerja relatif terhadap semua kecuali implementasi berulir terbaik. Jika Anda hanya menginginkan API "serial" yang menggunakan utas secara internal untuk aljabar linier padat, Anda dapat menggunakan BLAS berulir.
Jed Brown
Saya ingin kode saya bekerja di workstation inti Xeon 12 saya (saya tidak melihat Cluster seperti yang sekarang). Saya menggunakan Intel MKL untuk (berulir) BLAS. Apakah Anda masih merekomendasikan saya mencoba PETSc?
Pemeriksaan
Jika semua yang Anda inginkan adalah BLAS, Anda senang dengan itu, dan Anda sudah menulis kode, gunakan saja. Jika Anda menginginkan lebih banyak fleksibilitas dan / atau kesempatan untuk menggunakan memori terdistribusi, Anda mungkin menginginkan PETSc.
Jed Brown
Fleksibilitas dalam hal? Memori yang didistribusikan?
Pemeriksaan
5

HAI(n3)HAI(n2)

Karena Anda menyebutkan bahwa Anda menggunakan sistem memori bersama, saya akan merekomendasikan libFLAME dan / atau PLASMA , tetapi saya tidak berpikir bahwa keduanya akan secara signifikan lebih cepat daripada vendor thread BLAS untuk operasi level 1 dan level 2 Anda.

Jed merekomendasikan Elemental , yang kebetulan saya kembangkan, tetapi saya akan kembali menekankan bahwa operasi level 1 dan level 2 bukan fokus utama pustaka aljabar linier padat paralel. Sejujurnya saya tidak pernah membandingkan salah satu rutinitas itu.

Jack Poulson
sumber
Jadi, dari apa yang saya dapatkan, setiap perpustakaan aljabar linier padat paralel berikutnya akan mencoba untuk mengoptimalkan operasi seperti perhitungan vektor eigen, solusi sistem daripada BLAS. Juga, Elemental terlihat sangat mengesankan. Saya pasti akan mencobanya ketika saya bisa.
Pemeriksaan
Mereka biasanya akan mengoptimalkan level 3 BLAS. Alasannya adalah bahwa kebanyakan orang yang menggunakan perpustakaan akan melakukan perhitungan besar yang biasanya dapat dipetakan ke level 3 BLAS.
Jack Poulson
Apakah itu karena BLAS 1/2 tidak bisa lebih baik? (Mungkin karena properti permukaan-ke-volume?) O (N ^ 2) data dan O (N ^ 2) perhitungan?
Pemeriksaan
Itu karena BLAS 1 dan 2 pada umumnya adalah istilah dengan urutan lebih rendah dalam perhitungan. Seluruh 'permainan' aljabar linier padat berkinerja tinggi adalah menyipitkan mata pada setiap operasi dengan cara yang benar sehingga Anda dapat memanggil xGEMM dan teman-teman untuk sebanyak mungkin pekerjaan.
Jack Poulson
Juga, ya, fakta bahwa mereka melakukan kurang lebih jumlah yang sama seperti memop adalah mengapa mereka dihindari sebanyak mungkin.
Jack Poulson