Matlab Coder vs codage manuel?

Un peu de contexte pour les personnes qui lisent ceci dans le futur (au cas où il ne serait pas verrouillé). J’ai tendance à faire ma programmation dans un langage de haut niveau pour comprendre le problème en premier. Après avoir couvert tous les cas possibles, je traduis le code en C ++ (ou C).

La plupart du code que j’écris contient des maths et MATLAB est le langage que j’utilise (l’alternative pour moi est Python). Quoi qu’il en soit, je traduis ensuite le code de MATLAB en C ++ à la main.

Est-ce que quelqu’un sait si l’utilisation de MATLAB Coder présente un avantage ou un inconvénient? C’est un nouveau produit et très cher, mais à part le temps économisé en traduction, y a-t-il d’autres avantages?

Avertissement

Ceci est un message très critique basé sur mon expérience pour un projet particulier. Je n’ai pas utilisé la dernière version du codeur, mais j’ai de l’experience avec le produit équivalent (codeur intégré) pour convertir le code matlab en C ++ inclus dans l’ancien produit Real Time Workshop. Ces commentaires doivent toujours s’appliquer. Votre kilométrage peut varier.

Avantages précoces …

Dans ma situation, le codeur intégré a été utilisé pour créer un bloc de traitement adapté à une application audio plus grande. Le bloc de traitement devait traiter un stream constant d’échantillons de tampons en temps réel. J’ai fait l’algorithme original en matlab, et l’outil de conversion a rendu assez simple la conversion d’un prototype antérieur en quelque chose qui pourrait être compilé en code natif et utilisé dans une application en temps réel. Il était également agréable de supposer que le code converti fonctionnait numériquement identique à l’original sans possibilité d’erreur humaine dans le processus de conversion (en supposant des capacités surhumaines des ingénieurs de Mahworks).

Les bénéfices ont pris fin après cette première phase de prototypage …

Problème 1: Interfaçage temporel

Au fur et à mesure de la complexité de l’algorithme, j’ai commencé à m’inquiéter de plus en plus de la façon de coder l’interface matlab avec la fonction afin de faciliter l’interface avec le framework C ++ (je voulais surveiller les états internes en temps réel) . Cela a finalement commencé à utiliser autant de temps que le développement de l’algorithme proprement dit, ce qui a empêché l’utilisation d’un tel outil. J’aurais pu décomposer l’algorithme en morceaux plus petits, puis les coller ensemble en utilisant C ++, mais je perdrais alors la possibilité de comparer directement l’algorithme complet avec Matlab uniquement.

Problème 2: toutes les fonctions ne sont pas sockets en charge ou sockets en charge complètement

Le codeur prend en charge un sous – ensemble du langage Matlab . Dans certains cas, les fonctions sockets en charge sont limitées d’une manière ou d’une autre. Par exemple, dans l’application sur laquelle je travaillais, je voulais pouvoir modifier les caractéristiques d’un filtre en temps réel. Je ne pouvais pas utiliser les fonctions de prototypage de filtre Matlab standard, car l’outil de génération de code ne permettait pas d’appeler la fonction de prototypage de filtre avec des arguments variables. J’ai fini par passer du temps avec un livre DSP à développer ma propre implémentation, même si nous avons une licence de boîte à outils de traitement du signal.

Problème 3: le code généré automatiquement était inefficace

J’ai été frustré par les problèmes d’interface et j’ai codé l’algorithme à la main en C ++. Pour mon application, il y avait un gain de performance de 75% en faveur du code manuscrit sur le code converti. Les différences de performances seront très différentes selon votre application, probablement la version de l’outil de conversion utilisé et votre intérêt pour votre profileur. L’outil de conversion lui-même est un produit complexe qui a beaucoup de parameters à apprendre. Essayer de modifier les parameters et le code matlab pour améliorer les performances nécessite plus de temps que le codage manuel.

Je n’ai pas utilisé l’outil de conversion depuis …

Je préfère maintenant une approche plus assistée par les tests. Je code un prototype dans Matlab et je le modifie jusqu’à ce que je sois sûr qu’il se comporte comme je le souhaite. Je pense alors en C ++ et recode l’algorithme d’une manière plus naturelle pour ce langage. Je crée ensuite un fichier mex qui s’interface avec mon code C ++ pour pouvoir le tester avec mon équivalent matlab de confiance. En ce qui concerne l’espace problématique dans lequel je travaille, c’est un moyen beaucoup plus efficace (humain et machine) de faire avancer les choses.

En conclusion, ceci n’est que l’avis d’un seul utilisateur. Peut-être (comme suggéré dans un commentaire sur votre message original), vous devriez vous inscrire au procès pour voir comment vous vous entendez. Cependant, si vous êtes un peu un ninja C ++, tester en construisant des fichiers mex ne nécessite pas de licence coûteuse pour un produit complémentaire et cela fera de vous un meilleur développeur.

Si vous écrivez plus facilement dans MATLAB, la valeur dépendra beaucoup de votre temps.

Comparer MATLAB et C ou C ++ pour les performances est très compliqué. C ou C ++ vont être plus rapides dans la plupart des cas, mais dans certaines applications d’algèbre linéaire, il est possible que MATLAB exécute le plus rapidement. Je me souviens d’un professeur qui prétendait avoir des applications FORTRAN moins rapides que l’équivalent dans MATLAB. Il y a beaucoup d’études de cas à ce sujet – je vous recommanderais de regarder les différentes études comparant la vitesse qui apparaît dans Google et de les comparer à ce que vous faites pour prendre votre décision.

Avantage:

  1. De nombreuses fonctions mathématiques complexes sont disponibles.
  2. Pour la programmation en mathématiques hardcore.

Désavantage:

  1. Ce n’est pas populaire comparé à d’autres langages modernes comme C #, java, python. vous l’appelez
  2. Puisque vous codez matlab, vous avez tendance à vous concentrer principalement sur la résolution de problèmes mathématiques complexes. D’autres langages sont également utilisés dans les tâches variées, telles que le dessin, le développement Web et les mathématiques (les fonctions mathématiques telles que matlab ne sont pas indispensables)

Un autre avantage que je connais: comme il est optimisé pour la programmation technique, vous pouvez obtenir de meilleures performances lors de la rédaction d’applications sur ce terrain. La performance est très fiable, regardez cette question, elle fournit des informations utiles .

Je pense que MATLAB a beaucoup de limites sur le codage C normal. Je conviens qu’il y a tellement de blocs intégrés qui peuvent être utilisés directement, mais si vous écrivez un code dans MATLAB, cela prendra près de 5 fois plus de temps que le code C, de la définition des variables aux boucles, au changement de cas. dans la modélisation MATLAB

Et supposons que vous ayez créé un modèle à l’aide de Simulink, mais lorsque vous essayez d’append quelque chose, cela prend beaucoup de temps, mais en C, il ne s’agit que d’une tâche de 2 minutes.

Le problème suivant est que vous ne pouvez commenter aucun morceau de modèle comme vous le faites dans d’autres langages de programmation.

Pour un gros projet, il arrive que MATLAB soit écrasé, corrigé, parfois bloqué et que la simulation dans stateflow ressemble à un sh * t.

Au final, je dis juste une chose, qui utilise la modélisation MATLAB (stateflow + simulink) seulement si vous avez beaucoup de patience.

Comme il a été dit ci-dessus, cela dépend de votre application. J’ai essayé de convertir le décodeur (d’un système de communication) il donne des résultats précis mais pour un grand nombre de bits il est plus lent que sa propre version MATLAB. Donc, ma conclusion était de convertir le code MATLAB en C à la main.