LAPACK - LAPACK

LAPACK (implementação de referência do Netlib)
LAPACK logo.svg
lançamento inicial 1992 ; 29 anos atrás ( 1992 )
Versão estável
3.10.0  Edite isso no Wikidata / 28 de junho de 2021 ; 3 meses atrás ( 28 de junho de 2021 )
Escrito em Fortran 90
Modelo Biblioteca de software
Licença BSD-novo
Local na rede Internet www .netlib .org / lapack / Edite isso no Wikidata

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, Drepresentam aritmética de ponto flutuante real respectivamente em precisão simples e dupla, enquanto Ce Zrepresentam 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ódigo DIé dado, a sub-rotina espera que um vector de comprimento ncontendo os elementos na diagonal, enquanto que quando o código GEé 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, SVdenota uma sub-rotina para resolver o sistema linear , enquanto Rdenota 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.

Tipos de matriz no esquema de nomenclatura LAPACK
Nome Descrição
BD matriz bidiagonal
DI matriz diagonal
GB matriz de banda geral
GE matriz geral (ou seja, assimétrica , em alguns casos retangular)
GG matrizes gerais, problema generalizado (ou seja, um par de matrizes gerais)
GT matriz tridiagonal geral
HB ( complexo ) Matriz de banda hermitiana
ELE ( complexo ) matriz hermitiana
HG matriz de Hessenberg superior , problema generalizado (ou seja, uma matriz de Hessenberg e uma triangular )
HP ( complexo ) Hermitiana , matriz de armazenamento empacotada
HS matriz de Hessenberg superior
OP matriz ortogonal ( real ) , matriz de armazenamento empacotada
OU matriz ortogonal ( real )
PB matriz simétrica ou banda definida positiva de matriz Hermitiana
PO matriz simétrica ou matriz hermitiana definida positiva
PP matriz simétrica ou matriz hermitiana definida positiva , matriz de armazenamento empacotada
PT matriz simétrica ou matriz tridiagonal definida positiva de Hermit
SB matriz de banda simétrica ( real )
SP simétrica , matriz de armazenamento embalado
ST matriz ( real ) simétrica matriz tridiagonal
SY matriz simétrica
tb matriz de banda triangular
TG matrizes triangulares , problema generalizado (ou seja, um par de matrizes triangulares )
TP triangular , matriz de armazenamento embalado
TR matriz triangular (ou em alguns casos quase triangular)
TZ matriz trapezoidal
UN matriz unitária ( complexa )
ACIMA ( Complexo ) unitária , matriz de armazenamento embalado

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:

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

Referências

Leitura adicional

links externos