¿Qué es una buena biblioteca BLAS/LAPACK gratuita(de código abierto) para.net(C#)?
matrix scientific-computing (4)
Tengo un proyecto escrito en C # donde necesito realizar varias operaciones algebraicas lineales en matrices (como la factorización LU).
Dado que el programa es principalmente un prototipo creado para confirmar una teoría, una implementación de C # será suficiente (en comparación con un C ++ posiblemente más veloz), pero aún así me gustaría tener una buena biblioteca BLAS o LAPACK disponible para ahorrarme algo de codificación.
En pocas palabras, ¿alguien puede recomendar una biblioteca BLAS o LAPACK de código abierto o gratuita para usar con .net?
Saludos cordiales Egil.
Actualización: Found Math.NET Numerics hoy, parece interesante, ¿alguien tiene alguna experiencia con eso?
ACML de AMD es una descarga gratuita , pero es solo binario, no de código abierto, y código nativo, no .NET.
El rendimiento es generalmente superior al código Netlib.org, y en general es aproximadamente el mismo que el MKL de Intel, que no es gratuito IIRC.
La descarga incluye una muestra que muestra cómo enlazarla a C #. No es diferente de llamar a cualquier otra biblioteca C o C ++ desde C #.
La biblioteca implementa BLAS, LAPACK, FFT y RNG.
http://developer.amd.com/cpu/Libraries/acml/downloads/pages/default.aspx
EDITAR PARA RESPONDER AL COMENTARIO:
En una CPU Intel, el ACML de AMD se desempeñará aproximadamente igual que el MKL de Intel, pero depende del algoritmo, el tamaño de la matriz, el número de núcleos, la topología de la memoria y la velocidad, etc. etc. El kilometraje puede variar. La única manera de saberlo con seguridad es ejecutar su propio punto de referencia. En algunos casos, ACML es más rápido que MKL incluso en hardware Itel.
Cualquiera de los dos será significativamente más rápido que cualquier implementación "ingenua" para matrices grandes . Ambos están diseñados para usar múltiples subprocesos en procesadores multinúcleo, y tienen núcleos de lenguaje ensamblador modificados a mano y una gran cantidad de ajustes para los comportamientos de caché en varias máquinas.
Para matrices pequeñas , el rendimiento generalmente es indiferente, ya que cualquier CPU moderna puede resolver una pequeña matriz en solo unos pocos milisegundos, incluso utilizando el código más simple. En ese caso, solo está utilizando una biblioteca para evitar escribir y depurar el código que ya se ha escrito cientos de veces.
El software BLIS-like Library Instantiation (BLIS) es el estándar de oro actual para las bibliotecas de código abierto BLAS. https://github.com/flame/blis No es tan rápido como MKL (aunque está cerca) sino más rápido que OpenBLAS, una bifurcación del legendario GotoBLAS, en prácticamente todas las CPU (y mucho más rápido en las últimas arquitecturas, incluyendo Intel, AMD , y ARM). Está bien mantenido.
ACML, mencionado en otra respuesta, ya no existe. AMD ahora usa software de código abierto como parte de su pila de software ACL (AMD Compute Library). BLIS es lo que forma parte de esa pila de software: https://developer.amd.com/amd-cpu-libraries/blas-library/ .
Caviat: el cartel es parte del proyecto BLIS. Los reclamos anteriores están bien documentados.
(Comentario agregado más tarde: No noté el ".NET". Desafortunadamente, BLIS aún no es compatible con Windows).
La biblioteca de matemáticas DotNumerics es un proyecto de código abierto / libre escrito en C # y contiene la traducción de Lapack, Blas y Eispack a C #.
Lutz Roeder tiene un buen puerto de código abierto Mapack.Net
Se usó en el pasado para varios proyectos y me pareció muy fácil trabajar con