Các thư viện GPU được sử dụng cho các hoạt động Đại số tuyến tính


8

Tôi đang tìm kiếm các thư viện GPU để tăng tốc mã mà tôi có, các khu vực "hiệu suất cao" chính có phân tách giá trị số ít, hệ số QR và giá trị Eigen, tính toán Eigenvector. Tôi đã xem qua trang web của Nvidia trên các công cụ của nó như CuBLAS, Magma, v.v., nhưng tôi không muốn viết mã bằng Cuda.

Thật tuyệt vời nếu có bất kỳ thư viện nào ngoài đó tôi chỉ có thể "gọi" từ mã C chính của mình cho những thứ như SVD, QR, v.v., và việc tính toán sẽ được thực hiện trên GPU. Vì vậy, tóm lại, tôi có một mã C bình thường, trong đó các hoạt động đại số tuyến tính chuyên sâu được tăng tốc. Có ai biết về một thư viện mã nguồn mở (tốt nhất) có thể làm điều này không?

Cảm ơn.

Câu trả lời:


8

Đối với [CU] BLAS, có một trình bao bọc được gọi là 'thunking' trong bộ công cụ CUDA (src / fortran_thunking. {C, h}) lấy con trỏ từ bộ nhớ CPU và thực hiện tất cả việc cấp phát / sao chép GPU cho bạn. Bạn có thể cắm nó vào mã của mình bằng các câu lệnh tiền xử lý như

#define ZGEMV CUBLAS_ZGEMV
#define ZGEMM CUBLAS_ZGEMM
...

Đối với LAPACK, Magma có hầu hết các giao diện phía CPU, nếu không phải là tất cả, về chức năng của nó (chúng có xu hướng được triển khai trước), vì vậy, giống như với việc đánh cắp, bạn chỉ cần trao đổi các cuộc gọi. Trong một số trường hợp, các yêu cầu về giao diện hoặc không gian làm việc có thể hơi khác một chút, vì vậy bạn sẽ muốn cẩn thận hơn một chút so với việc sử dụng.

Từ chối trách nhiệm cần thiết là không có bữa ăn trưa miễn phí: nếu bạn không sẵn sàng xử lý các bản sao bộ nhớ một cách rõ ràng, hiệu suất của bạn sẽ bị giới hạn trong các vấn đề lớn với cường độ tính toán cao (flops / byte). Nếu các vấn đề của bạn nhỏ và / hoặc theo đợt, tôi khuyên bạn nên viết một số mã kiểm soát để truyền phát các bản sao bộ nhớ và các cuộc gọi thư viện để chồng lấp các bản sao bộ nhớ và tính toán. Đây thực sự không phải là CUDA, nhiều như API, vì bạn không cần phải viết hạt nhân. Cả CUBLAS và Magma đều cung cấp các lệnh gọi API để chỉ định luồng.


4

Karl Rupp, người viết ViennaCL ( http://viennacl.sourceforge.net/ ) và trên Sci StackEx tính toán, có thể có thể gọi điện ở đây - thư viện của họ có nhiều phân tách ma trận bao gồm SVD, LU, eigendecomp, v.v. một thư viện chỉ có tiêu đề và nên chơi tốt với mã C ++ (không chắc chắn về mã C).

Một ví dụ về nó được sử dụng với các yếu tố LU - http://viennacl.sourceforge.net/viennacl-examples-dense-matrix.html .


Xem cho mô tả trước đó của mình. scicomp.stackexchange.com/questions/376/ mài
Jesse Chan

Chúng tôi sắp mở ViennaCL cho đến các ngôn ngữ khác ngoài C ++. Giao diện C thuần túy cho các hoạt động BLAS sẽ trở nên khả dụng với phiên bản 1.5.0 sắp tới và nhiều thuật toán nhân tố hóa với 1.6.0.
Karl Rupp

3

Bạn có thể muốn xem thư viện CULA , nơi thực hiện một số thao tác LAPACK / BLAS phổ biến nhất ở độ chính xác đơn (phiên bản miễn phí) và độ chính xác kép (phiên bản đầy đủ, tức là phiên bản trả tiền).

Thư viện hoạt động như một sự thay thế trực tiếp cho LAPACK / BLAS, vì vậy nếu bạn đã sử dụng các chức năng này trong mã gốc của mình, bạn không cần phải thay đổi bất cứ điều gì.

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.