LAPACK giải quyết các hệ thống ba chiều như thế nào và tại sao?


9

Trong dự án của tôi, tôi phải giải quyết một vài ma trận tam giác ở mọi bước, vì vậy điều quan trọng là phải có một người giải quyết tốt cho những điều đó. Tôi đã thực hiện riêng của mình, chỉ là cách cổ điển để làm điều đó được mô tả trên Wikipedia. Sau đó tôi đã thử sử dụng Lapack, và thật ngạc nhiên là nó chậm hơn!

Bây giờ, bên trong Lapack có vẻ như nó giải quyết bằng nhân tố LU và tôi tự hỏi tại sao, nó không phức tạp hơn nó có thể?

Ngoài ra, tôi đã tìm thấy một thuật toán trong cuốn sách "Công thức số" từ nr.com, trong đó phân chia đệ quy hệ thống thành các vấn đề nhỏ hơn. Nó trông đầy hứa hẹn. Có bất kỳ goodies khác ngoài đó?

Cập nhật: kích thước sự cố là khoảng 1000x1000. Tôi đã sử dụng GotoBLAS, nó cũng cung cấp cho bạn thư viện Lapack 3.1.1. Vấn đề không đối xứng. Tôi đã sử dụng thói quen Lapack cho ma trận tam giác tổng quát.


2
Bạn sẽ phải nói rõ thói quen LAPACK nào bạn đã sử dụng cho việc này. Lưu ý rằng dgtsv thực hiện xoay vòng một phần, nhưng mã của bạn có thể không làm điều này. Ngoài ra, vui lòng cho biết việc triển khai LAPACK mà bạn đã kiểm tra và kích thước sự cố mà bạn đã điểm chuẩn. Ngoài ra, vấn đề của bạn là đối xứng tích cực xác định?
Jed Brown

Tôi đã thêm một số thông tin trong công thức câu hỏi.
tiam

Ứng dụng của bạn có phải làm gì với Phương thức khối lượng hữu hạn không?
Thắc mắc vào

Đó là sự khác biệt hữu hạn, nhưng trong viễn cảnh này, nó ít nhiều giống như tôi đoán.
tiam

Câu trả lời:


6

Bạn đang sử dụng một triển khai tham chiếu thực hiện xoay vòng một phần. Bộ giải ba cực làm rất ít việc và không gọi vào BLAS. Nó có khả năng chậm hơn mã của bạn bởi vì nó xoay vòng một phần. Các mã nguồn cho dgtsv là đơn giản.

Nếu bạn sẽ giải quyết với cùng một ma trận nhiều lần, bạn có thể muốn lưu trữ các yếu tố bằng cách sử dụng dgttrfdgttrs . Có thể các triển khai trong một LAPACK được tối ưu hóa như MKL, ACML hoặc ESSL sẽ hiệu quả hơn.


Tôi hơi tò mò. Gaussian Elim with PP sẽ hoạt động cho tất cả các ma trận bao gồm TriDia chéo. Trong CFD, chúng tôi sử dụng một phương thức đặc biệt cho các trường hợp FVM 1D được gọi là TDMA . Mà bạn nghĩ rằng sẽ nhanh hơn cho trường hợp anh ta đang thảo luận? Mặc dù, tôi không hoàn toàn chắc chắn ma trận của anh ta chiếm ưu thế theo đường chéo.
Thắc mắc vào

TDMA là những gì tôi đã thực hiện trong mã của mình. Câu hỏi đặt ra là tại sao Lapack siêu nhanh sẽ sử dụng quy trình xoay vòng một phần trong một ma trận cụ thể như vậy, được giải quyết nhanh hơn bằng một phương pháp dễ dàng như TDMA.
tiam

Nó chính xác là cùng một thuật toán (loại bỏ Gaussian chuyên dùng cho ma trận ba cực), nhưng việc triển khai của bạn không thực hiện xoay vòng một phần, do đó nó có thể không ổn định về số lượng. Việc xoay vòng đó không miễn phí và bạn đang so sánh với việc triển khai tham chiếu. Việc triển khai tham chiếu không được tối ưu hóa cho hiệu suất và xoay vòng một phần không miễn phí.
Jed Brown

Tôi hiểu ý của bạn, tôi có được lợi thế từ kiến ​​thức của mình về các hệ thống tôi đang giải quyết. Các triển khai LAPACK khác có làm tăng hiệu suất do thích ứng với kiến ​​trúc cụ thể hay nó vượt xa điều đó?
tiam
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.