Яка накладні витрати в розрідженому множенні матриці


10

Чи множиться матричне множення (і Mat * Mat, і Mat * Vec) з кількістю ненульових значень, або з розміром матриці? Або якесь поєднання двох.

Що з формою

Наприклад, у мене є матриця 100 x 100 із 100 значеннями, або матриця 1000 x 1000 зі 100 значеннями.

Під час складання цих матриць (чи множення їх на аналогічні матриці з подібною розрідженістю), чи буде перша (100х100) швидшою, ніж друга (1000х1000)? Це залежить від того, де знаходяться значення?

Якщо це залежить від реалізації, мене цікавить відповідь на PETSc.

Відповіді:


11

Вартість розрідженого множення матричного вектора масштабується лінійно з кількістю ненульових записів, оскільки кожен запис множиться один раз на деякий запис у векторі.

Вартість розрідженого множення матриць-матриць сильно залежить від структури ненульових значень. Наприклад, розглянемо вибір кварцової матриці яка має структуру головки стрілок :А

А=(δ1β1δ2β2δн-1βн-1γ1γ2γн-1δн),

тоді має O ( n ) ненулі, але A 2 щільний. Існує відома графова інтерпретація цього явища: кожен шлях довжиною 1 або 2 у графі A має перехід у графі A 2 (тобто ненульовий запис у A 2 ).АО(н)А2АА2А2


4

По-перше, це залежить від реалізації. Якщо ви реалізуєте розріджену матрицю як щільну матрицю і заповнюєте ненулі, вона буде масштабуватися із загальним розміром матриці. Якщо він зберігається як нулі, він буде масштабуватись як масштаби часу доступу з розміром матриці.

О(r2н2)

Однак слід зазначити, що немає сенсу зберігати те, чого там немає; якщо ви дбаєте про цю продуктивність, чому ви зберігаєте 100 значень для матриці 1000x1000? Це означає, що принаймні 90% рядків / стовпців взагалі не мають нульових значень, і їх можна повністю видалити з матриці. Якщо шаблон ненульових значень не змінюється, розгляньте питання про видалення рядків завжди-всі нулі з цього і цільової матриці; це прибере десь 90% зусиль, залишивши продуктивність двох матриць (100 2 , 1000 2 ) в цілому еквівалентними.


Порожні рядки та стовпці часто функціонують щодо проблеми (тобто, наприклад, збереження рівномірного відображення між номером рядка та місцеположенням у зображенні). З цим не вдасться позбутися.
meawoppl

Саме так; Погіршення продуктивності виконання приблизно в 10 разів погіршується лише для збереження відображення, яке ви могли б зберігати в одному масиві 100 ints - це не нормальний компроміс. Оскільки питання стосувалося продуктивності як розміру порожнього матричного масштабу, це досить важливий момент, особливо для PETSc, про що він запитував.
Філ Х

3

Повна модель продуктивності SpMV наведена в цій роботі . Це наочно показує, що основним обмежувачем є пропускна здатність, хоча ви можете зменшити навантаження, скориставшись кількома векторами. Після цього ви стикаєтесь з обмеженнями щодо випуску інструкцій та лімітом на непогашені інструкції щодо написання, я вважаю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.