主な機能

MATLAB Coder™ を使用すると、生成されたコードをソース コード、スタティック ライブラリまたはダイナミック ライブラリとしてプロジェクトに統合できます。テンプレートとして用意されている例の main 関数を使用すると、生成されたコードをアプリケーションに統合することが容易になります。また、外部コードをコード生成用の MATLAB コードに統合できます。外部コードは、外部ライブラリ、オブジェクト ファイルまたは C/C++ ソース コードである場合があります。

MATLAB ® Coder™ が生成したコードを Microsoft ® Visual Studio ® の親プロジェクトに統合します。

MATLAB Coder と Embedded Coder® を併用することにより、コード効率性をさらに最適化し、生成されたコードをカスタマイズすることができます。また、ソフトウェアインザループ (SIL) やプロセッサインザループ (PIL) を実行して、生成されたコードの数値動作を検証できます。

MATLAB Coder は Simulink Coder™ と連携して、MATLAB コードを含む Simulink® モデルから C コードを生成します。

また、MATLAB Compiler SDK™ を使用して、MATLAB プログラム (グラフィカル イベントを含む) を C/C++、.NET、Java®、Python® で記述されたカスタム アプリケーションとして統合し、デスクトップ、Web またはエンタープライズ システムに展開できます。MATLAB Central は、これらのアプローチの使用の詳細な比較を提供します。

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

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

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


MATLAB Coder の使用事例

MATLAB Coder により、設計エンジニアが MATLAB でアルゴリズムを開発して、読み取りと移植が可能な C/C++ コードを生成することができます。生成されたコードを使用して、次の作業を実行できます。

  • MATLAB アルゴリズムを、コンパイルされたライブラリ コンポーネントとして、カスタム シミュレーターなどの他のソフトウェアに統合する
  • コンパイルされた C/C++ コードを呼び出す MATLAB 実行可能ファイル (MEX 関数) を生成することにより、MATLAB コードの大量の計算を必要とする部分を高速化する
  • MATLAB アルゴリズムを PC 上のスタンドアロン実行可能ファイルとしてプロトタイプしてから、生成されたコードをソフトウェア エンジニアに設計仕様として伝達する
  • MATLAB アルゴリズムを組み込みプロセッサに実装して検証する
MATLAB ® Coder™ が生成したコードを Microsoft ® Visual Studio ® の親プロジェクトに統合します。
MEX ファイルを生成して、DCTベースの画像圧縮または復元アルゴリズムのシミュレーションを高速化します。
コードを生成してプロトタイプへの実行可能ファイルをデスクトップ PC 上に作成します。
Apple の Xcode IDE を使用して、MATLAB Coder™ が生成したコードを iPhone または iPad アプリケーションに統合します。
MATLAB Coder の使用事例

MATLAB からのコード生成

MATLAB アルゴリズムを C コードに変換するには、実装の要求仕様を指定する必要があります。MATLAB Coder アプリケーションおよび同等のコマンド ライン関数では、MATLAB 言語の開発環境上で、以下のような繰り返し作業を行うことが可能です。

MATLAB Coder は、MATLAB コードを解析して、入力用のデータ型およびサイズを提案することにより、コード生成のための MATLAB アルゴリズムの用意を支援します。MEX 関数を生成することで、アルゴリズムでコードを生成する用意ができていることを確認します。この MEX 関数は MATLAB 内で実行できるようにコンパイルされたコードをラップしたものです。MATLAB Coder では、MATLAB アルゴリズムでコードを生成する準備を整えるために、修正する必要のあるエラーすべてを示すレポートが生成されます。このように、MATLAB アルゴリズムがコード生成に適したものになるまで、エラーの修正と MEX 関数の生成を繰り返し行います。

C または C++ のソース コードのいずれか、または MATLAB アルゴリズムからパフォーマンスが最適になるように調整された MEX 関数を生成できます。

ギャラリーを閲覧する (4 画像)


コードの検証および高速化に対応した MEX 関数の生成

MEX 関数は、次の目的で、元の MATLAB コードの代わりに呼び出すことができます。

  • コンパイルしたコードを MATLAB に戻してテストおよび検証
  • 実行の高速化

3 つのステップの繰り返しワークフローの一部として、MEX 関数を生成およびテストして、元の MATLAB コードと同じ機能をもっていることを検証する必要があります。

