Matlab Coder vs. Handcodierung?

Lesezeit: 9 Minuten

Benutzeravatar von s5s
s5s

Einige Hintergrundinformationen für Leute, die dies in Zukunft lesen (falls es nicht gesperrt ist). Ich neige dazu, meine Programmierung in einer Hochsprache zu machen, um das Problem zuerst zu verstehen. Nachdem ich alle möglichen Eckfälle behandelt habe, übersetze ich den Code nach C++ (oder C).

Der meiste Code, den ich schreibe, enthält Mathematik, und daher ist MATLAB die Sprache, die ich verwende (die Alternative für mich ist Python). Jedenfalls übersetze ich dann den Code per Hand von MATLAB nach C++.

Weiß jemand, ob es Vorteile/Nachteile bei der Verwendung von MATLAB Coder gibt? Es ist ein neues Produkt und sehr teuer, aber abgesehen von der Zeitersparnis bei der Übersetzung gibt es noch andere Vorteile?

  • Warum laden Sie nicht einfach die MATLAB Coder-Testversion herunter, sehen, wie sie für Sie funktioniert, und vergleichen die Ergebnisse mit früheren Arbeiten, die Sie durchgeführt haben?

    – mpontes

    7. Juni 2012 um 22:27 Uhr

  • Wie wäre es mit einer Hochsprache, in der man gut arbeiten kann, die sich aber trotzdem sofort in schnellen nativen Code kompilieren lässt? Haskell ist ziemlich gut. C++11 ist auch nicht mehr so ​​schlecht.

    – linksherum

    7. Juni 2012 um 23:02 Uhr


  • Stimmt, aber Matlab hat viele eingebaute Funktionen, die sehr praktisch sind.

    – s5s

    8. Juni 2012 um 20:11 Uhr

  • Inwieweit können Sie tatsächlich Matlab-Code übersetzen, der integrierte Funktionen und/oder Toolboxen verwendet. Ich verstehe, dass es ziemlich viele Einschränkungen gibt.

    – cs0815

    19. Juni 2012 um 13:25 Uhr

  • Wenn Sie den Weg der Handcodierung gehen, sind C++-Bibliotheken/Toolkits wie z Gürteltier kann sehr nützlich sein.

    – mtall

    21. Januar 2014 um 7:36 Uhr

Benutzeravatar von learnvst
lernenvst

Haftungsausschluss

Dies ist ein sehr eigensinniger Beitrag, der auf meiner Erfahrung mit einem bestimmten Projekt basiert. Ich habe nicht die neueste Version des Coders verwendet, aber ich habe Erfahrung mit dem entsprechenden Produkt (Embedded Coder) zum Konvertieren von Matlab-Code in C++, das Teil des früheren Real Time Workshop-Produkts war. Diese Kommentare sollten weiterhin gelten. Ihr Kilometerstand kann variieren.

Frühzeitige Vorteile…

In meiner Situation wurde der eingebettete Coder verwendet, um einen Verarbeitungsblock zu erstellen, der in einen Teil einer größeren Audioanwendung passt. Der Verarbeitungsblock hatte die Aufgabe, einen konstanten Strom von Sample-Pufferspeichern in Echtzeit zu verarbeiten. Ich habe den ursprünglichen Algorithmus in Matlab erstellt, und das Konvertierungstool machte es ziemlich einfach, einen frühen Prototyp in etwas zu konvertieren, das in nativen Code kompiliert und in einer Echtzeitanwendung verwendet werden konnte. Es war auch schön anzunehmen, dass der konvertierte Code numerisch identisch mit dem Original funktionierte, ohne die Möglichkeit menschlicher Fehler im Konvertierungsprozess (unter der Annahme übermenschlicher Fähigkeiten der Mahworks-Ingenieure).

Die Vorteile endeten nach dieser sehr frühen Prototyping-Phase …

Problem 1: Verschwenden Sie Zeit mit Schnittstellen

Als der Algorithmus immer komplexer wurde, machte ich mir immer mehr Gedanken darüber, wie ich die Matlab-Schnittstelle zu der Funktion codieren könnte, damit es nach der Konvertierung einfach wäre, sich mit dem C++-Framework zu verbinden (ich wollte die internen Zustände in Echtzeit überwachen). . Dies beanspruchte schließlich so viel Zeit wie die eigentliche Algorithmusentwicklung selbst, wodurch der Zweck der Verwendung eines solchen Tools zunichte gemacht wurde. Ich hätte den Algorithmus in kleinere Stücke zerlegen und sie dann mit C++ zusammenkleben können, aber dann würde ich die Möglichkeit verlieren, einen direkten Vergleich des vollständigen Algorithmus nur mit Matlab zu haben.

