Question

J'ai un projet écrit en C # où je dois effectuer diverses opérations algébriques linéaires sur des matrices (comme la factorisation de LU).

Etant donné que le programme est principalement un prototype créé pour confirmer une théorie, une implémentation en C # suffira (par rapport à une version probablement plus rapide en C ++), mais je voudrais quand même disposer d’une bonne bibliothèque BLAS ou LAPACK pour me sauver un peu de codage.

En résumé, quelqu'un peut-il recommander une bibliothèque BLAS ou LAPACK source libre / ouverte à utiliser avec .net?

Meilleures salutations Egil.

Mise à jour: Numérique Math.NET trouvé aujourd'hui, semble intéressant, y a-t-il une expérience quelconque avec cela?

Était-ce utile?

La solution

Le format ACML d’AMD est un téléchargement gratuit , mais il n’est que binaire, pas de source ouverte, et du code natif, pas de .NET.

Les performances sont généralement supérieures au code Netlib.org et généralement plus ou moins identiques à celles du MKL d’Intel - qui n’est pas libre IIRC.

Le téléchargement inclut un exemple qui montre comment le lier à C #. Pas différent d'appeler une autre bibliothèque C ou C ++ à partir de C #.

La bibliothèque implémente BLAS, LAPACK, FFT et RNG.

http://developer.amd.com/cpu/ Bibliothèques / acml / downloads / pages / default.aspx

MODIFIER POUR RÉPONDRE AU COMMENTAIRE:

Sur un processeur Intel, le format ACML d’AMD exécute environ ainsi que le MKL d’Intel, mais cela dépend de l’algorithme, des tailles de matrice, du nombre de cœurs, de la topologie de la mémoire, de la vitesse, etc., etc. . Votre kilométrage peut varier. La seule façon de savoir avec certitude consiste à exécuter votre propre point de repère. Dans certains cas, ACML est plus rapide que MKL, même sur du matériel Itel.

L’un ou l’autre sera nettement plus rapide que n’importe quel "naïf". mise en œuvre pour les grandes matrices. Les deux sont conçus pour utiliser plusieurs threads sur des processeurs multicœurs, et disposent de noyaux de langage d'assemblage modifiés à la main, ainsi que de nombreux ajustements pour les comportements de cache sur différentes machines.

Pour les petites matrices, les performances sont généralement négligeables, car tout processeur moderne peut résoudre un petit matix en quelques millisecondes, même avec le code le plus simple. Dans ce cas, vous utilisez uniquement une bibliothèque pour éviter l'écriture et le débogage de code déjà écrit des centaines de fois.

Autres conseils

La bibliothèque mathématique DotNumerics est un projet libre / à code source ouvert écrit en C # et contenant la traduction de Lapack, Blas, et Eispack en C #.

Le logiciel d’instanciation de bibliothèque (BLIS), similaire à BLIS, est la norme de référence actuelle pour les bibliothèques BLAS open source. https://github.com/flame/blis Ce n'est pas aussi rapide que MKL (bien que proche) mais plus rapide que OpenBLAS, une fourche du légendaire GotoBLAS, sur pratiquement tous les processeurs (et beaucoup plus rapide sur les dernières architectures, notamment Intel, AMD et ARM). Il est bien entretenu.

ACML, mentionné dans une autre réponse, n’existe plus. AMD utilise désormais un logiciel open source dans le cadre de sa pile de logiciels ACL (AMD Compute Library). BLIS fait partie de cette pile logicielle: https: //developer.amd .com / amd-cpu-libraries / blas-library / .

Caviat: l’affiche fait partie du projet BLIS. Les affirmations ci-dessus sont bien documentées.

(Commentaire ajouté plus tard: vous n'avez pas remarqué le ".NET". Malheureusement, BLIS n'est pas encore bien pris en charge pour Windows.)

Lutz Roeder a un bon port Open Source Mapack.Net

Utilisé dans le passé pour divers projets et trouvé utile de travailler avec

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top