主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

一般的なコード生成のワークフロー

機械学習モデルのオブジェクト関数ではない统计和机器学习工具箱™の関数に対する一般的なコード生成のワークフローは,MATLAB®编码器™で説明されているワークフローと同じです。詳細については,MATLAB编码器入門(MATLAB编码器)を参照してください。機械学習モデルのオブジェクト関数のコード生成方法を学ぶには,コード生成の紹介を参照してください。

この例では,次のフローチャートで要約されている一般的なコード生成のワークフローについて簡単に説明します。

エントリポイント関数の定義

“エントリポイント”関数は,コード生成用に定義する関数で,“最上位”関数または "プライマリ"関数とも呼ばれます。codegen(MATLAB编码器)を使用して最上位レベルの関数を呼び出すことはできないので,コード生成に対応する関数を呼び出すエントリポイント関数を定義し,codegenを使用してエントリポイント関数の C/C++コードを生成しなければなりません。エントリポイント関数内のすべての関数がコード生成をサポートしなければなりません。

MATLABのアルゴリズムについてのコードを生成しようとしていることを指示するため,コンパイラ命令% # codegen(またはプラグマ)をエントリポイント関数のシグネチャの後に追加します。この命令を追加すると,コード生成時にエラーになる違反の診断と修正をMATLAB代码分析器が支援します。コードアナライザーによるコードのチェック(MATLAB编码器)を参照してください。

たとえば,位差を使用してデータセットの四分位数間範囲を推定するコードを生成するには、次の関数を定義します。

作用r = iqrCodeGen (x)% # codegen%IQRCODEGEN估计四分位范围% iqrCodeGen返回数据x的四分位范围,%一个单精度或双精度向量。r=iqr(x);结束
入力引数として变长度输入宗量を指定することにより、オプションの入力引数に対応できます。詳細は、可変長引数リストのコード生成 (MATLAB编码器)コード生成用の可変サイズ引数の指定を参照してください。

コードの生成

コンパイラの設定

C / c++コードを生成するには,正しく設定されたコンパイラにアクセスできなければなりません。MATLAB编码器は,サポートされているインストール済みコンパイラを探して使用します。既定のCコンパイラを表示および変更するには,次のように入力します。

墨西哥设置
詳細は,既定のコンパイラの変更を参照してください。

codegenの使用によるコードの生成

コンパイラを設定した後で,codegen(MATLAB编码器)またはMATLAB编码器アプリを使用してエントリポイント関数のコードを生成します。MATLAB编码器アプリを使用してコードを生成する方法については,MATLAB编码器アプリを使用した墨西哥人関数の生成(MATLAB编码器)を参照してください。

コマンドラインでコードを生成するには,codegen(MATLAB编码器)を使用します。Cおよびc++は静的な型の言語なので,エントリポイント関数内のすべての変数のプロパティをコンパイル時に決定しなければなりません。codegenを呼び出すときにarg游戏オプションを使用して,エントリポイント関数のすべての入力についてデータ型とサイズを指定します。

  • データ型と正確な入力配列のサイズを指定するため,特定のデータ型および配列サイズをもつ一連の値を表すMATLAB式を渡します。たとえば,iqrCodeGen.mから生成されたコードは100個の要素がある倍精度数値列ベクトルを受け入れなければならないことを指定するには,次のように入力します。

    testX = randn (100 1);codegeniqrCodeGenarg游戏{testX}报告

    报告フラグは、コード生成レポートを生成します。コード生成レポート(MATLAB编码器)を参照してください。

  • 1つ以上の次元を任意の長さにすることができるよう指定するには,次のようにarg游戏オプションでcoder.typeof(MATLAB编码器)を使用します。

    args {coder.typeof (example_valuesize_vectorvariable_dims)}
    example_valuesize_vectorvariable_dimsの値は,生成されるコードが受け入れることができる入力配列のプロパティを指定します。

    • 入力配列は,example_valueの例の値と同じデータ型です。

    • 対応するvariable_dimsの値がである場合,size_vectorは入力配列の配列サイズです。

    • 対応するvariable_dimsの値が符合事实的である場合,size_vectorは配列サイズの上限です。

    • variable_dimsは,配列の各次元が可変サイズと固定サイズのどちらであるかを指定します。値符合事实的(逻辑1)は対応する次元が可変サイズであることを意味します。値(逻辑0)は対応する次元が固定サイズであることを意味します。

    可変サイズの入力の指定は,コンパイル時に観測値の個数が不明であるデータの場合に便利です。たとえば,iqrCodeGen.mから生成されたコードが任意の長さの倍精度数値列ベクトルを受け入れることができるよう指定するには,次のように入力します。

    testX = coder.typeof(0[正无穷,1][1,0]);codegeniqrCodeGenarg游戏{testX}报告

    MATLABの既定の数値データ型はなので,example_value0という値はデータ型がであることを意味します。size_vector(正,1)という値とvariable_dims(1,0)という値は1番目の次元のサイズが可変で制限がなく,2番目の次元のサイズが1に固定されることを意味します。

    メモ

    可変サイズ入力の指定はパフォーマンスに影響する可能性があります。詳細については,可変サイズの配列に対するメモリ割り当ての制御(MATLAB编码器)を参照してください。

  • サポートされる名前と値のペアの引数などの文字配列を指定するには,编码器。常数(MATLAB编码器)を使用して文字配列を定数として指定します。たとえば,“名字”iqrCodeGen.mの有効な名前と値のペアの引数であり,対応する値价值が数値であるとします。この場合,次のように入力します。

    codegeniqrCodeGenarg游戏{testX, coder.Constant(“名字”),值}报告

