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, LAPACKe outros fundamentais APIs, 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 MakeFiles que você pode ler para aprender como chamar Fortran/FORTRANrotinas individuais em um Cou 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: BLASe não LAPACKsão APIs 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 BLASe LAPACK. Portanto, se você vê muitas coisas estranhas ao usar esses APIs, é porque estava realmente chamando FORTRANrotinas em Cvez de Cbibliotecas e funções. ATLASe OpenBLASsão algumas das melhores implementações BLASe LACPACKaté 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 APIs 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 BLASe LAPACKem Cé aprender FORTRAN-Cprogramaçã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!