MEX 関数での定数入力のチェック
MEX 関数の生成時に定数入力の引数を指定すると、既定の設定で、生成された MEX 関数のシグネチャにこの引数が含まれます。MEX 関数の呼び出し時に、定数引数に指定する値がコード生成時に指定された値であるかどうかがチェックされます。
定数入力値をチェックしないか、定数入力の引数が含まれない MEX 関数を生成するには、構成パラメーターをチェックする定数入力を変更します。
MATLAB® Coder™ アプリを使用する場合は、次を行います。
[コード生成] ページで、[ビルド タイプ] を
[MEX]に設定します。[詳細設定] をクリックします。
[すべての設定] タブで、[定数入力] を表のいずれかの値に設定します。
codegenを使用する場合、MEX 構成オブジェクト内でConstantInputsプロパティを表のいずれかの値に設定します。
| 定数入力 (アプリ) | ConstantInputs (構成オブジェクト) | 説明 |
|---|---|---|
|
| この値が既定値です。 MEX 関数の呼び出し時に、定数入力の引数に指定する値がコード生成時に指定された値であるかどうかがチェックされます。 MEX 関数と元の MATLAB 関数を同じ引数を使用して呼び出すことができます。そのため、両方の関数に対して同じテスト ファイルを使用できます。 値をチェックすると、MEX 関数の実行時間に追加される可能性があります。 |
|
| MEX 関数の呼び出し時に、定数入力の引数に指定する値を無視します。コード生成時に指定された値を使用します。 同じテスト ファイルを使用できるため、定数引数の値をチェックするというオーバーヘッドが発生しません。 |
|
| コード ジェネレーターは、MEX 関数のシグネチャから定数入力の引数を削除します。MEX 関数の呼び出し時に、定数入力の引数の値を指定しません。 このオプションは下位互換性のために提供されています。 |
MEX 関数で定数入力の値をチェックするかどうかの制御
以下の例では、ConstantInputs パラメーターを使用して MEX 関数で定数入力の引数の値をチェックするかどうかを制御する方法を示します。
入力の合計を返す関数 myadd を記述します。
function c = myadd(a,b) c = a + b; end
MEX コード生成用の構成オブジェクトを作成します。
mexcfg = coder.config('mex');
定数入力チェックの構成パラメーター ConstantInputs の値を見てみましょう。
mexcfg.ConstantInputs
ans =
'CheckValues'
既定値 CheckValues が設定されています。
MEX 関数 myadd_mex を生成します。最初の引数が double 型のスカラーで、2 番目の引数が値 3 の定数であることを指定します。
codegen myadd -config mexcfg -args {1, coder.Constant(3)}
Code generation successful.
myadd_mex を呼び出します。2 番目の引数に入力 3 を指定しなければなりません。
myadd_mex(1,3)
ans =
4
MEX 関数が入力値とコード生成時に指定された値が一致していることをチェックしないように、ConstantInputs を変更します。
mexcfg.ConstantInputs = 'IgnoreValues';
myadd_mex を生成します。
codegen myadd -config mexcfg -args {1, coder.Constant(3)}
Code generation successful.
3 以外の定数入力値 (たとえば 5) で myadd_mex を呼び出します。
myadd_mex(1,5)
ans =
4
MEX 関数は入力値 5 を無視します。myadd_mex の生成時に定数引数 b に対して指定した値である 3 が使用されます。
MEX 関数のシグネチャに定数入力の引数が含まれないように ConstantInputs を変更します。
mexcfg.ConstantInputs = 'Remove';
myadd_mex を生成します。
codegen myadd -config mexcfg -args {1, coder.Constant(3)}
Code generation successful.
myadd_mex を呼び出します。a に対して値 1 を指定します。定数引数 b に対しては値を指定しないでください。
myadd_mex(1)
ans =
4