詳細については,コマンドラインでのCコードの生成(MATLAB编码器)およびエントリポイント関数の入力のプロパティの指定(MATLAB编码器)を参照してください。

ビルドタイプ

MATLAB编码器は,以下のタイプについてコードを生成できます。

  • 墨西哥人(MATLAB実行可能ファイル)関数

  • スタンドアロンC / c++コード

  • スタティックライブラリにコンパイルされるスタンドアロンC / c++コード

  • ダイナミックリンクライブラリにコンパイルされるスタンドアロンC / c++コード

  • 実行可能ファイルにコンパイルされるスタンドアロンC / c++コード

codegen(MATLAB编码器)配置オプションを使用して,ビルドタイプを指定できます。コード生成オプションの設定の詳細については,ビルド設定の構成(MATLAB编码器)を参照してください。

既定では,codegenは墨西哥人関数を生成します。墨西哥人関数は,MATLABから実行できるC / c++プログラムです。墨西哥人関数を使用すると,MATLABのアルゴリズムを高速化し,生成されたコードの機能と実行時の問題をテストすることができます。詳細は,MATLABアルゴリズムの高速化(MATLAB编码器)MATLABで 墨西哥関数をテストする理由(MATLAB编码器)を参照してください。

コード生成レポート

报告フラグを使用して,コード生成レポートを作成できます。このレポートは,コード生成の問題のデバッグと,生成されたC / c++コードの確認に役立ちます。詳細については,コード生成レポート(MATLAB编码器)を参照してください。

生成されたコードの確認

墨西哥人関数をテストして,生成されたコードが元のMATLABコードと同じ機能を提供するかどうかを確認します。このテストを実行するため,元のMATLABコードの実行に使用したものと同じ入力を使用して墨西哥人関数を実行してから,結果を比較します。スタンドアロンコードを生成する前にMATLABで墨西哥人関数を実行すると,実行時エラーを検出して修正することもできます。生成されたスタンドアロンコードでは,このようなエラーの診断がはるかに困難になります。詳細は,MATLABで 墨西哥関数をテストする理由(MATLAB编码器)を参照してください。

データを渡して,位差iqrCodeGenおよびiqrCodeGen_mexが同じ四分位数間範囲を返すかどうかを確認します。

testX = randn (100 1);r =差(testX);r_entrypoint = iqrCodeGen (testX);r_mex = iqrCodeGen_mex (testX);

isequalを使用して出力を比較します。

isequal (r, r_entrypoint, r_mex)

すべての入力が等しい場合,isequalは逻辑1(真正的)を返します。

テストファイルとcoder.runTest(MATLAB编码器)を使用して墨西哥人関数を確認することもできます。詳細については,MATLABコードから生成されるコードのテスト(MATLAB编码器)を参照してください。

参考

(MATLAB编码器)

関連するトピック