¿Por qué Octave es más lento que MATLAB?


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 sobre Octave?) respondieron varias, pero todavía queda una...

He leído una serie de publicaciones / otras fuentes que comparan el rendimiento de Octave y MATLAB, y he ejecutado algunas de mis propias 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 de rendimiento de MATLAB es atribuible a su compilador JIT, que compila bucles grandes 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 el caso que el código vectorizado también se ejecuta más lentamente en Octava? Parece que en este caso la memoria debe reservarse antes del bucle y algún bucle nativo de C / C++ debe realizar la operación, lo que equipararí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 más mal para operaciones complejas, incluso si el código está escrito de tal manera que un compilador JIT no es necesario/no utilizado?

Author: Community, 2012-09-24

2 answers

Hay cuatro maneras de acelerar el código de Matlab:

  • JIT: compilar 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 Matlab / Octave que se implementan en Matlab / Octave. En cada lanzamiento, hay un montón más de ellos que se convierten en built-ins.

  • Multihilo: Hay una lista de funciones que tienen implementaciones multiproceso, lo que acelerará las llamadas a funciones.

  • Generalmente implementaciones más eficientes. Por ejemplo, el filtro de mediana obtuvo un aumento de velocidad masivo para entradas de enteros hace unos lanzamientos.

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 rendimiento el aumento parece haber sido un foco del desarrollo de Matlab en los últimos años.

 33
Author: Jonas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-24 19:14:01

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 'version-lapack' y 'version-blas' en su Matlab para comprobar la versión de MKL que su Matlab está utilizando.

Un enlace rápido que discute 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 utilizar de alguna manera el MKL instalado en nuestras máquinas, debería acelerar significativamente Octave.

 13
Author: Sooraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-01 17:22:22