Problem 2: Nicht alle Funktionen werden unterstützt oder vollständig unterstützt

Der Codierer unterstützt a Teilmenge der Matlab-Sprache. In einigen Fällen sind die unterstützten Funktionen in irgendeiner Weise eingeschränkt. In der Anwendung, an der ich arbeitete, wollte ich beispielsweise die Eigenschaften eines Filters in Echtzeit ändern können. Ich konnte die standardmäßigen Filter-Prototyping-Funktionen von Matlab nicht verwenden, da das Codegenerierungstool keine Aufrufe der Filter-Prototyping-Funktion mit variablen Argumenten zuließ. Am Ende habe ich Zeit mit einem DSP-Buch verbracht, um meine eigene Implementierung zu entwickeln, obwohl wir eine Signalverarbeitungs-Toolbox-Lizenz haben.

Problem 3: Automatisch generierter Code war ineffizient

Ich war frustriert über die Schnittstellenprobleme und habe den Algorithmus von Hand in C++ codiert. Für meine Anwendung gab es eine Leistungssteigerung von 75 % zugunsten des handgeschriebenen Codes gegenüber dem konvertierten Code. Die Leistungsunterschiede sind je nach Ihrer Anwendung, wahrscheinlich der Version des verwendeten Konvertierungstools und Ihrer Vorliebe für Ihren Profiler, sehr unterschiedlich. Das Konvertierungstool selbst ist ein komplexes Produkt, das viele Einstellungen erfordert, die es zu erlernen gilt. Der Versuch, herauszufinden, wie die Einstellungen und der Matlab-Code optimiert werden können, um die Leistung zu verbessern, erfordert mehr Zeit, die für das manuelle Codieren aufgewendet werden könnte.

Ich habe das Konvertierungstool nicht mehr verwendet, seit …

Ich bevorzuge jetzt einen weiteren Test-unterstützt sich nähern. Ich programmiere einen Prototypen in Matlab und tüftle, ​​bis ich sicher bin, dass er sich auch so verhält, wie ich es will. Ich denke dann in C++ und rekodiere den Algorithmus auf eine Weise, die für diese Sprache natürlicher ist. Dann erstelle ich eine mex-Datei, die mit meinem C++-Code interagiert, damit ich sie mit meinem vertrauenswürdigen Matlab-Äquivalent testen kann. Für den Problembereich, in dem ich arbeite, ist dies eine viel effizientere (Mensch und Maschine) Möglichkeit, Dinge zu erledigen.

Zusammenfassend ist dies nur die Meinung eines Benutzers. Vielleicht (wie in einem Kommentar zu Ihrem ursprünglichen Beitrag vorgeschlagen) sollten Sie sich für die Testversion anmelden, um zu sehen, wie Sie zurechtkommen. Wenn Sie jedoch ein bisschen ein C++-Ninja sind, erfordert das Testen durch Erstellen von MEX-Dateien keine teure Lizenz für ein Add-On-Produkt, und es wird Sie zu einem besseren Entwickler machen.

  • „Testbegleitung“, wie Sie es nennen, ist gängige Praxis. Behalten Sie den ursprünglichen Matlab-Code für Nicht-Regressionstests bei und Sie haben einen guten und effizienten Arbeitsablauf.

    – Alexander C.

    7. Oktober 2012 um 9:56 Uhr

  • „Automatisch generierter Code war ineffizient“ – erinnern Sie sich, was die Leistungsprobleme im generierten Code waren?

    – jugr

    24. September 2021 um 20:08 Uhr

  • @yugr definitiv nicht fast ein Jahrzehnt später 😅, und sie wären wahrscheinlich irrelevant für das Produkt, das heute auf den Markt kommt, selbst wenn ich mich erinnern könnte

    – lernenvst

    24. September 2021 um 20:10 Uhr

Wenn es für Sie einfacher ist, in MATLAB zu schreiben, würde der Wert stark davon abhängen, wie viel Sie Ihre Zeit schätzen.

Der Leistungsvergleich von MATLAB und C oder C++ ist sehr kompliziert. C oder C++ werden in den meisten Fällen schneller sein, aber in einigen Anwendungen der linearen Algebra ist es möglich, dass MATLAB am schnellsten ausgeführt wird. Ich erinnere mich an einen Professor, der behauptete, er habe FORTRAN-Anwendungen, die langsamer liefen als das Äquivalent in MATLAB. Es gibt viele Fallstudien dazu – ich würde empfehlen, dass Sie sich die verschiedenen Studien ansehen, die die Geschwindigkeit vergleichen, die in Google auftaucht, und sie mit dem vergleichen, was Sie tun, um Ihre Entscheidung zu treffen.

  • Ich glaube nicht, dass er fragt, ob es sich lohnt, von MATLAB auf C umzusteigen, sondern was der beste Ansatz ist.

    – Bakalolo

    24. Februar 2016 um 21:27 Uhr


