Lựa chọn tốt nhất của bộ giải cho một hệ thống đối xứng thưa thớt (nhưng không tích cực)


10

Tôi hiện đang làm việc để giải quyết các hệ thống đối xứng rất lớn (nhưng không tích cực xác định), được tạo ra bởi một số thuật toán nhất định. Các ma trận này có độ thưa thớt khối đẹp có thể được sử dụng để giải song song. Nhưng tôi không thể quyết định liệu tôi nên sử dụng cách tiếp cận trực tiếp (như Đa mặt trận) hay phương pháp lặp (GMRES hoặc MINRES tiền điều kiện). Tất cả các nghiên cứu của tôi cho thấy rằng các bộ giải lặp (thậm chí với sự hội tụ khá nhanh của 7 lần lặp bên trong) không thể đánh bại toán tử '\' trực tiếp trong MATLAB. Nhưng trên lý thuyết, các phương pháp trực tiếp được cho là tốn kém hơn. Làm thế nào điều này xảy ra? Có bất kỳ tài liệu hoặc giấy cập nhật cho trường hợp như vậy? Tôi có thể sử dụng độ thưa thớt khối trong các hệ thống song song bằng cách sử dụng các phương pháp trực tiếp hiệu quả như các bộ giải lặp linh hoạt như GMRES không?


3
Tôi không nghĩ mọi người thực sự có thể nhận xét hiệu quả về điều này mà không cần biết thêm chi tiết về ma trận cụ thể của bạn. kích thước là gì? Mô hình thưa thớt như thế nào?
Costis

2
n

2
Câu hỏi này trùng lặp đáng kể với scicomp.stackexchange.com/q/81/276 ; bạn có thể tìm thấy thông tin hữu ích ở đó. Ngoài ra, dựa trên câu hỏi đó, có thể hữu ích khi nói về phổ của toán tử của bạn (hoặc phổ của toán tử tiền điều kiện của bạn).
Geoff Oxberry

Câu trả lời:


9

