Domanda

Ho un progetto scritto in C # dove devo fare varie operazioni algebriche lineari su matrici (come la fattorizzazione LU).

Poiché il programma è principalmente un prototipo creato per confermare una teoria, sarà sufficiente un'implementazione C # (rispetto a una forse C ++ più rapida), ma vorrei comunque una buona libreria BLAS o LAPACK disponibile per salvarmi un po 'di codice.

Per farla breve, qualcuno può raccomandare una libreria BLAS o LAPACK gratuita / open source da usare con .net?

Cordiali saluti Egil.

Aggiornamento: trovato Math.NET Numerics oggi, sembra interessante, qualcuno ne ha esperienza?

È stato utile?

Soluzione

L'ACML di AMD è un download gratuito , ma è solo binario, non open source e codice nativo, non .NET.

Le prestazioni sono generalmente superiori al codice Netlib.org e in genere equivalgono all'MKL di Intel, che non è IIRC gratuito.

Il download include un esempio che dimostra come associarlo a C #. Non è diverso dal chiamare qualsiasi altra libreria C o C ++ da C #.

La libreria implementa BLAS, LAPACK, FFT e RNG.

http://developer.amd.com/cpu/ biblioteche / ACML / downloads / pages / default.aspx

MODIFICA PER RISPONDERE AL COMMENTO:

Su una CPU Intel, l'ACML di AMD eseguirà circa e l'MKL di Intel, ma dipende dall'algoritmo, dalle dimensioni della matrice, dal numero di core, dalla topologia e dalla velocità della memoria, ecc. ecc. ecc. ecc. Il tuo chilometraggio può variare. L'unico modo per dirlo con certezza è eseguire il tuo benchmark. In alcuni casi, ACML è più veloce di MKL anche su hardware Itel.

Ognuno sarà significativamente più veloce di qualsiasi "ingenuo" implementazione per matrici di grandi dimensioni . Entrambi sono progettati per utilizzare thread multipli su processori multicore e hanno kernel del linguaggio assembly assemblati a mano e molta ottimizzazione per i comportamenti della cache su vari computer.

Per le matrici piccole , le prestazioni sono in genere un problema, dal momento che qualsiasi CPU moderna può risolvere un piccolo matix in pochi millisecondi, anche usando il codice più semplice. In tal caso, stai utilizzando solo una libreria per evitare di scrivere e eseguire il debug di codice già scritto centinaia di volte.

Altri suggerimenti

La libreria matematica DotNumerics è un progetto gratuito / open source scritto in C # e contiene la traduzione di Lapack, Blas, e Eispack a C #.

Il BLIS (Library Instantiation Software) di tipo BLIS è l'attuale standard di riferimento per le librerie BLAS open source. https://github.com/flame/blis Non è veloce come MKL (anche se vicino) ma più veloce di OpenBLAS, un fork del leggendario GotoBLAS, su praticamente tutte le CPU (e molto più veloce sulle architetture più recenti tra cui Intel, AMD e ARM). È ben mantenuto.

ACML, menzionato in un'altra risposta, non esiste più. AMD ora utilizza software open source come parte dello stack software ACL (AMD Compute Library). BLIS fa parte di quello stack software: https: //developer.amd .com / amd-cpu-librerie / blas-library / .

Caviat: il poster fa parte del progetto BLIS. Le affermazioni di cui sopra sono ben documentate.

(Commento aggiunto più tardi: non ho notato il "quot. .NET". Sfortunatamente BLIS non è ancora supportato bene per Windows.)

Lutz Roeder ha una buona porta open source Mapack.Net

Utilizzato in passato per vari progetti e trovato utile lavorare con

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top