¿Qué es una buena biblioteca BLAS / LAPACK gratuita (de código abierto) para .net (C #)? [cerrado]

StackOverflow https://stackoverflow.com/questions/1437501

Pregunta

Tengo un proyecto escrito en C # donde necesito hacer 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 una C ++ posiblemente más rápida), pero todavía 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 / libre para usar con .net?

Saludos, Egil.

Actualización: Encontrado Math.NET Numerics hoy, parece interesante, ¿alguien tiene alguna experiencia con eso?

¿Fue útil?

Solución

El 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 de Netlib.org, y generalmente más o menos lo mismo que el MKL de Intel, que no es IIRC libre.

La descarga incluye una muestra que muestra cómo vincularlo 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/ Bibliotecas / acml / downloads / pages / default.aspx

EDITAR PARA RESPONDER AL COMENTARIO:

En una CPU Intel, el ACML de AMD funcionará aproximadamente así como el MKL de Intel, pero depende del algoritmo, el tamaño de la matriz, el número de núcleos, la topología y velocidad de la memoria, etc., etc. . Su experiencia puede ser diferente. La única forma de saber con certeza 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 ingenuo implementación para matrices grandes . Ambos están diseñados para utilizar múltiples subprocesos en procesadores multinúcleo, y tienen núcleos de lenguaje ensamblador ajustados a mano y una gran cantidad de ajustes para los comportamientos de caché en varias máquinas.

Para las matrices pequeñas , el rendimiento generalmente no importa, 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 código que ya se ha escrito cientos de veces.

Otros consejos

La biblioteca matemática DotNumerics es un proyecto gratuito / de código abierto escrito en C # y contiene la traducción de Lapack, Blas, y Eispack a C #.

El software de instanciación de bibliotecas tipo BLIS (BLIS) es el estándar de oro actual para las bibliotecas BLAS de código abierto. https://github.com/flame/blis No es tan rápido como MKL (aunque está cerca) pero 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 arquitecturas más recientes, incluidas Intel, AMD y ARM). Está bien mantenido.

ACML, mencionado en otra respuesta, ya no existe. AMD ahora utiliza software de código abierto como parte de su pila de software ACL (Biblioteca de cómputo AMD). BLIS es lo que forma parte de esa pila de software: https: //developer.amd .com / amd-cpu-library / blas-library / .

Caviat: el póster es parte del proyecto BLIS. Las afirmaciones anteriores están bien documentadas.

(Comentario agregado más tarde: No noté el " .NET ". Desafortunadamente, BLIS aún no es compatible con Windows).

Lutz Roeder tiene un buen puerto de código abierto Mapack.Net

Utilizado en el pasado para varios proyectos y me resultó difícil trabajar con

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top