2011-08-15 29 views
18

Tại sao BLAS có hàm gemm cho phép nhân ma trận ma trận và hàm riêng biệt gemv cho phép nhân-vector ma trận? Không phải nhân ma trận-vector chỉ là trường hợp đặc biệt của phép nhân ma trận ma trận mà một ma trận chỉ có một hàng/cột?BLAS: gemm vs. gemv

+2

[dgemm] (http://www.netlib.org/blas/dgemm.f) và [dgemv] (http://www.netlib.org/blas/dgemv.f): F77 phiên bản kép của các chức năng thảo luận cho tò mò. Cũng chỉ muốn tiêm đó là một trường hợp đặc biệt quan trọng (và thường được sử dụng), nơi có thể tối ưu hóa đặc biệt ngay cả khi điều đó không hiển thị trong các phiên bản f77. – user786653

+0

cũng rất thú vị khi so sánh hiệu suất của gemm và gemv đối với phép nhân vectơ-vector. – constructor

Trả lời

11

Toán học, phép nhân vectơ-vector là trường hợp đặc biệt của phép nhân ma trận ma trận, nhưng điều đó không nhất thiết đúng với chúng như được thực hiện trong thư viện phần mềm.

Chúng hỗ trợ các tùy chọn khác nhau. Ví dụ: gemv hỗ trợ truy cập có cấu trúc vào các vectơ đang hoạt động, trong khi gemm không hỗ trợ bố cục ma trận có cấu trúc. Trong các ràng buộc ngôn ngữ C, gemm yêu cầu bạn chỉ định thứ tự lưu trữ của cả ba ma trận, trong khi đó là không cần thiết trong gemv cho các đối số vectơ vì nó sẽ là vô nghĩa.

Bên cạnh việc hỗ trợ các tùy chọn khác nhau, có các họ tối ưu hóa có thể được thực hiện trên gemm không áp dụng được cho gemv. Nếu bạn biết rằng bạn đang làm một sản phẩm ma trận-vector, bạn không muốn thư viện lãng phí thời gian để tìm ra trường hợp đó trước khi chuyển sang một đường dẫn mã được tối ưu hóa cho trường hợp đó; thay vào đó bạn muốn gọi trực tiếp.

+0

gemm sử dụng các đối số 'lda, ldb, ldc' là các bước/cột và với chúng, bạn có thể biểu diễn điều tương tự cho ma trận cột như tham số' inc' khi truyền vectơ. Vì vậy, nó kết thúc tương đương. – bluss

1

Tôi nghĩ rằng nó chỉ phù hợp với hệ thống phân cấp BLAS tốt hơn với mức 1 (vector-vector), cấp 2 (ma trận-vector) và cấp 3 (ma trận ma trận) thường trình. Và nó có thể tối ưu hóa tốt hơn một chút nếu bạn biết nó chỉ là một vectơ.

2

Khi bạn tối ưu hóa gemv và kỹ thuật khác nhau gemm áp dụng:

  • Đối với các hoạt động ma trận ma trận bạn đang sử dụng các thuật toán chặn. Kích thước khối tùy thuộc vào kích thước bộ nhớ cache.
  • Để tối ưu hóa sản phẩm ma trận-véc tơ bạn sử dụng, được gọi là các hoạt động cấp 1 hợp nhất (ví dụ: các sản phẩm chấm được hợp nhất hoặc axpy hợp nhất).

Hãy cho tôi biết nếu bạn muốn biết thêm chi tiết.

+0

là nó có thể nói, gemv() trong hầu hết các trường hợp có hiệu suất tốt hơn so với gemm()? – constructor

+0

Có, đối với một sản phẩm vectơ ma trận-vector thực tế có hiệu suất tốt hơn (giả sử bạn không so sánh việc triển khai gemv xấu với triển khai gemm tốt). Có nói rằng, với một hoạt động gemv bạn không bao giờ có thể đạt được hiệu suất cao nhất. Vì vậy, thủ thuật cho đại số tuyến tính số là tìm các biến thể thuật toán (được gọi là thuật toán khối) sử dụng các sản phẩm ma trận ma trận. –

Các vấn đề liên quan