LAPACK - LAPACK
lançamento inicial | 1992 |
---|---|
Versão estável | |
Escrito em | Fortran 90 |
Modelo | Biblioteca de software |
Licença | BSD-novo |
Local na rede Internet |
www |
LAPACK (" L inear A lgebra Pack age") é uma biblioteca de software padrão para álgebra linear numérica . Ele fornece rotinas para resolver sistemas de equações lineares e mínimos quadrados lineares , problemas de autovalor e decomposição de valor singular . Ele também inclui rotinas para implementar as fatorações de matriz associadas , como LU , QR , Cholesky e decomposição de Schur . O LAPACK foi originalmente escrito em FORTRAN 77 , mas foi movido para o Fortran 90 na versão 3.2 (2008). As rotinas lidam com matrizes reais e complexas com precisão simples e dupla .
LAPACK foi projetado como o sucessor das equações lineares e rotinas de mínimos quadrados lineares de LINPACK e as rotinas de autovalores de EISPACK . LINPACK , escrito nas décadas de 1970 e 1980, foi projetado para ser executado nos então modernos computadores vetoriais com memória compartilhada. O LAPACK, em contraste, foi projetado para explorar efetivamente os caches em arquiteturas modernas baseadas em cache e, portanto, pode executar ordens de magnitude mais rápido que o LINPACK em tais máquinas, dada uma implementação BLAS bem ajustada . LAPACK também foi estendido para rodar em sistemas de memória distribuída em pacotes posteriores, como ScaLAPACK e PLAPACK.
O Netlib LAPACK é licenciado sob uma licença estilo BSD de três cláusulas , uma licença permissiva de software livre com poucas restrições.
Esquema de nomenclatura
As sub-rotinas no LAPACK têm uma convenção de nomenclatura que torna os identificadores muito compactos. Isso foi necessário porque os primeiros padrões Fortran suportavam apenas identificadores de até seis caracteres, então os nomes tiveram que ser encurtados para caber neste limite.
Um nome de sub-rotina LAPACK está no formato pmmaaa
, onde:
-
p
é um código de uma letra que denota o tipo de constantes numéricas usadas.S
,D
representam aritmética de ponto flutuante real respectivamente em precisão simples e dupla, enquantoC
eZ
representam aritmética complexa com precisão respectivamente simples e dupla. A versão mais recente, LAPACK95, usa sub-rotinas genéricas para superar a necessidade de especificar explicitamente o tipo de dados. -
mm
é um código de duas letras que denota o tipo de matriz esperada pelo algoritmo. Os códigos para os diferentes tipos de matrizes são relatados a seguir; os dados reais são armazenados em um formato diferente, dependendo do tipo específico; por exemplo, quando o códigoDI
é dado, a sub-rotina espera que um vector de comprimenton
contendo os elementos na diagonal, enquanto que quando o códigoGE
é dado, a sub-rotina espera que um n × n matriz que contém as entradas da matriz. -
aaa
é um código de uma a três letras que descreve o algoritmo real implementado na sub-rotina, por exemplo,SV
denota uma sub-rotina para resolver o sistema linear , enquantoR
denota uma atualização de posto 1.
Por exemplo, a sub-rotina para resolver um sistema linear com uma matriz geral (não estruturada) usando aritmética real de dupla precisão é chamada DGESV
.
Detalhes sobre este esquema podem ser encontrados na seção Esquema de nomenclatura no Guia do usuário do LAPACK.
Use com outras linguagens de programação
Muitos ambientes de programação hoje suportam o uso de bibliotecas com vinculação C. As rotinas LAPACK podem ser usadas como funções C se algumas restrições forem observadas.
Vários vínculos de linguagem alternativos também estão disponíveis:
- Armadillo para C ++
- IT ++ para C ++
- LAPACK ++ para C ++
- Lacaml para OCaml
- CLapack para C
- SciPy para Python
- Gonum for Go
- NLapack para .NET
Implementações
Assim como no BLAS, o LAPACK é freqüentemente bifurcado ou reescrito para fornecer melhor desempenho em sistemas específicos. Algumas das implementações são:
- Acelerar
- Estrutura da Apple para macOS e iOS , que inclui versões ajustadas de BLAS e LAPACK.
- Netlib LAPACK
- O LAPACK oficial.
- Netlib ScaLAPACK
- LAPACK escalável (multicore), desenvolvido com base no PBLAS .
- Intel MKL
- Rotinas de matemática da Intel para suas CPUs x86.
- OpenBLAS
- Reimplementação de código aberto de BLAS e LAPACK.
Como o LAPACK usa o BLAS para o levantamento de peso, apenas vincular a uma implementação do BLAS mais bem ajustada geralmente melhora o desempenho o suficiente. Como resultado, o LAPACK não é reimplementado com tanta frequência quanto o BLAS.
Projetos semelhantes
Esses projetos fornecem uma funcionalidade semelhante ao LAPACK, mas a interface principal é diferente daquela do LAPACK:
- Libflame
- Uma densa biblioteca de álgebra linear. Possui um invólucro compatível com LAPACK. Pode ser usado com qualquer BLAS, embora BLIS seja a implementação preferida.
- Eigen
- Uma biblioteca de cabeçalhos para álgebra linear. Tem uma implementação BLAS e uma LAPACK parcial para compatibilidade.
- MAGMA
- O projeto Matrix Algebra on GPU and Multicore Architectures (MAGMA) desenvolve uma densa biblioteca de álgebra linear semelhante ao LAPACK, mas para arquiteturas heterogêneas e híbridas, incluindo sistemas multicore acelerados com GPGPUs .
- PLASMA
- O projeto de Álgebra Linear Paralela para Arquiteturas Escaláveis de Vários Núcleos (PLASMA) é uma substituição moderna do LAPACK para arquiteturas de vários núcleos. PLASMA é um framework de software para o desenvolvimento de operações assíncronas e recursos de agendamento fora de ordem com um agendador de tempo de execução chamado QUARK que pode ser usado para qualquer código que expresse suas dependências com um gráfico acíclico direcionado .
Veja também
- Lista de bibliotecas numéricas
- Biblioteca do Kernel Matemático (MKL)
- Biblioteca Numérica NAG
- SLATEC , uma biblioteca FORTRAN 77 de rotinas matemáticas e estatísticas
- QUADPACK , uma biblioteca FORTRAN 77 para integração numérica
Referências
Leitura adicional
- Anderson, E .; Bai, Z .; Bischof, C .; Blackford, S .; Demmel, J .; Dongarra, J .; Du Croz, J .; Greenbaum, A .; Hammarling, S .; McKenney, A .; Sorensen, D. (1999). Guia do usuário do LAPACK (terceira edição). Filadélfia, PA: Society for Industrial and Applied Mathematics. ISBN 0-89871-447-8.