Chi phí trong phép nhân ma trận thưa thớt là gì


10

Liệu phép nhân ma trận (cả Mat * Mat và Mat * Vec) có tỷ lệ với số không không, hay với kích thước của ma trận? Hoặc một số kết hợp của hai.

Còn về hình dạng.

Ví dụ: tôi có ma trận 100 x 100 với 100 giá trị trong đó hoặc ma trận 1000 x 1000 với 100 giá trị trong đó.

Khi bình phương các ma trận này (hoặc nhân chúng với các ma trận tương tự có độ thưa tương tự), thì lần đầu tiên (100x100) sẽ nhanh hơn lần thứ hai (1000x1000)? Có phụ thuộc vào nơi các giá trị?

Nếu nó phụ thuộc vào việc triển khai, tôi quan tâm đến câu trả lời cho PETSc.

Câu trả lời:


11

Chi phí của phép nhân vectơ ma trận thưa thớt quy mô tuyến tính với số lượng mục nhập khác không, vì mỗi mục được nhân một lần bởi một số mục trong vectơ.

Chi phí của phép nhân ma trận thưa thớt phụ thuộc rất nhiều vào cấu trúc của các số khác. Ví dụ, hãy xem xét bình phương một ma trận thưa thớt có cấu trúc đầu mũi tên :Một

Một= =(δ1β1δ2β2δn-1βn-1γ1γ2γn-1δn),

thì có nonzeros, nhưng thì dày đặc. Có một cách giải thích biểu đồ nổi tiếng về hiện tượng này: mọi đường dẫn có độ dài 1 hoặc 2 trong biểu đồ của trở thành một cạnh trong biểu đồ của (nghĩa là một mục nhập khác trong ).MộtÔi(n)Một2MộtMột2Một2


4

Thứ nhất, nó phụ thuộc vào việc thực hiện. Nếu bạn thực hiện một ma trận thưa thớt như một ma trận dày đặc và điền vào các số không, nó sẽ mở rộng theo kích thước tổng thể của ma trận. Nếu nó được lưu trữ dưới dạng khác, nó sẽ chia tỷ lệ theo tỷ lệ thời gian truy cập với kích thước ma trận.

Trong tài liệu PETSc , nó giải thích rằng bộ lưu trữ mặc định cho ma trận thưa thớt là bộ lưu trữ hàng được nén, tỷ lệ với số lượng hàng và số giá trị khác không trên mỗi hàng. Vì vậy, tôi mong đợi một MatMat sẽ mở rộng quy mô với bình phương của biện pháp này; tức là .Ôi(r2n2)

Tuy nhiên, một điều cần lưu ý là không có điểm lưu trữ những gì không có ở đó; nếu bạn quan tâm đến hiệu suất này, tại sao bạn lưu trữ 100 giá trị cho ma trận 1000x1000? Điều đó có nghĩa là ít nhất 90% các hàng / cột không có giá trị khác nào và có thể được loại bỏ hoàn toàn khỏi ma trận. Nếu mẫu của các giá trị khác không không thay đổi, hãy xem xét loại bỏ các hàng luôn luôn bằng không khỏi cả ma trận này và ma trận đích; nó sẽ loại bỏ khoảng 90% nỗ lực, để lại hiệu suất của hai ma trận (100 2 , 1000 2 ) tương đương rộng rãi.


Các hàng và cột trống thường có chức năng liên quan đến một vấn đề (ví dụ: giữ một ánh xạ đồng nhất giữa số hàng đến vị trí trong một hình ảnh chẳng hạn) Tuy nhiên, sẽ có một sự đánh đổi không loại bỏ những vấn đề này.
meawoppl

Chính xác; làm cho hiệu suất thời gian chạy của bạn khoảng 10 lần tệ hơn chỉ để duy trì ánh xạ mà bạn có thể lưu trữ trong một mảng 100 ints không phải là một sự đánh đổi thông thường. Vì câu hỏi là về hiệu suất như kích thước trống của thang đo ma trận, đây là một điểm khá quan trọng đặc biệt đối với PETSc, như ông đã hỏi.
Phil H

3

Một mô hình hoàn chỉnh về hiệu suất SpMV được đưa ra trong bài viết này . Nó cho thấy rõ ràng rằng bộ giới hạn chính là băng thông, mặc dù bạn có thể giảm bớt gánh nặng bằng cách sử dụng nhiều vectơ. Sau đó, bạn gặp phải các hạn chế về vấn đề hướng dẫn và giới hạn đối với các hướng dẫn viết xuất sắc mà tôi tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.