color - ¿Por qué Octave es más lento que MATLAB?
text color matlab plot (2)
He estado usando Octave y MATLAB para algunos proyectos, y me he encontrado con algunas preguntas. Esta pregunta ¿Por qué / cuándo debería preferir MATLAB a Octave? ) respondió varias, pero todavía hay una persistente ...
He leído una cantidad de publicaciones / otras fuentes que comparan el rendimiento de Octave y MATLAB, y he realizado algunas de mis pruebas en scripts estándar que confirman el consenso general de que Octave es generalmente mucho más lento que MATLAB para operaciones estándar (iterado, por supuesto, para que la comparación sea significativa).
El consenso también parece sugerir que la mayor parte del aumento del rendimiento de MATLAB se debe a su compilador JIT, que compila grandes bucles en tiempo de ejecución. Esto tiene sentido, y las mayores diferencias de rendimiento parecen ocurrir en estos casos (por ejemplo, Mathworks Matlab vs Gnu Octave )
Mi pregunta es la siguiente: ¿por qué debería ser que el código vectorizado también funciona más lentamente en Octave? Parece que en este caso la memoria debe dejarse de lado antes de que el bucle y algún bucle C / C ++ nativo realice la operación, lo que igualaría el rendimiento entre Octave y MATLAB para el código vectorizado. Además, ¿esto tiene implicaciones más amplias, es decir, que Octave podría funcionar peor para operaciones complejas, incluso si el código está escrito de tal manera que un compilador JIT es innecesario / no utilizado?
Hay cuatro formas de acelerar el código de Matlab:
JIT: la compilación en tiempo de ejecución ayuda con los bucles pero parece acelerar (o al menos interactuar con) otras partes del código también, de acuerdo con mis observaciones anecdóticas.
Implementación de funciones en C / C ++: hay un montón de funciones de Matlab / Octave que se implementan en Matlab / Octave. En cada lanzamiento, hay un montón más de ellos que se convierten en integradas.
Multithreading: hay una lista de funciones que tienen implementaciones multiproceso, lo que acelerará las llamadas a funciones.
En general, implementaciones más eficientes. Por ejemplo, el filtro mediano obtuvo un aumento de velocidad masivo para las entradas de enteros hace algunas publicaciones.
Todos estos enfoques necesitan desarrolladores dedicados a hacer que el código sea más rápido. Por lo que sé, una de las principales preocupaciones de los desarrolladores de Octave es asegurarse de que la funcionalidad (Matlab) esté allí, mientras que el aumento del rendimiento parece haber sido un foco del desarrollo de Matlab en los últimos años.
Matlab utiliza internamente Intel Math Kernel Library (Intel MKL) para operaciones vectoriales y matriciales. Esto le da a Matlab una ventaja significativa sobre Octave.
Pruebe los comandos ''versión -lapack'' y ''versión -blas'' en su Matlab para verificar la versión de MKL que está usando Matlab.
Un enlace rápido que analiza el uso de MKL por Matlab es http://stanford.edu/~echu508/matlab.html .
Intel MKL es propietario. software.intel.com/en-us/intel-mkl. Sin embargo, para uso no comercial, la versión de Linux es gratuita. Si Octave puede de alguna manera usar el MKL instalado en nuestras máquinas, debería acelerar significativamente Octave.