web-dev-qa-db-ja.com

Matlab Coder対ハンドコーディング?

これを将来読む人のための背景(ロックされていない場合)。私は、まず問題を理解するために、高級言語でプログラミングをする傾向があります。考えられるすべてのコーナーケースをカバーした後、コードをC++(またはC)に変換します。

私が書くコードのほとんどには数学が含まれているので、MATLABは私が使用する言語です(私にとっての代替はPythonです)。とにかく、コードをMATLABからC++に手動で変換します。

誰かがMATLAB Coderを使用することに利点/欠点があるかどうか知っていますか?それは新製品であり、非常に高価ですが、翻訳にかかる時間を除いて、他に何か利点がありますか?

43
s5s

免責事項

これは、ある特定のプロジェクトに対する私の経験に基づいて非常に意見が分かれた投稿です。私は最新バージョンのコーダーを使用していませんが、以前のReal Time Workshop製品の一部として含まれていた、MATLABコードをC++に変換するための同等の製品(組み込みコーダー)を使用できました。これらのコメントは引き続き適用されます。あなたのマイレージは異なる場合があります。

早期特典...

私の状況では、組み込みのコーダーを使用して、より大きなオーディオアプリケーションの一部に適合する処理ブロックを作成しました。処理ブロックには、サンプルバッファーの一定のストリームをリアルタイムで処理する役割がありました。私は元のアルゴリズムをmatlabで作成し、変換ツールを使用すると、初期のプロトタイプをネイティブコードにコンパイルしてリアルタイムアプリケーションで使用できるものに変換するのがかなり簡単になりました。 (Mahworksエンジニアの超人的能力を想定して)変換プロセスで人的エラーが発生する可能性がなく、変換されたコードが元のコードと数値的に同じように機能していると想定することも良かったです。

この非常に初期のプロトタイピング段階の後でメリットは終了しました...

問題1:時間の浪費

アルゴリズムが複雑になるにつれて、変換後のC++フレームワークとのインターフェースが容易になるように、MATLABインターフェースを関数にコード化する方法についてますます心配になり始めました(リアルタイムで内部状態を監視したいと思いました) 。これにより、最終的には実際のアルゴリズム開発自体と同じだけの時間が使用されるようになり、そのようなツールを使用する目的が無効になりました。アルゴリズムを小さなチャンクに分解し、C++を使用してそれらを接着することもできましたが、完全なアルゴリズムをMatlabのみで直接比較する機能が失われました。

問題2:すべての機能がサポートされている、または完全にサポートされているわけではない

コーダーは Matlab言語のサブセット をサポートします。場合によっては、サポートされる機能が何らかの方法で制限されます。たとえば、現在取り組んでいるアプリケーションで、フィルターの特性をリアルタイムで変更できるようにしたいと考えました。標準のMatlabフィルタープロトタイピング関数を使用できませんでした。コード生成ツールでは、可変引数を使用してフィルタープロトタイピング関数を呼び出すことができないためです。信号処理ツールボックスのライセンスがあるにもかかわらず、私は自分で実装を開発するDSPブックに時間を費やしてしまいました。

問題3:自動生成されたコードが非効率的だった

インターフェイスの問題に不満を感じ、C++で手動でアルゴリズムをコーディングしました。私のアプリケーションでは、変換されたコードよりも手書きのコードのほうが75%パフォーマンスが向上しました。パフォーマンスの違いは、アプリケーション、おそらく使用する変換ツールのバージョン、およびプロファイラーの好みによって大きく異なります。変換ツール自体は、学ぶべき多くの設定を持つ複雑な製品です。パフォーマンスを改善するために設定とMatlabコードを微調整する方法を理解しようとすると、手動コーディングに費やされる可能性があるより多くの時間が使用されます。

以来、変換ツールを使用していません...

私は今よりテスト支援アプローチを好みます。プロトタイプをMatlabとTweakでコーディングし、期待どおりに動作することを確認します。次にC++で考え、その言語にとってより自然な方法でアルゴリズムを再コーディングします。次に、C++コードとインターフェイスするmexファイルを作成して、信頼できるmatlab同等のものに対してテストできるようにします。私が作業している問題空間では、これは物事を行うためのはるかに効率的な(人間と機械)方法です。

