このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
coder.noImplicitExpansionInFunction
説明
coder.noImplicitExpansionInFunction
は、それが呼び出される MATLAB® 関数の生成コードで暗黙的な拡張を無効にします。
暗黙的な拡張を無効にすると、生成コードでの二項演算および二項関数の適用時にオペランドの自動サイズ変更や追加のコード生成が行われず、パフォーマンスも変化しません。暗黙的な拡張を有効にしたコードの生成、生成コードでの暗黙的な拡張の最適化、および基本的な演算で互換性のある配列サイズを参照してください。
coder.noImplicitExpansionInFunction
は、生成コードの二項演算にのみ影響します。この関数では、MATLAB コードでの暗黙的な拡張は無効になりません。特定の二項演算および二項関数を MATLAB で暗黙的な拡張なしで適用するには、coder.sameSizeBinaryOp
を使用します。
例
関数内での暗黙的な拡張の無効化
coder.noImplicitExpansionInFunction
を目的の関数内で呼び出して、その MATLAB 関数の生成コードで暗黙的な拡張を無効にします。暗黙的な拡張を無効にすると、二項演算および二項関数の適用時に以下が発生しません。
サイズに互換性があるオペランドの自動サイズ変更
追加のコード生成
パフォーマンスの変化
この例では、関数 DisableImpExpinFunction
と ImpExpinFunction
で、サイズに互換性がある 2 つのオペランドを加算します。これらのコードは同じですが、前者では暗黙的な拡張を無効にします。DisableImpExpinFunction
の生成コードには、暗黙的な拡張を適用する追加コードは含まれません。ImpExpinFunction
の生成コードには、オペランドのサイズに互換性がある場合に、それらが実行時に暗黙的に拡張可能であれば実行する必要があるループが含まれます。
2 つの関数のコード生成レポートで、out
の値を代入する式のサイズが異なります。
目的の関数内で coder.noImplicitExpansionInFunction
を呼び出して、暗黙的な拡張なしで 2 つのオペランドの和を計算する関数 DisableImpExpinFunction
を定義します。
type DisableImpExpinFunction.m
function out = DisableImpExpinFunction(a,b) coder.noImplicitExpansionInFunction; out = a + b; end
暗黙的な拡張を有効にして 2 つのオペランドの和を計算する関数 ImpExpinFunction
を定義します。
type ImpExpinFunction.m
function out = ImpExpinFunction(a,b) out = a + b; end
これらの関数に対する固定サイズと可変サイズの入力型を定義します。
a = coder.typeof(1,[2 1]); b = coder.typeof(1,[2 inf]);
次のコマンドを使用して関数のコードを生成します。
codegen DisableImpExpinFunction -args {a,b} -config:lib -lang:c++ -report
Code generation successful: To view the report, open('codegen/lib/DisableImpExpinFunction/html/report.mldatx')
codegen ImpExpinFunction.m -args {a,b} -config:lib -lang:c++ -report
Code generation successful: To view the report, open('codegen/lib/ImpExpinFunction/html/report.mldatx')
関数の生成コードの比較
暗黙的な拡張を適用するために、オペランドを自動的に拡張する追加コードが生成コードに導入されます。次のコードは 2 つの関数の生成コードの違いを示しています。
type codegen/lib/DisableImpExpinFunction/DisableImpExpinFunction.cpp
// // Prerelease License - for engineering feedback and testing purposes // only. Not for sale. // File: DisableImpExpinFunction.cpp // // MATLAB Coder version : 24.1 // C/C++ source code generated on : 25-Jan-2024 15:02:33 // // Include Files #include "DisableImpExpinFunction.h" #include "coder_array.h" // Function Definitions // // Arguments : const double a[2] // const coder::array<double, 2U> &b // double out[2] // Return Type : void // void DisableImpExpinFunction(const double a[2], const coder::array<double, 2U> &b, double out[2]) { out[0] = a[0] + b[0]; out[1] = a[1] + b[1]; } // // File trailer for DisableImpExpinFunction.cpp // // [EOF] //
type codegen/lib/ImpExpinFunction/ImpExpinFunction.cpp
// // Prerelease License - for engineering feedback and testing purposes // only. Not for sale. // File: ImpExpinFunction.cpp // // MATLAB Coder version : 24.1 // C/C++ source code generated on : 25-Jan-2024 15:02:37 // // Include Files #include "ImpExpinFunction.h" #include "coder_array.h" #include <emmintrin.h> // Function Definitions // // Arguments : const double a[2] // const coder::array<double, 2U> &b // coder::array<double, 2U> &out // Return Type : void // void ImpExpinFunction(const double a[2], const coder::array<double, 2U> &b, coder::array<double, 2U> &out) { int loop_ub; loop_ub = b.size(1); out.set_size(2, b.size(1)); for (int i{0}; i < loop_ub; i++) { _mm_storeu_pd(&out[2 * i], _mm_add_pd(_mm_loadu_pd(&a[0]), _mm_loadu_pd(&b[2 * i]))); } } // // File trailer for ImpExpinFunction.cpp // // [EOF] //
暗黙的な拡張が有効な場合、ImpExpinFunction
で示されているように、オペランドのサイズを変更する追加コードが生成コードに含まれます。暗黙的な拡張が無効な場合、DisableImpExpinFunction
で示されているように、オペランドにサイズ変更を適用する追加コードは生成コードに含まれていません。
コード生成レポートで出力変数のサイズを比較します。DisableImpExpinFunction
の変数 out
を代入する式のサイズは 2x1
です。
ImpExpinFunction
の変数 out
を代入する式のサイズは 2x:?
です。
バージョン履歴
R2021b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)