responsabilità
Questo è un post molto supponente in base alla mia expirience per un particolare progetto. Non ho usato l'ultima versione del codificatore, ma ho esperienza con il prodotto equivalente (codificatore incorporato) per convertire il codice matlab in C++ che è stato incluso come parte del precedente prodotto Real Time Workshop. Questi commenti dovrebbero ancora essere applicati. Il tuo chilometraggio può variare.
I primi benefici ...
Nella mia situazione, il codificatore incorporato è stato utilizzato per fare un blocco di elaborazione che rientrano in parte di una più ampia applicazione audio. Il blocco di elaborazione aveva il compito di elaborare un flusso costante di buffer di campioni in tempo reale. Ho realizzato l'algoritmo originale in MATLAB e lo strumento di conversione ha reso abbastanza semplice la conversione di un prototipo iniziale in qualcosa che potrebbe essere compilato in codice nativo e utilizzato in un'applicazione in tempo reale.Era anche bello presumere che il codice convertito funzionasse numericamente identicamente all'originale senza possibilità di errore umano nel processo di conversione (assumendo le abilità sovrumane degli ingegneri di Mahworks).
I benefici si è conclusa dopo questa fase di prototipazione molto presto ...
Problema 1: perdere tempo interfacciamento
Come l'algoritmo è cresciuto in complessità, ho cominciato a preoccuparsi sempre di più su come codificare la interfaccia matlab alla funzione in modo tale che dopo la conversione, sarebbe facile interfacciarsi con il framework C++ (volevo monitorare gli stati interni in tempo reale). Questo alla fine ha iniziato ad usare tanto tempo quanto lo sviluppo dell'algoritmo stesso, vanificando così lo scopo di utilizzare tale strumento. Avrei potuto suddividere l'algoritmo in blocchi più piccoli e poi incollarli insieme usando C++, ma poi avrei perso la possibilità di avere un confronto diretto solo con Matlab dell'algoritmo completo.
Problema 2: Non tutte le funzioni sono supportate o supportate pienamente
Il codificatore supporta un subset of the Matlab language. In alcuni casi, le funzioni supportate sono limitate in qualche modo. Ad esempio, nell'applicazione su cui stavo lavorando, volevo essere in grado di modificare le caratteristiche di un filtro in tempo reale. Non ho potuto utilizzare le funzioni standard di prototipazione del filtro Matlab, perché lo strumento di generazione del codice non consentiva chiamate alla funzione di prototipazione del filtro con argomenti variabili. Ho finito col passare del tempo con un libro DSP a sviluppare la mia implementazione, anche se disponevamo di una licenza per strumenti di elaborazione del segnale.
Problema 3: il codice generato automaticamente era inefficiente
ho ottenuto frustrato con i problemi di interfaccia e codificato l'algoritmo a mano in C++. Per la mia applicazione, c'è stato un incremento delle prestazioni del 75% a favore del codice scritto a mano sul codice convertito. Le differenze di prestazioni saranno molto diverse a seconda della tua applicazione, probabilmente della versione dello strumento di conversione utilizzato e della tua passione per il tuo profiler. Lo stesso strumento di conversione è un prodotto complesso con molte impostazioni da apprendere. Cercare di capire come modificare le impostazioni e il codice MATLAB per migliorare le prestazioni richiede più tempo che potrebbe essere dedicato alla codifica manuale.
Non ho usato lo strumento di conversione in quanto ...
ora preferiscono un altro test-approccio assistito. Codigo un prototipo in Matlab e ottimizzo fino a quando sono sicuro che si comporta come lo voglio anch'io. Poi penso in C++ e ricodificato l'algoritmo in un modo che è più naturale di quella lingua. Quindi creo un file mex che si interfaccia con il mio codice C++ in modo da poterlo testare contro il mio equivalente matlab di fiducia. Per lo spazio problematico in cui lavoro, questo è un modo molto più efficiente (umano e automatico) per fare le cose.
In conclusione, questa è solo l'opinione di un utente. Forse (come suggerito in un commento sul tuo post originale) dovresti iscriverti per il processo per vedere come vai d'accordo. Tuttavia, se sei un po 'un ninja C++, il test con la creazione di file mex non richiede una licenza costosa per un prodotto aggiuntivo e ti renderà uno sviluppatore migliore.
Perché non basta scaricare la versione di prova di Coder MATLAB, vedere come funziona per te e confrontare i risultati con il lavoro precedente che hai svolto? – mpontes
Che ne dici di usare un linguaggio di alto livello che sia bello lavorare, ma che compaia ancora per il codice nativo veloce, subito? Haskell è abbastanza buono. C++ 11 non è poi così male neanche. – leftaroundabout
Vero, ma Matlab ha molte funzioni integrate che sono molto convenienti. – s5s