結論として、これは1人のユーザーの意見にすぎません。おそらく(元の投稿へのコメントで示唆されているように)試用版にサインアップして、うまくいくかどうかを確認する必要があります。ただし、少しC++の忍者である場合、mexファイルをビルドしてテストするためにアドオン製品の高価なライセンスを必要としないので、より優れた開発者になります。

45
learnvst

MATLABで書く方が簡単な場合、その値は時間をどれだけ重視するかに大きく依存します。

パフォーマンスのためのMATLABとCまたはC++の比較は非常に複雑です。 CまたはC++はほとんどの場合高速ですが、一部の線形代数アプリケーションでは、MATLABが最も高速に実行される可能性があります。私は、MATLABの同等のアプリケーションよりも実行速度が遅いFORTRANアプリケーションがあると主張した教授を覚えています。これには多くのケーススタディがあります-グーグルで現れるスピードを比較するさまざまなスタディを見て、あなたの決定を下すためにあなたがしていることとそれらを比較することをお勧めします。

2
dbeer

それはすべてプロセスについてです。

私が働いている場所では、Simulinkモデルとその依存関係の適切な管理スキームを開発しました。次に、自動コーディング手順を進めるスクリプトを開発し、同僚がIDEでプロジェクトファイルを開発したので、スクリプトを実行すると、すべてのソースファイルが適切なフォルダー構造にディスパッチされ、プロジェクトをIDEで簡単にコンパイルできます。 、他の誰かが自動コード化されたソフトウェアをインターフェイスするためのラッパーコードもデプロイしました。

トリック(IMHO)は、できるだけ早くプロセスを自動化することです。そうすることで、非常に複雑なモデルを開発し、数時間で本番用のCコードを作成できます。また、モデルは好きなように更新できますが、コードの保守は簡単です。

欠点は、このプロセスの設定が簡単でも完全に一般的でもないことです(1つのサイズではほとんど適合しません)。

また、実際にテストを実施して、生成されたコードが実際に使用したモデルを表していることを確認する必要があります。これは保証されていません。MatlabCoderはかなり信頼できると思いますが、エラーがないわけではありません。

1
Mefitico

利点:

  1. 多くの複雑な数学関数が利用可能です。
  2. ハードコア数学プログラミング関連。

不利益:

  1. C#、Java、pythonのような他の現代の言語と比較して人気がありません。名前を付けてください。
  2. MATLABをコーディングするため、主に複雑な数学の問題の解決に焦点を当てる傾向があります。別の言語は、描画、Web開発、数学などのさまざまなタスクでも使用されます(確かに、MATLABのような豊富な数学関数はありません)。

私が知っているもう1つの利点:テクニカルプログラミング用に最適化されているため、このフィールドでアプリケーションを作成すると、パフォーマンスが向上する可能性があります。パフォーマンスは非常に信頼できます。この質問を見てください。これは いくつかの役立つ情報 を提供します。

0
Dzung Nguyen

上で述べたように、それはあなたのアプリケーションに依存します。 (通信システムの)デコーダーを変換しようとしましたが、正確な結果が得られますが、ビット数が多いと、独自のMATLABバージョンよりも遅くなります。したがって、私の結論は、MATLABコードを手動でCに変換することでした。

0
user1285170

MATLABには、通常のCコーディングに対して多くの制限があると思います。直接使用できる組み込みブロックが非常に多いことに同意しますが、MATLABでコードを記述する場合、変数の定義からループの取得、ケースの切り替え、非常に時間がかかるため、Cコードに比べて5倍近く時間がかかります。 MATLABモデリング

そして、Simulinkを使用してモデルを作成したが、何かを追加しようとすると、非常に時間がかかりますが、Cでは2分のタスクです。

次の問題は、他のプログラミング言語のようにモデルのどの部分もコメント化できないことです。

大きなプロジェクトの場合、MATLABがクラッシュしたり、破損したり、ハングしたり、stateflowでのシミュレーションがsh * tのようになることがあります。

結局のところ、忍耐力がたくさんある場合にのみ、MATLABモデリング(stateflow + simulink)を使用するということを1つだけ言います。

0
Gulshan