免責事項
これは、ある特定のプロジェクトに対する私の経験に基づく非常に独断的な投稿です。私はコーダーの最新バージョンを使用していませんが、以前の Real Time Workshop 製品の一部として含まれていた、matlab コードを C++ に変換するための同等の製品 (組み込みコーダー) の経験があります。これらのコメントは引き続き適用されます。あなたのマイレージは異なる場合があります。
早期特典・・・
私の状況では、エンベデッド コーダーを使用して、より大きなオーディオ アプリケーションの一部に収まる処理ブロックを作成しました。処理ブロックには、サンプル バッファーの一定のストリームをリアルタイムで処理する役割がありました。元のアルゴリズムは matlab で作成しました。変換ツールを使用すると、初期のプロトタイプを、ネイティブ コードにコンパイルしてリアルタイム アプリケーションで使用できるものに変換することがかなり簡単になりました。また、変換されたコードが数値的に元のコードと同じように機能し、変換プロセスで人為的エラーが発生する可能性がなかった (Mahworks エンジニアの超人的な能力を前提として) と仮定したのも良かったです。
この非常に初期のプロトタイピング段階の後、メリットはなくなりました...
問題 1: インターフェースの無駄遣い
アルゴリズムが複雑になるにつれて、変換後に C++ フレームワークとのインターフェイスが簡単になるように、matlab インターフェイスを関数にコーディングする方法についてますます心配するようになりました (内部状態をリアルタイムで監視したかった)。 . これは最終的に、実際のアルゴリズム開発自体と同じくらい多くの時間を費やすようになり、そのようなツールを使用する目的を無効にしました。アルゴリズムを小さなチャンクに分割し、C++ を使用してそれらを接着することもできましたが、完全なアルゴリズムを直接 Matlab のみで比較する機能が失われてしまいます。
問題 2: すべての機能がサポートされていないか、完全にサポートされているわけではありません
コーダーは、Matlab 言語のサブセットをサポートしています。場合によっては、サポートされる機能が何らかの形で制限されます。たとえば、私が取り組んでいたアプリケーションでは、フィルターの特性をリアルタイムで変更できるようにしたいと考えていました。標準の Matlab フィルター プロトタイピング関数を使用できませんでした。これは、コード生成ツールが可変引数を使用したフィルター プロトタイピング関数の呼び出しを許可しないためです。信号処理ツールボックスのライセンスを持っているにもかかわらず、私は自分自身の実装を開発する DSP の本に時間を費やすことになりました。
問題 3: 自動生成されたコードは非効率的だった
インターフェイスの問題に不満を感じ、アルゴリズムを C++ で手作業でコーディングしました。私のアプリケーションでは、変換されたコードよりも手書きのコードの方が 75% パフォーマンスが向上しました。パフォーマンスの違いは、アプリケーション、おそらく使用する変換ツールのバージョン、およびプロファイラーの好みによって大きく異なります。変換ツール自体は、学ぶべき設定がたくさんある複雑な製品です。パフォーマンスを向上させるために設定と matlab コードを微調整する方法を考えようとすると、ハンド コーディングに費やすことができるより多くの時間がかかります。
それ以来、変換ツールを使用していません...
私は今、よりテスト支援のアプローチを好みます。私は Matlab でプロトタイプをコーディングし、希望どおりに動作することが確実になるまで微調整します。次に、C++ で考え、その言語にとってより自然な方法でアルゴリズムを再コーディングします。次に、C++ コードとインターフェイスする mex ファイルを作成して、信頼できる同等の matlab に対してテストできるようにします。私が取り組んでいる問題領域では、これは (人間と機械の) はるかに効率的な方法で物事を成し遂げることができます。
結論として、これは 1 人のユーザーの意見です。おそらく (元の投稿へのコメントで提案されているように) 試用版にサインアップして、どのようにうまくやっていくかを確認する必要があります. ただし、C++ に少し慣れている場合は、mex ファイルをビルドしてテストすることで、アドオン製品の高価なライセンスを必要とせず、優れた開発者になることができます。