Biblioteca MKL

De MateWiki
Saltar a: navegación, buscar

MKL [1] es una biblioteca desarrollada por Intel para realizar operaciones relacionadas con álgebra numérica. Esta biblioteca es muy rápida sobre procesadores Intel. Es la biblioteca que emplea MATLAB para realizar las operaciones de álgebra numérica. También puede usarse con otros entornos de cálculo numérico como GNU Octave o R.

1 ¿Qué es una biblioteca?

En programación, una biblioteca es un conjunto de funciones que se agrupan en módulos, para que se utilicen en otros programas, sin necesidad de tener que escribir de nuevo esas funciones. Por ejemplo, las denominadas toolboxes de MATLAB son bibliotecas de programación.

Normalmente las bibliotecas se refieren a un tema muy específico. Hay bibliotecas para estadística, para métodos numéricos, para tratamiento de imágenes, para procesar ficheros de audio, para generar gráficos, etc.

2 ¿Qué es MKL?

La biblioteca Intel Math Kernel Library contiene funciones optimizadas para realizar diferentes operaciones matemáticas en procesadores fabricados por Intel. Se emplea mucho en entornos científicos, de ingeniería y financieros, ya que puede resolver sistemas lineales con diferentes tipos de matrices (densas, sparse), transformada rápida de Fourier y cualquier operación que requiera manipular vectores y matrices.

La biblioteca está disponible para sistemas Windows, GNU/Linux y Mac. En Windows y Mac es necesario adquirir una licencia comercial para poder emplear la biblioteca[2]. En cambio, en GNU/Linux puede conseguirse una licencia personal sin coste[3].

Hay dos maneras de usar esta biblioteca para acelerar nuestros programas:

  • Podemos usarla directamente escribiendo nuestros programas en C, C++ o FORTRAN. Este modo es complejo, y los programas tienen que ser escritos a muy bajo nivel.
  • Podemos emplear un programa que enlace con la biblioteca, y nos permita usarla de manera transparente y sencilla.

Por ejemplo, cuando estamos realizando cualquier operación con matrices en MATLAB, en realidad estamos empleando la biblioteca MKL de manera inadvertida. En cambio, cuando usamos otros programas, emplean otras bibliotecas que no funcionan de manera optimizada en procesadores Intel. Por este motivo, programas como GNU Octave son más lentos en la mayoría de operaciones que MATLAB.

Para que un programa de cálculo como GNU Octave o R funcione con la biblioteca MKL no es necesario cambiar los programas, sino simplemente recompilar el programa para que emplee la biblioteca.

2.1 ¿Por qué funciona la biblioteca simplemente recompilando?

Los nombres de las funciones contenidas en una biblioteca y los parámetros de entrada y salida de cada función se conocen con el término interfaz y determinan cómo hay que llamar a una biblioteca desde un programa. Normalmente, bibliotecas diferentes tendrán interfaces diferentes. Pero en el caso de métodos numéricos hay tipos específicos de bibliotecas que tienen la misma interfaz, aunque internamente funcionen de manera diferente (por ejemplo, usando métodos optimizados para un procesador, como el caso de la MKL).

En estos casos, si la interfaz de la biblioteca no cambia, se puede usar una nueva biblioteca sin tocar ni una sola línea de código de nuestros programas. En el caso de programas interpretados (como los escritos en lenguaje MATLAB, por ejemplo), bastaría con volver a ejecutar el programa para que usara la nueva biblioteca. En el caso de programas compilados, es necesario generar de nuevo el ejecutable (recompilar) para que emplee la nueva biblioteca.

En concreto, de todas las funciones que están contenidas en la MKL, la interfaz que ofrece a los programas es la denominada Basic Linear Algebra Subprograms[4]. Existen otras bibliotecas que usan la misma interfaz, como por ejemplo la biblioteca LAPACK[5], que es la biblioteca que usan GNU Octave y R por defecto.

En sistemas GNU/Linux, dado que es posible adquirir una licencia personal para propósitos no comerciales, es posible recompilar tanto GNU Octave[6] como R[7] para usar la biblioteca MKL, y conseguir rendimientos similares a MATLAB en operaciones con matrices.

3 Comparación de rendimiento

Comparada con otras bibliotecas de tipo BLAS, MKL se ejecuta mucho más rápidamente sobre procesadores Intel. No está claro sin embargo si la ganancia es tal en procesadores de otros fabricantes[8]. En cualquier caso, si usamos software libre en GNU/Linux para cálculo numérico, podemos emplear la licencia personal para fines no comerciales, y obtener rendimientos similares o superiores a MATLAB.

Comparación del tiempo de ejecución entre Octave con MKL, Octave con LAPACK y MATLAB

En la figura de la derecha mostramos un ejemplo de comparación del rendimiento de MKL comparado con otras bibliotecas. La prueba consistió en resolver un sistema lineal usando el operador backslash. El orden del sistema se fue incrementando hasta llegar a orden 2000 (es decir, resolver simultáneamente 2000 ecuaciones lineales con 2000 incógnitas). Se probaron tres configuraciones:

  • GNU Octave compilado con la biblioteca MKL (azul)
  • GNU Octave compilado con la biblioteca LAPACK (rojo)
  • MATLAB R2013a (verde), que usa MKL por defecto

Como se puede observar, Octave con LAPACK, que es la distribución por defecto que podemos obtener, es mucho más lento que MATLAB para resolver sistemas lineales (línea roja comparada con la línea verde). En cambio, cuando recompilamos Octave para que use la biblioteca MKL, el tiempo de ejecución es incluso ligeramente mejor (curva azul) que MATLAB. Podemos observar que la biblioteca MKL escala también mejor que LAPACK: el tiempo de ejecución crece mucho más lentamente con el orden en el caso de MKL, que en el caso de LAPACK.

3.1 ¿A qué se debe la diferencia en rendimiento?

En muchos métodos numéricos, y en particular en los referidos a álgebra lineal, el tiempo de ejecución no depende de la complejidad del algoritmo. Los algoritmos para álgebra lineal están muy establecidos. Los métodos que se usan hoy en álgebra lineal surgieron en los albores del cálculo numérico[9], y no hay apenas margen para avances en la complejidad. La mejora del rendimiento se ha debido a cambios en la arquitectura de los ordenadores donde se implementan. En el caso concreto de la biblioteca MKL, la desarrolla el mismo fabricante de los procesadores Intel, por lo que está altamente optimizada para las arquitecturas que usan procesadores Intel. Por eso es mucho más rápida que otras bibliotecas que implementan los mismos algoritmos. En este caso, el algoritmo en sí es mucho menos importante que los detalles de implementación de los algoritmos.

4 Referencias

  1. Intel Math Kernel Library (software.intel.com)
  2. Intel MKL purchase (software.intel.com)
  3. Intel Non-Commercial Software Development (software.intel.com)
  4. Basic Linear Algebra Subprogramas (BLAS) (Wikipedia EN)
  5. LAPACK (Wikipedia EN)
  6. Using Intel MKL in GNU Octave (software.intel.com)
  7. Build R 3.01 with MKL on Linux (software.intel.com)
  8. Criticism to Intel C++ Compiler (Wikipedia EN)
  9. Grcar, Joseph F. John von Neumann's Analysis of Gaussian Elimination and the Origins of Modern Numerical Analysis. SIAM Review, 53(4), pp. 607–682, 2011. (enlace a PDF sin suscripción)