Beberapa waktu yang lalu, ketika saya mulai mengerjakan beberapa aljabar linier C
, saya terkejut melihat ada begitu sedikit tutorial untuk BLAS
, LAPACK
dan hal-hal mendasar lainnya API
, terlepas dari kenyataan bahwa mereka bagaimanapun juga merupakan landasan dari banyak perpustakaan lainnya. Untuk alasan itu saya mulai mengumpulkan semua contoh / tutorial saya bisa menemukan seluruh internet untuk BLAS
, CBLAS
, LAPACK
, CLAPACK
, LAPACKE
, ATLAS
, OpenBLAS
... di repo Github ini .
Yah, saya harus memperingatkan Anda bahwa sebagai seorang insinyur mesin saya memiliki sedikit pengalaman dalam mengelola repositori git atau GitHub seperti itu. Ini pertama-tama akan tampak seperti kekacauan total bagi kalian. Namun jika Anda berhasil mengatasi struktur yang berantakan, Anda akan menemukan semua jenis contoh dan instruksi yang mungkin bisa membantu. Saya telah mencoba sebagian besar dari mereka, untuk memastikan mereka dapat dikompilasi. Dan yang tidak dapat dikompilasi telah saya sebutkan. Saya telah memodifikasi banyak dari mereka agar dapat dikompilasi dengan GNU compilers
( gcc
, g++
dan gfortran
). Saya telah membuat MakeFile
yang dapat Anda baca untuk mempelajari bagaimana Anda dapat memanggil Fortran/FORTRAN
rutinitas individu dalam sebuah C
atau C++
program. Saya juga telah memasukkan beberapa instruksi instalasi untuk mac dan linux (maaf windows guys!). Saya juga sudah membuatnyabash
.sh
file untuk kompilasi otomatis dari beberapa pustaka ini.
Tapi pergi ke pertanyaan Anda yang lain: BLAS
dan LAPACK
agak API
s tidak spesifik SDK
. Mereka hanyalah daftar spesifikasi atau ekstensi bahasa daripada implementasi atau pustaka. Dengan mengatakan bahwa, ada original implementasi oleh Netlib di FORTRAN 77
, yang kebanyakan orang merujuk (membingungkan!) Ketika berbicara tentang BLAS
dan LAPACK
. Jadi jika Anda melihat banyak hal aneh saat menggunakan ini API
adalah karena Anda sebenarnya memanggil FORTRAN
rutinitas, C
bukan di C
pustaka dan fungsi. ATLAS
dan OpenBLAS
beberapa implementasi terbaik BLAS
dan LACPACK
sejauh yang saya tahu. Mereka sesuai dengan aslinya API
, meskipun, menurut pengetahuan saya, mereka diterapkanC/C++
dari awal (tidak yakin!). Ada implementasi GPGPU yang API
menggunakan OpenCL
: CLBlast , clBLAS , clMAGMA , ArrayFire dan ViennaCL untuk menyebutkan beberapa. Ada juga implementasi khusus vendor yang dioptimalkan untuk perangkat keras atau platform tertentu, yang saya sangat tidak menyarankan siapa pun untuk menggunakannya.
Rekomendasi saya untuk siapa saja yang ingin belajar menggunakan BLAS
dan LAPACK
dalam C
adalah belajar FORTRAN-C
pemrograman campuran terlebih dahulu. Bab pertama dari repo yang disebutkan didedikasikan untuk masalah ini dan di sana saya telah mengumpulkan banyak contoh berbeda.
PS Saya telah mengerjakan cabang dev dari repositori dari waktu ke waktu. Sepertinya tidak terlalu berantakan!