Qual è la relazione tra BLAS, LAPACK e altre librerie di algebra lineare?


26

Ho cercato le librerie di algebra lineare C ++ per un progetto a cui stavo lavorando. Qualcosa su cui ancora non ho alcuna comprensione è la connessione di BLAS e LAPACK ad altre librerie di algebra lineare.

Guardando questo articolo sulle librerie di algebra lineare ho trovato interessante che:

  • alcune librerie sono indipendenti da BLAS e LAPACK
  • alcuni richiedono BLAS e LAPACK
  • alcuni hanno interfacce opzionali per BLAS e LAPACK
  • e, a quanto ho capito, puoi usare BLAS e LAPACK per risolvere direttamente i problemi di algebra lineare

Posso immaginare che alcune librerie siano semplicemente interfacce C ++ per le librerie BLAS e LAPACK scritte in C e Fortran e altre abbiano implementato le proprie routine sostitutive, ma

  1. Quali sono le implicazioni delle interfacce opzionali per BLAS e LAPACK? Che cosa stai perdendo cancellando, e cosa stanno facendo invece le biblioteche?

  2. Qualcuna delle biblioteche fornisce più di una semplice interfaccia? Ad esempio, UMFPACK è scritto in C e ha interfacce opzionali per BLAS e LAPACK. Cosa può fare UMFPACK (o altre librerie) che BLAS e LAPACK non possono fare da soli?

Risposte:


15

Per quanto ne so, Lapack è l'unica implementazione pubblicamente disponibile di una serie di algoritmi (eigensolver denso non simmetrico, eigensolver simmetrico pseudo-quadratico a tempo, SVD Jacobi veloce). La maggior parte delle librerie che non si basano su BLAS + Lapack tendono a supportare operazioni molto primitive come la moltiplicazione di matrici, la fattorizzazione LU e la decomposizione QR. Lapack contiene alcuni degli algoritmi più sofisticati per i calcoli a matrice densa che non credo siano implementati altrove.

Quindi, per rispondere alle tue domande (almeno in parte),

  1. Disattivando BLAS / Lapack, in genere non manchi la funzionalità (a meno che l'interfaccia opzionale non sia stata progettata in modo tale da non avere un'implementazione sostitutiva, il che è raro). Se volevi fare operazioni molto sofisticate, quelle altre librerie probabilmente non le implementano da sole. Poiché BLAS può essere ottimizzato per la tua architettura, potresti perdere grandi accelerazioni (un ordine di differenza di velocità di grandezza non è inaudito).

  2. Menzionate UMFPACK, che è per la fattorizzazione a matrice sparsa. BLAS / Lapack si preoccupa solo delle matrici dense. UMFPACK ad un certo livello deve lavorare su problemi densi di medie dimensioni, cosa che può fare usando implementazioni personalizzate o chiamando BLAS / Lapack. Qui la differenza è solo nella velocità.

Se la velocità è di grande preoccupazione, prova a utilizzare una libreria che supporti i collegamenti BLAS / Lapack opzionali e usali alla fine quando vuoi le cose più velocemente.


3
  1. Le buone implementazioni delle routine BLAS e LAPACK (soprattutto le routine BLAS) possono essere molto più veloci delle ingenue implementazioni dirette delle stesse funzioni. Tuttavia, implementazioni efficienti in genere includono ottimizzazioni molto specifiche per il particolare computer su cui stai eseguendo. Anche diversi modelli di processori dello stesso produttore (ad es. Processori Intel x86-64) richiedono spesso un codice molto diverso per ottenere buone prestazioni. Fornendo librerie BLAS / LAPACK ottimizzate a un pacchetto software, in genere è possibile accelerare il codice rispetto all'utilizzo di routine non ottimizzate. Tuttavia, poiché molti utenti occasionali potrebbero non avere le competenze per installare routine ottimizzate, è comune fornire anche un'opzione per utilizzare routine di algebra lineare non ottimizzate generiche.

  2. UMFPACK è una libreria di routine per l'algebra lineare su matrici sparse (matrici con un'alta percentuale di 0 voci). Può usare BLAS / LAPACK per gestire matrici dense (o blocchi densi all'interno di matrici) che incontra.


1

Versione breve: sono librerie scritte principalmente in Fortran che vengono utilizzate per operazioni numeriche in molte lingue - anche alcuni programmi in C a causa della loro velocità e ottimizzazioni; Sono anche alcune delle uniche implementazioni open source di molti algoritmi :)

Non è necessario utilizzare le librerie a meno che non abbiano dipendenze; la maggior parte di questi sono piuttosto indipendenti e puoi sempre scrivere le tue funzioni matematiche, come quelle vettorializzate migliori per la tua architettura


1
La maggior parte delle routine BLAS e LAPACK ottimizzate ha smesso da tempo di scrivere Fortran. Le routine BLAS e LAPACK più veloci non sono generalmente quelle scaricate da netlib. I fornitori della maggior parte dei processori vendono o distribuiscono versioni ottimizzate di BLAS e LAPACK progettate appositamente per i loro chip.
Bill Barth,

Scusate intendo quelle distribuite in rete - quelle generali; quelli specifici del chip ovviamente non sono portatili: ad esempio alcuni dei trucchi vettoriali di Intel non funzionano così bene sui chip AMD, motivo per cui hanno una dichiarazione di non responsabilità sulla libreria. E sono abbastanza sicuro che quelli siano rinominati con un altro nome no?
Eiyrioü von Kauyf,

@BillBarth BLAS sicuramente ma sei sicuro che anche le routine LAPACK vengano riscritte? Dopo che BLAS 3 è altamente performante (o multithread), allora va tutto bene.
Stali,

1
Penso a BLAS e LAPACK come ai nomi delle funzioni e dell'interfaccia. Esistono diverse implementazioni (ACML, ESSL, MKL, ATLAS, ecc.).
Bill Barth,

1
quelle sono solo interfacce ... come ATLAS non sono la vera libreria.
Eiyrioü von Kauyf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.