Mối quan hệ của BLAS, LAPACK và các thư viện đại số tuyến tính khác là gì?


26

Tôi đã xem xét các thư viện đại số tuyến tính C ++ cho một dự án mà tôi đang thực hiện. Một cái gì đó mà tôi vẫn chưa nắm bắt được là sự kết nối của BLAS và LAPACK với các thư viện đại số tuyến tính khác.

Nhìn qua bài viết này về các thư viện đại số tuyến tính tôi thấy thú vị rằng:

  • một số thư viện độc lập với BLAS và LAPACK
  • một số yêu cầu BLAS và LAPACK
  • một số có giao diện tùy chọn để BLAS và LAPACK
  • và, theo tôi hiểu, bạn có thể sử dụng BLAS và LAPACK để giải quyết trực tiếp các vấn đề đại số tuyến tính

Tôi có thể tưởng tượng rằng một số thư viện chỉ đơn giản là giao diện C ++ cho các thư viện BLAS và LAPACK được viết bằng C và Fortran và các thư viện khác đã thực hiện các thói quen thay thế của riêng họ, nhưng

  1. Ý nghĩa của các giao diện tùy chọn đối với BLAS và LAPACK là gì? Bạn đang mất gì khi chọn không tham gia, và các thư viện đang làm gì thay thế?

  2. Có bất kỳ thư viện cung cấp nhiều hơn chỉ là một giao diện? Ví dụ, UMFPACK được viết bằng C và có các giao diện tùy chọn cho BLAS và LAPACK. UMFPACK (hoặc các thư viện khác) có thể làm gì mà BLAS và LAPACK không thể tự mình làm được?

Câu trả lời:


15

Theo như tôi biết, Lapack là triển khai công khai duy nhất của một số thuật toán (eigensolver không đối xứng dày đặc, eigensolver đối xứng thời gian bậc hai, Jacobi SVD nhanh). Hầu hết các thư viện không dựa vào BLAS + Lapack có xu hướng hỗ trợ các hoạt động rất nguyên thủy như nhân ma trận, nhân tố LU và phân tách QR. Lapack chứa một số thuật toán tinh vi nhất cho các tính toán ma trận dày đặc mà tôi không tin là được thực hiện ở bất kỳ nơi nào khác.

Vì vậy, để trả lời câu hỏi của bạn (ít nhất là một phần),

  1. Bằng cách chọn không tham gia BLAS / Lapack, bạn thường không thiếu chức năng (trừ khi giao diện tùy chọn được thiết kế để không có triển khai thay thế, điều này rất hiếm). Nếu bạn muốn thực hiện các thao tác rất tinh vi, thì các thư viện khác đó có thể không tự thực hiện. Vì BLAS có thể được điều chỉnh cao cho kiến ​​trúc của bạn, bạn có thể bỏ lỡ những lần tăng tốc khổng lồ (một thứ tự chênh lệch tốc độ không phải là chưa từng thấy).

  2. Bạn đề cập đến UMFPACK, dành cho nhân tố ma trận thưa thớt. BLAS / Lapack chỉ quan tâm đến ma trận dày đặc. UMFPACK ở một số cấp độ cần phải xử lý các vấn đề dày đặc kích thước trung bình, có thể thực hiện bằng cách sử dụng triển khai tùy chỉnh hoặc bằng cách gọi BLAS / Lapack. Ở đây sự khác biệt chỉ là về tốc độ.

Nếu tốc độ là mối quan tâm lớn, hãy thử sử dụng một thư viện hỗ trợ các ràng buộc BLAS / Lapack tùy chọn và sử dụng chúng cuối cùng khi bạn muốn mọi thứ nhanh hơn.


3
  1. Việc triển khai tốt các thói quen BLAS và LAPACK (quan trọng nhất là các thói quen BLAS) có thể nhanh hơn nhiều so với việc triển khai thẳng về phía trước của các chức năng tương tự. Tuy nhiên, việc triển khai hiệu quả thường bao gồm các tối ưu hóa rất cụ thể cho máy tính cụ thể mà bạn đang chạy. Ngay cả các mô hình bộ xử lý khác nhau từ cùng một nhà sản xuất (ví dụ bộ xử lý Intel x86-64) thường yêu cầu mã rất khác nhau để có hiệu năng tốt. Bằng cách cung cấp các thư viện BLAS / LAPACK được tối ưu hóa cho gói phần mềm, bạn thường có thể tăng tốc mã so với việc sử dụng các thói quen không được tối ưu hóa. Tuy nhiên, vì nhiều người dùng thông thường có thể không có chuyên môn để cài đặt các thói quen được tối ưu hóa, nên cũng thường cung cấp tùy chọn sử dụng các thói quen đại số tuyến tính không tối ưu hóa chung.

  2. UMFPACK là một thư viện các thói quen cho đại số tuyến tính trên các ma trận thưa thớt (ma trận có tỷ lệ cao 0 mục.) Nó có thể sử dụng BLAS / LAPACK để xử lý các ma trận dày đặc (hoặc các khối dày đặc trong ma trận) mà nó gặp phải.


1

Phiên bản ngắn: chúng là các thư viện được viết chủ yếu bằng Fortran, được sử dụng cho các hoạt động Số bằng nhiều ngôn ngữ - thậm chí một số chương trình C do tốc độ và tối ưu hóa tuyệt đối của chúng; Chúng cũng là một số triển khai mã nguồn mở duy nhất của nhiều thuật toán :)

Bạn không phải sử dụng các thư viện trừ khi họ có sự phụ thuộc; iirc hầu hết trong số đó là khá độc lập và bạn luôn có thể viết các hàm toán học của riêng mình, chẳng hạn như các hàm được vector hóa tốt hơn cho kiến ​​trúc của bạn


1
Hầu hết các thói quen BLAS và LAPACK được tối ưu hóa từ lâu đã không còn được viết Fortran. Các thói quen BLAS và LAPACK nhanh nhất thường không phải là các thói quen được tải xuống từ netlib. Các nhà cung cấp của hầu hết các bộ xử lý bán hoặc phân phối các phiên bản tối ưu của BLAS và LAPACK được thiết kế dành riêng cho chip của họ.
Bill Barth

Xin lỗi tôi có nghĩa là những cái được phân phối trên mạng - những cái chung; Tất nhiên, các chip cụ thể của chip không phải là di động: tức là một số thủ thuật véc tơ của Intel không hoạt động tốt trên chip AMD, đó là lý do tại sao chúng có tuyên bố từ chối trách nhiệm về thư viện. Và tôi khá chắc chắn rằng những người được đổi thương hiệu dưới một tên khác không?
Eiyrioü von Kauyf

@BillBarth BLAS chắc chắn nhưng bạn có chắc rằng các thói quen LAPACK cũng được viết lại không? Afaik miễn là BLAS 3 có hiệu suất cao (hoặc đa luồng) thì tất cả đều tốt.
stali

1
Tôi nghĩ về BLAS và LAPACK là tên của các chức năng và giao diện. Có rất nhiều cách triển khai khác nhau (ACML, ESSL, MKL, ATLAS, v.v.).
Bill Barth

1
đó chỉ là các giao diện .. giống như ATLAS, chúng không phải là thư viện thực tế.
Eiyrioü von Kauyf
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.