主な機能

MATLAB Coder アプリケーション (左) と、生成された C コードを示すコード生成レポート (右)

多種多様な実行環境

MATLAB Coder™ は、MATLAB コードを効率性が高く、可読性および移植性が良い ANSI/ISO C および C++ コードに変換します。任意の C コンパイラを使用して、生成したコードをコンパイルし、デスクトップ システムからモバイル デバイス、組込みハードウェアまであらゆるハードウェアで実行できます。生成したコードはロイヤリティ フリーなので、商用アプリケーションで顧客に無料配布していただけます。

自動コード生成機能により、低レベル C コードの作成、デバッグ、メンテナンスにかかる時間を短縮し、MATLAB でアルゴリズムの向上のためにより多くの時間を費やすことができます。設計の進行に伴い、MATLAB Coder は生成したコードに変更を自動伝播するため、手動による変換ミスで生じるコストを回避し、反復作業を迅速化して開発期間を短縮できます。MATLAB Coder を使用すると、プロトタイピングと量産の両方でゴールデン リファレンス MATLAB コードを活用して、組織内のワークフローとコミュニケーションの効率化を実現できます。

MATLAB コードから可読性および移植性の良い C および C++ コードを生成します。対応関数は 1,200 を超え、画像処理からコンピューター ビジョン、最先端の DSP や通信システムの開発まで幅広い用途に使用できます。

生成したコードは行列乗算用です。


MATLAB Coder の事例

MATLAB Coder をどのように使いこなしているか、他のユーザーの事例をご覧ください。

  • VivaQuant 社は、心拍モニタリング アルゴリズムから固定小数点 C コードを生成し、ARM®Cortex®-M プロセッサー用にコンパイルしました。
  • Delphi 社は、自動車用レーダー センサー アライメント アルゴリズム向けに C コードを生成し、ARM10 プロセッサー用にコンパイルしました。
  • Respiri 社は、呼吸音モニタリングのアルゴリズムから C コードを生成し、iPhone アプリ、Android™ アプリ、クラウドベース サーバー ソフトウェア用にコンパイルしました。
  • DorsaVi 社は、MATLAB Coder を使用して医療、スポーツ、労働安全衛生アプリケーション用に運動解析アルゴリズムを開発しました。

実行テスト中の DorsaVi 社の ViMove


サポートされているツールボックスと関数

MATLAB Coder は、通常、設計エンジニアが大規模システムのコンポーネントとしてアルゴリズムを開発するために使用する、幅広い MATLAB 言語機能からコードを生成します。MATLAB および関連ツールボックスから 1700 以上の演算子と関数を利用できます。

開発するアルゴリズムに追加の関数や機能が必要な場合は、MATLAB Compiler SDK™を使用するとグラフィカル ユーザー インターフェイスを含む完全なアプリケーションを展開できます。是非ご検討ください(MATLAB Coder と MATLAB Compiler の展開アプローチの違いの詳しい比較をご参照ください)。

コード生成のための MATLAB 言語とツールボックスのサポート


ハードウェアでのプロトタイピング

MATLAB Coder アプリ (または同等のコマンドライン関数) を使用すると、簡単にコードを生成し、使用するハードウェア用にコンパイルできます。信号処理、コンピューター ビジョン、画像処理、制御システムをはじめ、幅広いアプリケーションに対応します。コードを生成し、Raspberry Pi や Arduino® などの組込みプラットフォームでプロトタイピングを実施したり、生成したコードを独自のアプリに統合したりして、iPhone、iPad、Androidデバイスなどのモバイル プラットフォーム上で実行し、ビデオ カメラ、マイク、加速度計などのオンボード センサーにアクセスすることも可能です。エンド ターゲットが Intel® ベースのデスクトップ/ラップトップ PC の場合、生成したコードをスタンドアロン型のスタティック/ダイナミック ライブラリのほか、MATLAB 環境外で実行可能な実行ファイルにコンパイルできます。

