Trong khi trước đây, khi tôi bắt đầu làm một số đại số tuyến tính trong C
, nó đến với tôi như một bất ngờ cho thấy có rất ít hướng dẫn cho BLAS
, LAPACK
và nền tảng khác API
s, mặc dù thực tế rằng họ là bằng cách nào đó những nền tảng của nhiều thư viện khác. Vì lý do đó, tôi bắt đầu thu thập tất cả các ví dụ / hướng dẫn tôi có thể tìm thấy tất cả qua internet cho BLAS
, CBLAS
, LAPACK
, CLAPACK
, LAPACKE
, ATLAS
, OpenBLAS
... trong repo Github này .
Chà, tôi nên cảnh báo bạn rằng là một kỹ sư cơ khí, tôi có ít kinh nghiệm trong việc quản lý kho git hoặc GitHub như vậy. Đầu tiên nó sẽ có vẻ như là một mớ hỗn độn với các bạn. Tuy nhiên, nếu bạn xoay sở để vượt qua cấu trúc lộn xộn, bạn sẽ tìm thấy tất cả các loại ví dụ và hướng dẫn có thể giúp ích. Tôi đã thử hầu hết trong số họ, để chắc chắn rằng họ biên dịch. Và những cái không biên dịch tôi đã đề cập. Tôi đã sửa đổi nhiều trong số họ làm compilable với GNU compilers
( gcc
, g++
và gfortran
). Tôi đã thực hiện MakeFile
s mà bạn có thể đọc để tìm hiểu làm thế nào bạn có thể gọi cá nhân Fortran/FORTRAN
thói quen trong một C
hoặc C++
chương trình. Tôi cũng đã đặt một số hướng dẫn cài đặt cho mac và linux (xin lỗi các bạn windows!). Tôi cũng đã làm một sốbash
.sh
các tập tin để tự động biên dịch một số các thư viện này.
Nhưng đi đến câu hỏi khác của bạn: BLAS
và LAPACK
khá API
là không cụ thể SDK
. Chúng chỉ là một danh sách các thông số kỹ thuật hoặc phần mở rộng ngôn ngữ chứ không phải là một triển khai hoặc thư viện. Với những gì đã nói, có những triển khai ban đầu bằng cách Netlib trong FORTRAN 77
, mà hầu hết mọi người tham khảo (mức gây nhầm lẫn!) Khi nói về BLAS
và LAPACK
. Vì vậy, nếu bạn thấy nhiều điều kỳ lạ khi sử dụng những điều này API
là bởi vì bạn thực sự đang gọi FORTRAN
các thói quen trong C
chứ không phải là C
thư viện và các chức năng. ATLAS
và OpenBLAS
là một số trong những triển khai tốt nhất BLAS
và LACPACK
theo như tôi biết. Chúng phù hợp với bản gốc API
, mặc dù, theo hiểu biết của tôi, chúng được thực hiện trênC/C++
từ đầu (không chắc chắn!). Có các triển khai GPGPU của các API
s bằng cách sử dụng OpenCL
: CLBlast , clBLAS , clMAGMA , ArrayFire và ViennaCL để đề cập đến một số. Ngoài ra còn có các triển khai cụ thể của nhà cung cấp được tối ưu hóa cho phần cứng hoặc nền tảng cụ thể, điều mà tôi không khuyến khích bất kỳ ai sử dụng chúng.
Đề nghị của tôi cho bất cứ ai muốn học sử dụng BLAS
và LAPACK
trong C
là học FORTRAN-C
lập trình hỗn hợp trước. Chương đầu tiên của repo được đề cập là dành riêng cho vấn đề này và ở đó tôi đã thu thập được nhiều ví dụ khác nhau.
PS Tôi đã làm việc trên nhánh dev của kho lưu trữ theo thời gian. Có vẻ hơi ít lộn xộn!