Negación
Este es un post muy obstinado en base a mi Expirience para un proyecto en particular. No he usado la última versión del codificador, pero sí tengo experiencia con el producto equivalente (codificador incorporado) para convertir el código de Matlab a C++ que se incluyó como parte del anterior producto Real Time Workshop. Estos comentarios deben aplicarse. Su experiencia puede ser diferente.
primeros beneficios ...
En mi situación, el codificador incorporado se utilizó para hacer un bloque de procesamiento que encajan en parte de una aplicación de audio más grande. El bloque de procesamiento tenía el trabajo de procesar un flujo constante de almacenamientos intermedios de muestras en tiempo real. Hice el algoritmo original en matlab, y la herramienta de conversión simplificó bastante la conversión de un prototipo inicial en algo que podría compilarse con código nativo y usarse en una aplicación en tiempo real.También fue agradable suponer que el código convertido funcionaba numéricamente de forma idéntica al original sin posibilidad de error humano en el proceso de conversión (asumiendo habilidades sobrehumanas de los ingenieros de Mahworks).
Los beneficios terminaron después de esta fase de prototipo muy temprano ...
Problema 1: Desperdicio de tiempo interconexión
Como el algoritmo creció en complejidad, empecé a preocuparme más y más acerca de cómo codificar el interfaz de matlab a la función para que después de la conversión, sería fácil interactuar con el marco C++ (quería monitorear los estados internos en tiempo real). Eventualmente, esto comenzó a usar tanto tiempo como el propio desarrollo del algoritmo en sí mismo, derrotando así el propósito de usar dicha herramienta. Pude haber descompuesto el algoritmo en trozos más pequeños y luego pegarlos con C++, pero luego perdería la capacidad de tener una comparación directa de Matlab del algoritmo completo.
Problema 2: No todas las funciones están soportadas o totalmente compatibles
El codificador soporta una subset of the Matlab language. En algunos casos, las funciones compatibles están limitadas de alguna manera. Por ejemplo, en la aplicación en la que estaba trabajando, quería poder modificar las características de un filtro en tiempo real. No pude usar las funciones de creación de prototipos del filtro Matlab estándar, porque la herramienta de generación de código no permitiría las llamadas a la función de creación de prototipos de filtros con argumentos variables. Terminé pasando tiempo con un libro de DSP desarrollando mi propia implementación, a pesar de que tenemos una licencia de caja de herramientas de procesamiento de señales.
Problema 3: código generado automáticamente era ineficiente
llegué frustrado con los problemas de interfaz y el algoritmo codificado a mano en C++. Para mi aplicación, hubo un aumento del rendimiento del 75% a favor del código escrito a mano sobre el código convertido. Las diferencias de rendimiento serán muy diferentes dependiendo de su aplicación, probablemente la versión de la herramienta de conversión utilizada y su afición por su generador de perfiles. La herramienta de conversión en sí es un producto complejo que tiene muchas configuraciones para aprender. Tratar de encontrar la manera de ajustar la configuración y el código matlab para mejorar el rendimiento utiliza más tiempo que podría emplearse en la codificación manual.
No he utilizado la herramienta de conversión desde ...
ahora prefieren un enfoque más Test- asistida. Codifico un prototipo en Matlab y lo retoco hasta que estoy seguro de que se comporta como yo quiero. Luego pienso en C++ y recodio el algoritmo de una manera que es más natural para ese lenguaje. Luego hago un archivo mex que interactúa con mi código C++, así que puedo probarlo con mi equivalente de Matlab de confianza. Para el espacio problemático en el que trabajo, esta es una forma mucho más eficiente (humana y de máquina) de hacer las cosas.
En conclusión, esta es solo la opinión de un usuario. Tal vez (como se sugirió en un comentario en su publicación original) debe inscribirse en la versión de prueba para ver cómo se lleva bien. Sin embargo, si eres un poco ninja de C++, probar construyendo archivos mex no requiere una licencia costosa para un producto complementario y te hará un mejor desarrollador.
¿Por qué no acaba de descargar la versión de prueba de MATLAB Coder, ver cómo funciona para usted y comparar los resultados con el trabajo anterior que ha realizado? – mpontes
¿Qué le parece usar un lenguaje de alto nivel que sea agradable para trabajar, pero aún así compila rápidamente el código nativo, de inmediato? Haskell es bastante bueno. C++ 11 tampoco está mal, tampoco. – leftaroundabout
Es cierto, pero Matlab tiene muchas funciones incorporadas que son muy convenientes. – s5s