デスクトップ PC 上でプロトタイピングを行うためにコードを生成して実行可能ファイルを作成します。
Apple の Xcode IDE を使用して、MATLAB Coder が生成したコードを iPhone または iPad アプリケーションに統合します。

MATLAB Coder と Embedded Coder® を併用すると、プロトタイピングだけでなく、量産までカバーすることができます。プロセッサー固有の機能も利用可能なコードを生成できます。標準的な ANSI/ISO C/C++ コードよりも実行速度に優れています。ARM®Cortex®-A や Cortex®-M プラットフォーム用のライブラリも充実しています。生成したスタンドアロン型コードの実行時間をプロファイリングし、ソフトウェアインザループ (SIL) やプロセッサインザループ (PIL) を実行して、生成したコードの数値的動作を検証できます。トレーサビリティ レポートには、C コードの生成元と MATLAB コードの展開先が双方向リンクで表示されるので、生成したコードを詳細に分析できます。静的なコード メトリクス レポートにより、メモリ使用量を把握できます。

MATLAB Coder とGPU Coder™ を併用すると、NVIDIA®Tesla®や組込み Jetson™ プラットフォームなどの GPU で、深層学習、組込みビジョン、自律システム用の CUDA®コードを生成してプロトタイピングを実施できます。

デスクトップからモバイル、組込みシステムまで、ハードウェア上で簡単にアルゴリズムをプロトタイピング


ソフトウェアとの統合

MATLAB Coder は、シンプルなインターフェイスで C コードを生成し、コードの統合も容易です。生成したコードをソース コード、スタティック ライブラリまたはダイナミック ライブラリとして、MATLAB 外部のデスクトップ、クラウド、モバイル、組込みシステムで実行されるアプリケーションに統合できます。プラットフォーム固有のライブラリ (線型代数向けの LAPACK や高速フーリエ変換向けの FFTW など) を使用すると、最大限のパフォーマンスを発揮します。また、可読性と移植性を最大限に高める純粋なソース コードを生成することも可能です。

MATLAB Coder が生成したコードを Microsoft Visual Studio の親プロジェクトに統合します。
Apple の Xcode IDE を使用して、MATLAB Coder が生成したコードを iPhone または iPad アプリケーションに統合します。

Apple の Xcode IDE を使用して、MATLAB Coder が生成したコードを iPhone または iPad アプリケーションに統合します。

生成されるコードは自動的に C 型を使用するため、外部コードとの統合が容易です。構造体、固定サイズ配列、スカラー、あらゆる数値データ型については、生成されるコードで、対応する C 型が直接使用されます。可変サイズ配列やオブジェクトなどの高度なデータ型は、リッチな C 型とユーティリティ関数を提供し、作業を効率化します。サンプルの main 関数を生成すると、生成したコードの呼び出し方が分かります。ソフトウェア環境のニーズに応じて、行優先または列優先順で配列を生成することができます。コピーや転置を使用せずに外部画像処理ライブラリ (OpenCV など) に統合する場合は、行優先配列レイアウトを選択します。

既存の信頼できる C ライブラリやコンポーネントがある場合、MATLAB に統合すれば MEX 関数生成を使用して MATLAB 環境でより忠実度の高いテストを実施できます。その後、coder.ceval を使用して、生成したコードから当該コンポーネントを呼び出すことも可能です。

MATLAB で手入力した C コードの単体テストを実行し、C コードに変更を加えるとユニット テスト エラーが発生するか否かをチェックします。MATLAB で使用可能な可視化ツールやその他のツールを使用すると、コードの挙動がよくわかります。

MATLAB Coder と Embedded Coder を併用することにより、生成したコードの外観を調整できます。会社のコーディング基準を、カスタム #define 命令およびファイル/関数バナーと照合します。MISRA に準拠したコードが必要な場合、単一のパネルから準拠レベルを最大限に高めるようコード生成をカスタマイズできます。対話型のトレーサビリティ レポートを参照すると、MATLAB コードと生成した C コードの対応状況を詳細に分析できます。

MATLAB Coder と Embedded Coder を併用する対話型のトレーサビリティ レポート


生成したコードのパフォーマンス最適化

