Não entendo como BLAS, LAPACK e ATLAS estão relacionados e como devo usá-los juntos! Venho pesquisando todos os manuais e tenho uma idéia geral do BLAS e LAPACK e como usá-los com os poucos exemplos que encontro, mas não consigo encontrar nenhum exemplo real usando o ATLAS para ver como ele está relacionado. Estes dois.
Estou tentando fazer algum trabalho de baixo nível em matrizes e meu idioma principal é C. Primeiro, eu queria usar o GSL, mas diz que se você deseja o melhor desempenho, deve usar o BLAS e o ATLAS. Existe alguma boa página da Web que dê alguns bons exemplos de como usá-los (em C) todos juntos? Em outras palavras, estou procurando um tutorial sobre como usar esses três (ou qualquer subconjunto deles!). Em resumo, estou confuso!
Respostas:
BLAS é uma coleção de operações aritméticas de matriz e vetor de baixo nível (“multiplique um vetor por um escalar”, “multiplique duas matrizes e adicione a uma terceira matriz”, etc ...).
LAPACK é uma coleção de operações de álgebra linear de nível superior. Coisas como fatorações matriciais (LU, LLt, QR, SVD, Schur, etc) que são usadas para fazer coisas como “encontrar os valores próprios de uma matriz” ou “encontrar os valores singulares de uma matriz” ou “resolver um sistema linear ”. O LAPACK é construído sobre o BLAS; muitos usuários do LAPACK usam apenas as interfaces LAPACK e nunca precisam estar cientes do BLAS. O LAPACK geralmente é compilado separadamente do BLAS e pode usar qualquer implementação BLAS altamente otimizada disponível.
O ATLAS é uma implementação razoavelmente boa e portátil das interfaces BLAS, que também implementa algumas das operações LAPACK mais usadas.
O que você deve usar depende um pouco dos detalhes do que você está tentando fazer e da plataforma que está usando. Você não errará muito com "use ATLAS + LAPACK", no entanto.
fonte
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 paraBLAS
,LAPACK
e outros fundamentaisAPI
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 paraBLAS
,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++
egfortran
). FizMakeFile
s que você pode ler para aprender como chamarFortran/FORTRAN
rotinas individuais em umC
ouC++
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ãoLAPACK
sãoAPI
s específicosSDK
. 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 inFORTRAN 77
, às quais a maioria das pessoas se refere (confusamente!) Ao falar sobreBLAS
eLAPACK
. Portanto, se você vê muitas coisas estranhas ao usar essesAPI
s, é porque estava realmente chamandoFORTRAN
rotinas emC
vez deC
bibliotecas e funções.ATLAS
eOpenBLAS
são algumas das melhores implementaçõesBLAS
eLACPACK
até onde eu sei. Eles estão em conformidade com o originalAPI
, embora, ao meu conhecimento, sejam implementados emC/C++
a partir do zero (não tenho certeza!). Existem implementações GPGPU dosAPI
s usandoOpenCL
: 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
eLAPACK
emC
é aprenderFORTRAN-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!
fonte
O ATLAS já está bastante desatualizado. Foi desenvolvido em um momento em que se pensava que otimizar o BLAS para várias plataformas estava além da capacidade dos seres humanos e, como resultado, a geração automática e o ajuste automático eram o caminho a seguir.
No início dos anos 2000, surgiu Kazushige Goto, que mostrou como implementações altamente eficientes podem ser codificadas manualmente. Você pode apreciar um artigo interessante no New York Times: https://www.nytimes.com/2005/11/28/technology/writing-the-fastest-code-by-hand-for-fun-a-human- computer-keep.html .
As de Kazushige, por um lado, tiveram melhores insights sobre a teoria por trás das implementações de alto desempenho da multiplicação matriz-matriz e, por outro lado, as projetaram melhor. Sua abordagem, que nas CPUs atuais geralmente tem o melhor desempenho, não está no espaço de pesquisa que o ATLAS ajusta automaticamente. Portanto, o ATLAS é inerentemente inferior. A implementação do BLAS por Kazushige ficou conhecida como GotoBLAS. Foi bifurcado como o OpenBLAS quando ele ingressou na indústria.
As idéias por trás do GotoBLAS foram refatoradas para uma nova implementação, a estrutura BLIS (Library Instantiation Software) do tipo BLAS ( https://github.com/flame/blis ), que implementa os mesmos algoritmos, mas estrutura o código para que menos precisa ser implementado de forma personalizada para uma nova arquitetura. BLIS é codificado em C.
O que esta discussão mostra é que existem muitas implementações do BLAS. Os próprios BLAS são um padrão de fato para a interface. ATLAS já foi o estado da arte. Não é mais.
fonte
Tanto quanto sei, e depois de trabalhar no repositório ATLAS, parece que ele inclui uma reimplementação do BLAS no C. Há um pouco mais do que isso, mas espero que ele responda à pergunta.
fonte