Tempo atrás, quando comecei a fazer alguma álgebra linear C
, ele veio a mim como uma surpresa para ver que há tão poucos tutoriais para BLAS
, LAPACK
e outros fundamentais API
s, apesar do fato de que eles são de alguma forma os pilares de muitas outras bibliotecas. Por essa razão eu comecei a recolher todos os exemplos / tutoriais que eu poderia encontrar por toda a internet para BLAS
, CBLAS
, LAPACK
, CLAPACK
, LAPACKE
, ATLAS
, OpenBLAS
... no presente repo Github .
Bem, devo avisar que, como engenheiro mecânico, tenho pouca experiência em gerenciar um repositório git ou GitHub. Primeiro parecerá uma bagunça completa para vocês. No entanto, se você conseguir superar a estrutura confusa, encontrará todos os tipos de exemplos e instruções que podem ajudar. Eu tentei a maioria deles, para ter certeza de que eles compilam. E os que não compilam eu mencionei. Eu modifiquei muitos deles para serem compiláveis com GNU compilers
( gcc
, g++
e gfortran
). Fiz MakeFile
s que você pode ler para aprender como chamar Fortran/FORTRAN
rotinas individuais em um C
ou C++
programa. Também coloquei algumas instruções de instalação para mac e linux (desculpe pessoal do windows!). Eu também fiz algunsbash
.sh
arquivos para compilação automática de algumas dessas bibliotecas.
Mas indo para sua outra pergunta: BLAS
e não LAPACK
são API
s específicos SDK
. Eles são apenas uma lista de especificações ou extensões de idioma, em vez de implementações ou bibliotecas. Com isso dito, existem implementações originais do Netlib in FORTRAN 77
, às quais a maioria das pessoas se refere (confusamente!) Ao falar sobre BLAS
e LAPACK
. Portanto, se você vê muitas coisas estranhas ao usar esses API
s, é porque estava realmente chamando FORTRAN
rotinas em C
vez de C
bibliotecas e funções. ATLAS
e OpenBLAS
são algumas das melhores implementações BLAS
e LACPACK
até onde eu sei. Eles estão em conformidade com o original API
, embora, ao meu conhecimento, sejam implementados emC/C++
a partir do zero (não tenho certeza!). Existem implementações GPGPU dos API
s usando OpenCL
: CLBlast , clBLAS , clMAGMA , ArrayFire e ViennaCL para mencionar alguns. Também existem implementações específicas de fornecedor otimizadas para hardware ou plataforma específica, o que desencorajo fortemente qualquer pessoa a usá-las.
Minha recomendação para quem quer aprender usando BLAS
e LAPACK
em C
é aprender FORTRAN-C
programação mista em primeiro lugar. O primeiro capítulo do repositório mencionado é dedicado a esse assunto e lá colecionei muitos exemplos diferentes.
PS: Eu tenho trabalhado no ramo dev do repositório de tempos em tempos. Parece um pouco menos bagunçado!