コードを生成する前に MEX 関数をテストすることにより、生成されたコードでは診断がより難しくなる実行時エラーを検出および修正することが可能になります。MATLAB で MEX 関数を実行すると、配列境界チェックや次元数チェックなどのメモリ整合性チェックが行われ、MATLAB 関数用に生成されたコードのメモリ整合性違反が検出されます。違反が検出された場合、MATLAB が実行を停止し、診断メッセージが表示されます。

元の MATLAB コードを実行するときに使用したものと同じ入力を使用し、元の MATLAB コードの結果と MEX 関数の結果を比較することにより、MATLAB Coder アプリケーションをテストします。

ギャラリーを閲覧する (2 画像)


MATLAB アルゴリズムの実行の高速化

MATLAB アルゴリズムを高速化する全体的な戦略の一部として、元の MATLAB コードを、生成した MEX 関数で置き換えると実行速度が向上します。

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

達成される高速化の度合いは、アルゴリズムの特性によって異なります。高速化を達成する最適な方法は、ベスト プラクティスに従い、MATLAB Coder を使用して MEX 関数を生成し、高速化を直接テストすることです。アルゴリズムに以下が含まれる場合、高速化が達成される可能性が高くなります。

  • 単精度データ型
  • 固定小数点データ型
  • ステートのあるループ
  • ベクトル化されないコード

一方、fftsvd、IPP または BLAS ライブラリを呼び出す関数、PC 上の MATLAB での実行に最適化された FFT などの関数、またはコードをベクトル化できるアルゴリズムなど、MATLAB の暗黙的なマルチスレッド計算がアルゴリズムに含まれる場合、高速化が達成される可能性が低くなります。

一部のアプリケーションでは、ベクトル化および事前割り当て、System objects™、Parallel Computing Toolbox™ の使用などの異なる手法を MEX 関数生成と組み合わせて、マルチコア プロセッサの利点を活用し、MATLAB アルゴリズムを高速化することができます。

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

OpenMP を使用したマルチコア対応のコード生成

MATLAB Coder は、parfor ループからマルチコア対応のコードを生成できます。MATLAB の標準の for ループと同じように parfor ループは、値の範囲に対して一連のステートメントを実行します。parfor ループの繰り返しが複数のコアで並列して実行されるため、ループの繰り返しは、他の繰り返しに依存することはできません。MATLAB Coder がこの要件が満たされていないと判断した場合、parfor ループは標準の for ループとして扱われます。

MATLAB Coder は、Open Multiprocessing (OpenMP) アプリケーション インターフェイスを使用して、共有メモリと、parfor ループで記述された MATLAB コードからのマルチコア コード生成をサポートします。生成されたコードに対して、OpenMP アプリケーション インターフェイスをサポートするコンパイラを使用する必要があります。MATLAB Coder は使用できる限り多くのコアを使用しますが、使用するスレッドの数を指定することもできます。分散並列性が必要な場合は、Parallel Computing Toolbox を使用してください。

OpenMP を呼び出すことにより生成されたコードの例

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


MATLAB Coder と Simulink Coder

シミュレーションとコード生成のための MATLAB Function ブロックを用いることによって、MATLAB コードを Simulink モデルに統合することができます。Simulink Coder では、MATLAB コードを含むこれらの Simulink モデルからコードを生成できます。

Simulink のレーダー追跡モデル。このモデルは、MATLAB で作成され、MATLAB Function ブロックを使って呼び出された、Kalman フィルター アルゴリズムを実装します。

MATLAB Coder と Embedded Coder

MATLAB Coder と Embedded Coder を併用することにより、コード効率性をさらに最適化し、生成されたコードをカスタマイズすることができます。Embedded Coder は、サポートされている組込みプロセッサ、ターゲット上のラピッド プロトタイピング ボード、量産で使用されるマイクロプロセッサに必要なコードを生成します。また、生成するコードの関数、ファイルおよびデータを細かく調整できる、追加の設定オプションと高度な最適化を提供することにより、MATLAB Coder と Simulink Coder の機能を拡張します。Embedded Coder により、コードの効率性が向上すると同時に、量産で使用されているレガシー コード、データ型、およびキャリブレーション パラメーターとの統合が容易になります。また、SIL や PIL を実行して、生成されたコードの数値動作を検証できます。

ギャラリーを閲覧する (2 画像)