MATLAB Coder は、生成したコードに最適化を自動的に適用するため、追加設定なしに最高の結果を得ることができます。また、実行速度、メモリ使用量、可読性、移植性のトレードオフを調整することもできます。プロファイリング ツールを使用すると、コードのパフォーマンスを確認し、ボトルネックを特定できます。

さらに高速化するため、サードパーティのライブラリを活用することもできます。たとえば、ターゲット環境で LAPACK や FFTW などの最適化済みライブラリを使用できる場合、これらを呼び出すコードを任意で生成できます。アルゴリズムの最も重要な部分では C コードを手入力し、他の部分は MATLAB Coder に生成させることも可能です。

共有メモリのマルチコア コードを parfor ループから生成し、OpenMP アプリケーション インターフェイスをサポートするコンパイラでコンパイルします。分散並列処理には Parallel Computing Toolbox™ を使用できます。

MATLAB Coder と Embedded Coder を併用すると、特定のプロセッサーを高速実行するプロセッサー固有の内部パラメーター関数を呼び出すことで、生成したコードをさらに最適化できます。ARM®Cortex-A や Cortex-M プラットフォーム用のライブラリも充実しています。

OpenMP を呼び出す生成コードの例


統合の前に生成したコードで MATLAB テストを再利用

既存の MATLAB テストを使用し、アプリケーションに統合する前に生成したコードの動作を検証します。結果は対話型の MATLAB 環境で簡単に評価できます。MATLAB ユニット テスト フレームワーク (MATLAB に実装) を使用すると、多種多様な回帰テストを簡単に開発できます。MATLAB Coder は MATLAB ユニット テストを確認し、計測機能を使用して生成した C コードを検証します。計測機能により、ランタイム エラーを繰り返し可能な方法で明確に診断し、間違ったコードが MATLAB を停止させないように予防できます。

MATLAB ユニット テスト フレームワークを使用し、MATLAB コードに変更を加えたときに、MATLAB Coder によって生成された C コードでユニット テスト エラーが発生するかどうかをチェックします。

MATLAB Coder と Embedded Coder を併用すると、SIL と PIL を実行して、ホストおよびターゲット プラットフォームで最終的に生成したコードの数値的動作を検証できます。

アプリケーションに統合する前に生成したコードの動作を検証


アルゴリズムの高速化

MATLAB アルゴリズムの高速化を図る手段の一環として、MATLAB Coder を使用して C コードを生成し、正規の MATLAB 関数 (MEX 関数として) を呼び出せるようにパッケージ化できます。

MEX ファイルを生成して、DCT ベースの画像圧縮または伸張アルゴリズムのシミュレーションを高速化します。

実際の高速化は、MATLAB コードの性質に応じて異なります。通常、MATLAB で最適化された数値ルーチンと高度にベクトル化されたコードは、コード生成によって高速化できません。ループ、構造体、固定小数点型のコードでは、一般に大きなメリットがあります。parfor ループを含むコードは、使用する C コンパイラが OpenMP 標準をサポートしている場合にマルチコアを利用できます。生成した MEX 関数実行時間をプロファイリングし、ボトルネックを特定して最適化作業に集中することができます。

一部のアプリケーションでは、ベクトル化と事前割り当て、System objects™、Parallel Computing Toolbox などの複数の手法を MEX 関数の生成と組み合わせて高速化を実現できます。

MATLAB Coder と GPU Coder を併用すると、アルゴリズムの並列処理可能な部分を GPU で実行することで、実行速度を向上できます。

MATLAB Compiler または MATLAB Compiler SDK を使用してスタンドアロン型アプリケーションを展開する場合、重要なコンポーネントを MATLAB Coder によって生成された MEX 関数 と置き換えることで、展開したアプリケーションのパフォーマンスを高速化できます。

この Web セミナーでは、さまざまな手法を使用して、MATLAB および Simulink の通信システム シミュレーションを高速化する方法を紹介します。

Simulink CoderEmbedded Coder を使用して、MATLAB Coder の機能を拡張できます。