Bộ giải trực tiếp thưa thớt MUMPS có thể xử lý các hệ thống không xác định đối xứng và có sẵn miễn phí ( http://graal.ens-lyon.fr/MUMPS/ ). Ian Duff là một trong những tác giả của cả MUMPS và MA57 nên các thuật toán có nhiều điểm tương đồng.

MUMPS được thiết kế cho các máy tính song song bộ nhớ phân tán nhưng nó cũng hoạt động tốt trên các máy xử lý đơn. Nếu bạn liên kết nó với thư viện BLAS đa luồng, bạn có thể đạt được tốc độ hợp lý trên bộ nhớ dùng chung, bộ xử lý đa lõi.

Bạn không nói rằng "rất lớn" lớn như thế nào nhưng MUMPS cũng có khả năng vượt trội để xử lý các vấn đề trong đó ma trận bao thanh toán sẽ không phù hợp với bộ nhớ khả dụng.


7

Vấn đề chung mà người giải quyết trực tiếp đang mắc phải là hiện tượng điền vào, nghĩa là nghịch đảo của ma trận thưa thớt có thể dày đặc. Điều này dẫn đến các yêu cầu bộ nhớ lớn nếu cấu trúc của ma trận không "phù hợp".

Có những nỗ lực khắc phục những vấn đề này và luchức năng mặc định của MATLAB sử dụng một vài trong số chúng. Xem http://www.mathworks.de/de/help/matlab/ref/lu.html để biết tổng quan về hoán vị, tỷ lệ đường chéo và như vậy. Tất nhiên, điều tương tự cũng đúng đối với các gói nâng cao hơn như MUMPS ( http://graal.ens-lyon.fr/MUMPS/ ).

Tuy nhiên, nói chung, nếu vấn đề của bạn đủ lớn, bạn sẽ đạt đến ranh giới bộ nhớ đó và bạn sẽ phải sử dụng các phương pháp lặp (Krylov).

Nếu vấn đề của bạn là đối xứng và không xác định, MINRES có thể là sự lựa chọn rõ ràng. Tuy nhiên, lưu ý rằng GMRES và MINRES làm điều tương tự trong số học chính xác nếu vấn đề là đối xứng, nhưng GMRES có xu hướng chịu ít hơn do mất tính trực giao. Do đó, một số người coi GMRES là "triển khai tốt nhất của MINRES".

Trong mọi trường hợp, bạn có thể sẽ được lợi từ tiền điều kiện hệ thống của bạn. Nếu bạn không muốn dành thời gian cho việc điều chỉnh một điều kiện tiên quyết, thì điều kiện tiên quyết nhân tố LU không hoàn chỉnh (ILU) có thể đã đưa bạn đến một nơi nào đó.


2

Bất kỳ bộ giải lặp nào cũng có thể đánh bại các phương thức trực tiếp chỉ khi vấn đề đủ lớn (lớn, phụ thuộc vào một số yếu tố như yêu cầu lưu trữ, hiệu quả thực hiện). Và bất kỳ phương pháp krylov nào (ví dụ GMRES) chỉ tốt nếu bạn sử dụng một điều kiện tiên quyết thích hợp (trong thực tế). Nếu bạn không sử dụng bất kỳ điều kiện tiên quyết nào, các phương pháp krylov không được sử dụng nói chung. Tôi cũng làm việc với các ma trận thưa thớt khối (chúng đến từ các ứng dụng PDE) và quan sát thấy rằng bộ giải krylov tiền xử lý (chồng chéo schwarz) (được khởi động lại GMRES hoặc BiCG-Stab) được ghép với một hiệu chỉnh lưới thô (hoặc đa biến) loại ma trận.


2

Toán tử Matlab '\' có hiệu quả cao do lập trình đỉnh cao. Bạn có thể thấy một số ý tưởng và cách họ sử dụng tất cả các lối tắt ngắn có thể có trong cuốn sách của Timothy Davis.

Trong MATLAB bạn có thể sử dụng gmres, được phát triển tốt và ổn định. Có lẽ là minres, về mặt lý thuyết nên là lý tưởng cho trường hợp của bạn, có thể không đáng tin cậy (ít nhất là kinh nghiệm của tôi nói như vậy). Bạn sẽ nhận được hiệu quả tương đương hoặc cao hơn từ matlab gmres nếu

  1. Hệ thống của bạn đủ lớn (ít nhất vài nghìn đến vài nghìn).
  2. Nếu bạn đang sử dụng đúng loại tham số (RESTART, MAXIT, X0). Không có hướng dẫn rõ ràng có sẵn cho việc này. Sử dụng kinh nghiệm của bạn.
  3. Sử dụng một điều kiện tiên quyết tốt. Bạn có thể sử dụng ILU hoặc thậm chí rẻ hơn, một khối Jacobi. Điều này sẽ cắt giảm nỗ lực đáng kể.
  4. QUAN TRỌNG NHẤT: Nếu ma trận của bạn thưa thớt, hãy sử dụng định dạng thưa thớt MATLAB. Matlab gmres được xây dựng lý tưởng cho điều đó. Nó sẽ cắt giảm chi phí đến một mức độ lớn.

Đối với các hệ thống lớn hơn, sử dụng một công cụ như PETSc.


1

Nếu ma trận của bạn có thứ nguyên ở giữa hàng chục nghìn hoặc ít hơn, hãy sử dụng phương pháp trực tiếp, mặc dù không có nhiều phương thức trực tiếp có sẵn miễn phí cho các hệ thống đối xứng không xác định (thực tế không có phương pháp nào tôi biết là nguồn mở). Có MA57 từ HSL, nhưng nó chỉ miễn phí cho sử dụng học tập. Bạn chắc chắn có thể bỏ qua tính đối xứng và sử dụng UMFPACK .

Với kích thước khoảng hàng chục hàng trăm, việc sử dụng bộ nhớ của phương pháp trực tiếp bắt đầu vượt quá mức mà một máy tính để bàn thông thường có thể xử lý một cách hợp lý, vì vậy trừ khi bạn có một bộ nhớ dùng chung, bạn sẽ cần chuyển sang các phương pháp lặp. Đối với các vấn đề không xác định, bạn có thể chuyên BiCG (biconjugate gradient) cho các hệ thống đối xứng, mặc dù có thể phân tích được. Có một MINRES-QLP được phát hành gần đây cho các hệ thống đối xứng cung cấp sự ổn định số hơn.

Hai phương thức yêu cầu triển khai khá khác nhau, vì đối với các phương thức trực tiếp bạn thực sự cần phải tạo ma trận, trong khi theo phương pháp lặp, bạn thường không tạo thành ma trận một cách rõ ràng.

Có một số lý do tại sao một cách tiếp cận có thể nhanh hơn cách tiếp cận khác, đặc biệt là một chức năng của kích thước ma trận. Đối với các hệ thống điều hòa bị bệnh nặng, các phương pháp lặp có thể trì trệ khá tệ. Đối với các ma trận không quá thưa thớt, các phương thức trực tiếp cuối cùng tạo ra rất nhiều phần bổ sung, làm chậm mọi thứ rất nhiều. Ngoài ra, các phương thức trực tiếp trong Matlab được tối ưu hóa cao (sử dụng UMFPACK hoặc MA57 bên trong), trong khi các phương pháp lặp thường được mã hóa trực tiếp trong Matlab, và có ít cơ hội hơn để khai thác BLAS cấp 3 vì các nút thắt cổ chai là ứng dụng của các sản phẩm matvec và dot.

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.