He estado usando Octave y MATLAB para algunos proyectos, y me he encontrado con algunas preguntas. Esta pregunta Why/when should I prefer MATLAB over Octave?) respondió varias, pero todavía hay una persistente ...¿Por qué Octave es más lento que MATLAB?
He leído una serie de publicaciones/otras fuentes que comparan el rendimiento de Octave y MATLAB, y he realizado algunas de mis pruebas en estándar scripts que confirman el consenso general de que Octave es generalmente mucho más lento que MATLAB para operaciones estándar (repetido, 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 se puede atribuir 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 se ejecute 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 se escribe de forma que un compilador JIT sea innecesario/no utilizado?
Se ha escrito mucho sobre el rendimiento de Jlab de Matlab, el JIT de Matlab no puede realizar llamadas de función en línea, y no estoy seguro de qué tan bien puede optimizar bucles FOR dado los impares diferenciales de rendimiento entre un bucle FOR en Matlab y JAVA (que tiene un JIT de trabajo). Todas las implementaciones de lenguajes interpretados tienen un JIT, pero el de Matlab es bastante débil. – Mikhail