Apa overhead dalam perkalian matriks jarang

10

Apakah perkalian matriks (baik Mat * Mat, dan Mat * Vec) skala dengan jumlah non-nol, atau dengan ukuran matriks? Atau kombinasi keduanya.

Bagaimana dengan bentuk.

Sebagai contoh, saya memiliki 100 x 100 matriks dengan 100 nilai di dalamnya, atau 1000 x 1000 matriks dengan 100 nilai di dalamnya.

Ketika mengkuadratkan matriks ini (atau mengalikannya dengan matriks yang sama dengan sparsity yang sama), apakah yang pertama (100x100) akan lebih cepat daripada yang kedua (1000x1000)? Apakah itu tergantung pada di mana nilainya?

Jika tergantung pada implementasi, saya tertarik pada jawaban untuk PETSc.

Andrew Spott
sumber

Jawaban:

11

Biaya skala penggandaan matriks-vektor jarang linear dengan jumlah entri bukan nol, karena setiap entri dikalikan satu kali dengan beberapa entri dalam vektor.

SEBUAH

SEBUAH=(δ1β1δ2β2δn-1βn-1γ1γ2γn-1δn),

SEBUAHHAI(n)SEBUAH2SEBUAHSEBUAH2SEBUAH2

Jack Poulson
sumber
4

Pertama, itu tergantung implementasi. Jika Anda mengimplementasikan matriks jarang sebagai matriks padat dan mengisi bukan-nol, itu akan skala dengan ukuran keseluruhan dari matriks. Jika disimpan sebagai bukan pembuat, itu akan skala sebagai skala waktu akses dengan ukuran matriks.

HAI(r2n2)

Namun satu hal yang perlu diperhatikan adalah tidak ada gunanya menyimpan apa yang tidak ada; jika Anda peduli dengan kinerja ini, mengapa Anda menyimpan nilai 100 untuk matriks 1000x1000? Itu berarti bahwa setidaknya 90% dari baris / kolom tidak memiliki nilai nol sama sekali, dan dapat sepenuhnya dihapus dari matriks. Jika pola nilai bukan nol tidak berubah, pertimbangkan untuk menghapus baris selalu-semua-nol dari keduanya dan matriks target; itu akan menghapus sekitar 90% dari upaya, meninggalkan kinerja dua matriks (100 2 , 1000 2 ) secara luas setara.

Phil H
sumber
Baris dan kolom kosong sering memiliki fungsi sehubungan dengan masalah (misalnya menjaga pemetaan seragam antara nomor baris ke lokasi dalam gambar misalnya) Akan ada trade-off yang tidak menyingkirkan ini.
meawoppl
Persis; membuat kinerja runtime Anda sekitar 10x lebih buruk hanya untuk mempertahankan pemetaan yang bisa Anda simpan dalam satu array 100 int bukan merupakan tradeoff yang normal. Karena pertanyaannya adalah tentang kinerja sebagai ukuran kosong dari skala matriks, ini adalah poin yang cukup penting terutama untuk PETSc, saat ia bertanya tentang.
Phil H
3

Model lengkap kinerja SpMV diberikan dalam makalah ini . Ini menunjukkan dengan jelas bahwa pembatas utama adalah bandwidth, meskipun Anda dapat mengurangi beban dengan menggunakan banyak vektor. Setelah itu Anda mengalami keterbatasan masalah instruksi dan batas pada instruksi menulis yang luar biasa saya percaya.

Matt Knepley
sumber