Quelle est la relation entre BLAS, LAPACK et d'autres bibliothèques d'algèbre linéaire?


26

J'ai étudié les bibliothèques d'algèbre linéaire C ++ pour un projet sur lequel je travaillais. Quelque chose que je n'ai pas encore saisi est la connexion de BLAS et LAPACK à d'autres bibliothèques d'algèbre linéaire.

En parcourant cet article sur les bibliothèques d'algèbre linéaire, j'ai trouvé intéressant que:

  • certaines bibliothèques sont indépendantes de BLAS et LAPACK
  • certains nécessitent BLAS et LAPACK
  • certains ont des interfaces optionnelles avec BLAS et LAPACK
  • et, si je comprends bien, vous pouvez utiliser BLAS et LAPACK pour résoudre directement les problèmes d'algèbre linéaire

Je peux imaginer que certaines bibliothèques sont simplement des interfaces C ++ vers les bibliothèques BLAS et LAPACK écrites en C et Fortran et d'autres ont implémenté leurs propres routines de substitution, mais

  1. Quelles sont les implications des interfaces optionnelles avec BLAS et LAPACK? Que perdez-vous en vous retirant et que font les bibliothèques à la place?

  2. L'une des bibliothèques fournit-elle plus qu'une simple interface? Par exemple, UMFPACK est écrit en C et possède des interfaces facultatives avec BLAS et LAPACK. Que peut faire UMFPACK (ou d'autres bibliothèques) que BLAS et LAPACK ne peuvent pas faire seuls?

Réponses:


15

Pour autant que je sache, Lapack est la seule implémentation accessible au public d'un certain nombre d'algorithmes (eigensolver dense non symétrique, eigensolver pseudo-quadratique à symétrie temporelle, Jacobi SVD rapide). La plupart des bibliothèques qui ne dépendent pas de BLAS + Lapack ont ​​tendance à prendre en charge des opérations très primitives telles que la multiplication matricielle, la factorisation LU et la décomposition QR. Lapack contient certains des algorithmes les plus sophistiqués pour les calculs matriciels denses qui, je ne pense pas, sont implémentés ailleurs.

Donc pour répondre à vos questions (au moins partiellement),

  1. En désactivant BLAS / Lapack, vous ne manquez généralement pas de fonctionnalité (sauf si l'interface optionnelle a été conçue de manière à ce qu'il n'y ait pas d'implémentation de remplacement, ce qui est rare). Si vous vouliez faire des opérations très sophistiquées, ces autres bibliothèques ne l'implémentent probablement pas de toute façon. Étant donné que BLAS peut être hautement adapté à votre architecture, vous pourriez manquer des accélérations énormes (un écart de vitesse d'un ordre de grandeur n'est pas inconnu).

  2. Vous mentionnez UMFPACK, qui est pour la factorisation à matrice clairsemée. BLAS / Lapack ne s'intéresse qu'aux matrices denses. UMFPACK à un certain niveau doit travailler sur des problèmes denses de taille moyenne, ce qu'il peut faire en utilisant des implémentations personnalisées ou en appelant BLAS / Lapack. Ici, la différence ne concerne que la vitesse.

Si la vitesse est très préoccupante, essayez d'utiliser une bibliothèque qui prend en charge les liaisons BLAS / Lapack en option et utilisez-les à la fin lorsque vous voulez que les choses soient plus rapides.


3
  1. De bonnes implémentations des routines BLAS et LAPACK (surtout les routines BLAS) peuvent être beaucoup plus rapides que les implémentations directes naïves des mêmes fonctions. Cependant, les implémentations efficaces incluent généralement des optimisations très spécifiques à l'ordinateur particulier sur lequel vous exécutez. Même différents modèles de processeurs du même fabricant (par exemple les processeurs Intel x86-64) nécessitent souvent un code très différent pour obtenir de bonnes performances. En fournissant des bibliothèques BLAS / LAPACK optimisées à un progiciel, vous pouvez généralement accélérer le code par rapport à l'utilisation de routines non optimisées. Cependant, puisque de nombreux utilisateurs occasionnels peuvent ne pas avoir l'expertise nécessaire pour installer des routines optimisées, il est courant de fournir également une option pour utiliser des routines génériques d'algèbre linéaire non optimisées.

  2. UMFPACK est une bibliothèque de routines d'algèbre linéaire sur des matrices clairsemées (matrices avec une proportion élevée de 0 entrées). Il peut utiliser BLAS / LAPACK pour gérer des matrices denses (ou des blocs denses dans des matrices) qu'il rencontre.


1

Version courte: ce sont des bibliothèques écrites principalement en Fortran qui sont utilisées pour les opérations numériques dans de nombreuses langues - même certains programmes C en raison de leur vitesse et de leurs optimisations; Ils sont également quelques-unes des seules implémentations open source de nombreux algorithmes :)

Vous n'êtes pas obligé d'utiliser des bibliothèques à moins qu'elles aient des dépendances; iirc la plupart d'entre elles sont assez indépendantes, et vous pouvez toujours écrire vos propres fonctions mathématiques, telles que celles mieux vectorisées pour votre architecture


1
La plupart des routines BLAS et LAPACK optimisées ont depuis longtemps cessé d'être écrites en Fortran. Les routines BLAS et LAPACK les plus rapides ne sont généralement pas celles téléchargées depuis netlib. Les fournisseurs de la plupart des processeurs vendent ou distribuent des versions optimisées du BLAS et du LAPACK conçues spécifiquement pour leurs puces.
Bill Barth

Désolé je veux dire ceux distribués sur le net - les généraux; les puces spécifiques à la puce ne sont bien sûr pas aussi portables: c'est-à-dire que certaines astuces vectorielles d'Intel ne fonctionnent pas si bien sur les puces AMD, c'est pourquoi elles ont un avertissement sur la bibliothèque. Et je suis sûr que ceux-ci sont renommés sous un autre nom non?
Eiyrioü von Kauyf

@BillBarth BLAS, mais êtes-vous sûr que les routines LAPACK sont également réécrites? Afaik tant que BLAS 3 est très performant (ou multithread) alors tout va bien.
stali

1
Je pense au BLAS et au LAPACK comme les noms des fonctions et de l'interface. Il existe de nombreuses implémentations différentes (ACML, ESSL, MKL, ATLAS, etc.).
Bill Barth

1
ce ne sont que des interfaces ... comme ATLAS, elles ne sont pas la véritable bibliothèque.
Eiyrioü von Kauyf
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.