Benutzeravatar von Mefitico
Mefitico

Es dreht sich alles um den Prozess.

Wo ich arbeite, haben wir ein gutes Verwaltungsschema für unsere Simulink-Modelle und ihre Abhängigkeiten entwickelt. Dann habe ich ein Skript entwickelt, um mit dem Autocodierungsschritt fortzufahren, und ein Kollege hat Projektdateien in einer IDE entwickelt, sodass beim Ausführen meines Skripts alle Quelldateien an eine geeignete Ordnerstruktur gesendet werden und das Projekt problemlos in der IDE kompiliert werden kann , wo jemand anderes auch einen Wrapper-Code bereitgestellt hat, um die automatisch codierte Software zu verbinden.

Der Trick (IMHO) besteht darin, Ihren Prozess so früh wie möglich so gut wie möglich zu automatisieren. Auf diese Weise können Sie sehr komplexe Modelle entwickeln und dann in wenigen Stunden C-Code für die Produktion erstellen. Und Sie können die Modelle nach Belieben aktualisieren, aber der Code bleibt einfach zu warten.

Der Nachteil ist, dass die Einrichtung dieses Prozesses weder trivial noch völlig generisch ist (eine Größe passt nicht für die meisten).

Außerdem sollten Sie wirklich einige Tests durchführen, um sicherzustellen, dass der generierte Code tatsächlich das Modell darstellt, das Sie hatten. Dies ist nicht garantiert, und obwohl ich denke, dass Matlab Coder ziemlich zuverlässig ist, ist es nicht fehlerfrei.

Wie oben gesagt wurde, hängt es von Ihrer Anwendung ab. Ich habe versucht, den Decoder (eines Kommunikationssystems) zu konvertieren, er liefert die genauen Ergebnisse, aber für eine große Anzahl von Bits ist er langsamer als seine eigene MATLAB-Version. Meine Schlussfolgerung war also, MATLAB-Code von Hand in C zu konvertieren.

Benutzeravatar von Dzung Nguyen
Dzung Nguyen

Vorteil:

  1. Es stehen viele komplexe mathematische Funktionen zur Verfügung.
  2. Für Hardcore-Mathematikprogrammierung verwandt.

Nachteil:

  1. Es ist nicht beliebt im Vergleich zu anderen modernen Sprachen wie C #, Java, Python . Sie nennen es.
  2. Da Sie Matlab programmieren, konzentrieren Sie sich hauptsächlich auf die Lösung komplexer mathematischer Probleme. Andere Sprachen werden auch für verschiedene Aufgaben aus dem Zeichnen, der Webentwicklung und der Mathematik verwendet (es gibt sicher keine umfangreichen mathematischen Funktionen wie Matlab).

Ein weiterer Vorteil, den ich kenne: Da es für die technische Programmierung optimiert ist, haben Sie möglicherweise eine bessere Leistung beim Schreiben von Anwendungen in diesem Bereich. Die Leistung ist sehr zuverlässig, werfen Sie einen Blick auf diese Frage, sie enthält einige hilfreiche Informationen.

Benutzeravatar von bakalolo
Bakalolo

Ich denke, MATLAB hat viele Einschränkungen gegenüber der normalen C-Codierung. Ich stimme zu, dass es so viele eingebaute Blöcke gibt, die direkt verwendet werden können, aber wenn Sie einen Code in MATLAB schreiben, dauert es im Vergleich zu C-Code fast fünfmal länger, da es sehr zeitaufwändig ist, Variablen zu definieren, Schleifen zu nehmen und Fälle zu wechseln in der MATLAB-Modellierung

Und nehmen Sie an, Sie haben ein Modell mit Simulink erstellt, aber wenn Sie versuchen, etwas hinzuzufügen, ist es wiederum sehr zeitaufwändig, aber in C dauert es nur 2 Minuten.

Das nächste Problem ist, dass Sie kein Modellstück auskommentieren können, wie Sie es in anderen Programmiersprachen tun.

Bei einem großen Projekt stürzt MATLAB manchmal ab, wird korrigiert, hängt sich manchmal auf und die Simulation im Stateflow ist wie ein Scheiß.

Am Ende sage ich nur eines, dass Sie MATLAB-Modellierung (Stateflow + Simulink) nur verwenden, wenn Sie viel Geduld haben.

1406540cookie-checkMatlab Coder vs. Handcodierung?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy