5

Aquí hay un buen solucionador lineal llamado GotoBLAS. Está disponible para descargar y se ejecuta en la mayoría de las plataformas informáticas. Mi pregunta es, ¿existe una manera fácil de vincular este solucionador con el kernel de Mathematica, para que podamos llamarlo como LinearSolve? Una cosa de la que la mayoría de ustedes pueden estar seguros es que si tenemos un sistema lineal muy grande, es mejor que lo resuelva algún solucionador lineal estándar de la industria. El solucionador incorporado no es para problemas realmente grandes.¿Cómo se puede vincular este solucionador lineal dentro de Mathematica?

Ahora que Mathematica 8 ha presentado mejores capacidades de compilación y enlace de biblioteca, podemos esperar usar algunos de esos solucionadores desde dentro de Mathematica. La pregunta es si requiere poco ajuste del código fuente, o si necesita ser un asistente avanzado para hacerlo. Aquí en este foro podemos comenzar a vincular algunos excelentes programas de código abierto como GotoBLAS con Mathematica e intercambiar nuestros puntos de vista. Las personas con menos experiencia pueden obtener alguna información de los usuarios profesionales y al final obtenemos una Mathematica mucho más fuerte. Será un proyecto abierto para la creciente comunidad de Mathematica y una plataforma donde las nuevas capacidades de Mathematica 8 podrían documentarse de forma transparente para futuros usuarios.

Espero que algunos de ustedes aquí den ideas sólidas sobre cómo podemos ejecutar GotoBLAS desde dentro de Mathematica. Dado que las capacidades más recientes de compilación y enlace de la biblioteca generalmente no están muy bien documentadas, los usuarios comunes no las utilizan con mucha frecuencia. Esta pregunta puede actuar como un ejemplo de juguete para documentar estas nuevas capacidades de Mathematica. Ayuda en esta dirección por parte de los miembros del foro con experiencia realmente elevará la motivación de los nuevos usuarios como yo y nos enseñará algo muy útil para ampliar el arsenal de números de Mathematica.

+2

Mira MathLink. Es facil de aprender – Szabolcs

+7

No recuerdo ninguna insatisfacción generalizada con LinearSolve. Usando SparseArray s puede manejar fácilmente millones de ecuaciones. ¿Cuál es exactamente tu problema? –

+0

No me sorprendería en lo más mínimo, si Mathematica ya se vincula en alguna forma de solucionador lineal. En realidad, me sorprendería si no lo hicieran. Si estas son versiones internas o externas de LAPACK y BLAS, es irrelevante, siempre que se prueben. Al revisar los [mensajes] (http://stackoverflow.com/questions/1675387/finding-previously-defined-messages-in-mathematica/1682004#1682004) se indica que ya son compatibles con LAPACK. No lo he usado, sin embargo. – rcollyer

Respuesta

7

La respuesta corta, creo, es que esto no es algo que realmente quieras hacer.

GotoBLAS, según tengo entendido, es una implementación específica de BLAS, que significa Subrutinas de Álgebra Lineal Básica. "Básico" realmente significa bastante básico aquí - multiplicar una matriz por un vector, por ejemplo. Por lo tanto, BLAS no es un solucionador al que llamaría una función como LinearSolve. LinearSolve (dependiendo de la forma exacta de los argumentos) llamar a un comando LAPACK, que es un paquete de nivel superior construido sobre BLAS. Por lo tanto, para realmente vincular GotoBLAS (o cualquier BLAS) en Mathematica, uno realmente necesitaría recompilar todo el kernel.

Por supuesto, uno podría escribir un programa C/Fortran que se compiló contra GotoBLAS y luego vincularlo a Mathematica. Sin embargo, el programa resultante solo usaría GotoBLAS al ejecutar los comandos específicos que haya vinculado a Mathematica, lo que más bien omite el objetivo de BLAS.

0

El Wolfram Kernel (Mathematica) ya está vinculado a la altamente optimizada Intel Math Kernel Library, y se distribuye con Mathematica. El MKL está multiproceso y vectorizado, por lo que no estoy seguro de qué mejoraría GotoBLAS.

Cuestiones relacionadas