MATLAB Coder – User’s Guide
اسم المؤلف
MathWorks
التاريخ
المشاهدات
2106
التقييم
(لا توجد تقييمات)
Loading...
التحميل

MATLAB Coder – User’s Guide
MathWorks
About MATLAB Coder
1
MATLAB Coder Product Description 1-2
Product Overview 1-3
When to Use MATLAB Coder 1-3
Code Generation for Embedded Software Applications . 1-3
Code Generation for Fixed-Point Algorithms . 1-3
Design Considerations for C/C++ Code Generation
2
When to Generate Code from MATLAB Algorithms 2-2
When Not to Generate Code from MATLAB Algorithms . 2-2
Which Code Generation Feature to Use 2-3
Prerequisites for C/C++ Code Generation from MATLAB . 2-4
MATLAB Code Design Considerations for Code Generation . 2-5
See Also 2-5
Differences Between Generated Code and MATLAB Code . 2-6
Functions that have Multiple Possible Outputs . 2-7
Writing to ans Variable . 2-7
Logical Short-Circuiting 2-7
Loop Index Overflow . 2-8
Indexing for Loops by Using Single Precision Operands 2-9
Index of an Unentered for Loop . 2-10
Character Size 2-11
Order of Evaluation in Expressions . 2-11
Name Resolution While Constructing Function Handles . 2-12
Termination Behavior . 2-13
Size of Variable-Size N-D Arrays . 2-13
Size of Empty Arrays . 2-14
Size of Empty Array That Results from Deleting Elements of an Array . 2-14
Binary Element-Wise Operations with Single and Double Operands . 2-14
Floating-Point Numerical Results 2-15
NaN and Infinity . 2-15
Negative Zero 2-16
Code Generation Target . 2-16
MATLAB Class Property Initialization . 2-16
vii
ContentsMATLAB Classes in Nested Property Assignments That Have Set Methods
. 2-16
MATLAB Handle Class Destructors . 2-17
Variable-Size Data . 2-17
Complex Numbers . 2-17
Converting Strings with Consecutive Unary Operators to double 2-17
Display Function . 2-17
Potential Differences Reporting . 2-20
Addressing Potential Differences Messages 2-20
Disabling and Enabling Potential Differences Reporting for MATLAB Coder
. 2-20
Disabling and Enabling Potential Differences Reporting for Fixed-Point
Designer . 2-21
Potential Differences Messages . 2-22
Automatic Dimension Incompatibility . 2-22
mtimes No Dynamic Scalar Expansion 2-22
Matrix-Matrix Indexing 2-23
Vector-Vector Indexing 2-23
Loop Index Overflow 2-24
MATLAB Language Features Supported for C/C++ Code Generation . 2-26
MATLAB Features That Code Generation Supports . 2-26
MATLAB Language Features That Code Generation Does Not Support 2-27
Functions, Classes, and System Objects Supported for Code
Generation
3
Functions and Objects Supported for C/C++ Code Generation . 3-2
Defining MATLAB Variables for C/C++ Code Generation
4
Variables Definition for Code Generation 4-2
Best Practices for Defining Variables for C/C++ Code Generation 4-3
Define Variables By Assignment Before Using Them . 4-3
Use Caution When Reassigning Variables . 4-5
Use Type Cast Operators in Variable Definitions 4-5
Define Matrices Before Assigning Indexed Variables . 4-5
Index Arrays by Using Constant Value Vectors . 4-5
Eliminate Redundant Copies of Variables in Generated Code 4-7
When Redundant Copies Occur . 4-7
How to Eliminate Redundant Copies by Defining Uninitialized Variables
4-7
Defining Uninitialized Variables 4-7
viii ContentsReassignment of Variable Properties 4-9
Reuse the Same Variable with Different Properties . 4-10
When You Can Reuse the Same Variable with Different Properties . 4-10
When You Cannot Reuse Variables . 4-10
Limitations of Variable Reuse . 4-11
Supported Variable Types 4-13
Edit and Represent Coder Type Objects and Properties 4-14
Object Properties 4-14
Legacy Representation of Coder Type Objects 4-15
Defining Data for Code Generation
5
Data Definition Considerations for Code Generation . 5-2
Code Generation for Complex Data . 5-8
Restrictions When Defining Complex Variables . 5-8
Code Generation for Complex Data with Zero-Valued Imaginary Parts 5-8
Results of Expressions That Have Complex Operands . 5-11
Results of Complex Multiplication with Nonfinite Values . 5-11
Encoding of Characters in Code Generation . 5-12
Array Size Restrictions for Code Generation 5-13
Code Generation for Constants in Structures and Arrays 5-14
Code Generation for Strings 5-16
Limitations . 5-16
Differences Between Generated Code and MATLAB Code 5-16
Define String Scalar Inputs 5-17
Define String Scalar Types at the Command Line 5-17
Define String Scalar Inputs in the MATLAB Coder App 5-18
Code Generation for Sparse Matrices 5-19
Sparse Data Types in Generated Code 5-19
Input Definition . 5-19
Code Generation Guidelines 5-20
Code Generation Limitations . 5-21
Specify Array Layout in Functions and Classes . 5-22
Specify Array Layout in a Function . 5-22
Query Array Layout of a Function 5-23
Specify Array Layout in a Class 5-23
Code Design for Row-Major Array Layout . 5-26
Understand Potential Inefficiencies Caused by Array Layout 5-26
Linear Indexing Uses Column-Major Array Layout . 5-28
ixCode Generation for Variable-Size Data
6
Code Generation for Variable-Size Arrays 6-2
Memory Allocation for Variable-Size Arrays . 6-2
Enabling and Disabling Support for Variable-Size Arrays . 6-3
Variable-Size Arrays in a Code Generation Report . 6-3
Control Memory Allocation for Variable-Size Arrays . 6-4
Provide Upper Bounds for Variable-Size Arrays . 6-4
Disable Dynamic Memory Allocation . 6-4
Configure Code Generator to Use Dynamic Memory Allocation for Arrays
Bigger Than a Threshold 6-4
Specify Upper Bounds for Variable-Size Arrays . 6-6
Specify Upper Bounds for Variable-Size Inputs . 6-6
Specify Upper Bounds for Local Variables . 6-6
Define Variable-Size Data for Code Generation . 6-8
Use a Matrix Constructor with Nonconstant Dimensions 6-8
Assign Multiple Sizes to the Same Variable 6-8
Define Variable-Size Data Explicitly by Using coder.varsize 6-9
Diagnose and Fix Variable-Size Data Errors . 6-12
Diagnosing and Fixing Size Mismatch Errors . 6-12
Diagnosing and Fixing Errors in Detecting Upper Bounds 6-14
Incompatibilities with MATLAB in Variable-Size Support for Code
Generation 6-15
Incompatibility with MATLAB for Scalar Expansion . 6-15
Incompatibility with MATLAB in Determining Size of Variable-Size N-D
Arrays 6-16
Incompatibility with MATLAB in Determining Size of Empty Arrays 6-16
Incompatibility with MATLAB in Determining Class of Empty Arrays 6-18
Incompatibility with MATLAB in Matrix-Matrix Indexing . 6-18
Incompatibility with MATLAB in Vector-Vector Indexing . 6-19
Incompatibility with MATLAB in Matrix Indexing Operations for Code
Generation . 6-19
Incompatibility with MATLAB in Concatenating Variable-Size Matrices 6-20
Differences When Curly-Brace Indexing of Variable-Size Cell Array Inside
Concatenation Returns No Elements 6-20
Variable-Sizing Restrictions for Code Generation of Toolbox Functions
. 6-22
Common Restrictions . 6-22
Toolbox Functions with Restrictions for Variable-Size Data . 6-23
Generate Code With Implicit Expansion Enabled . 6-27
Output Size 6-27
Additional Code Generation 6-27
Performance Variation 6-29
x ContentsOptimize Implicit Expansion in Generated Code . 6-31
Disable Implicit Expansion in Specified Function by Using
coder.noImplicitExpansionInFunction . 6-33
Disable Implicit Expansion for Specific Binary Operation by Using
coder.sameSizeBinaryOp 6-34
Disable Implicit Expansion in your Project . 6-35
Representation of Arrays in Generated Code 6-36
Customize Interface Generation . 6-38
Control Memory Allocation for Fixed-Size Arrays . 6-40
Enable Dynamic Memory Allocation for All Fixed-Size Arrays . 6-40
Enable Dynamic Memory Allocation for Arrays Bigger Than a Threshold
. 6-40
Resolve Error: Size Mismatches . 6-42
Issue . 6-42
Possible Solutions 6-42
Code Generation for MATLAB Structures
7
Structure Definition for Code Generation 7-2
Structure Operations Allowed for Code Generation 7-3
Define Scalar Structures for Code Generation 7-4
Restrictions When Defining Scalar Structures by Assignment 7-4
Adding Fields in Consistent Order on Each Control Flow Path 7-4
Restriction on Adding New Fields After First Use . 7-4
Define Arrays of Structures for Code Generation 7-6
Ensuring Consistency of Fields . 7-6
Using repmat to Define an Array of Structures with Consistent Field
Properties 7-6
Defining an Array of Structures by Using struct 7-6
Defining an Array of Structures Using Concatenation 7-7
Index Substructures and Fields 7-8
Assign Values to Structures and Fields . 7-10
Code Generation for Categorical Arrays
8
Code Generation for Categorical Arrays . 8-2
Define Categorical Arrays for Code Generation . 8-2
Allowed Operations on Categorical Arrays 8-2
MATLAB Toolbox Functions That Support Categorical Arrays 8-3
xiDefine Categorical Array Inputs 8-6
Define Categorical Array Inputs at the Command Line . 8-6
Define Categorical Array Inputs in the MATLAB Coder App 8-6
Representation of Categorical Arrays 8-7
Categorical Array Limitations for Code Generation 8-9
Code Generation for Cell Arrays
9
Code Generation for Cell Arrays 9-2
Homogeneous vs. Heterogeneous Cell Arrays 9-2
Controlling Whether a Cell Array Is Homogeneous or Heterogeneous 9-2
Naming the Structure Type That Represents a Heterogeneous Cell Array in
the Generated Code . 9-3
Cell Arrays in Reports 9-3
Control Whether a Cell Array Is Variable-Size 9-5
Define Cell Array Inputs 9-7
Cell Array Limitations for Code Generation 9-8
Cell Array Element Assignment . 9-8
Variable-Size Cell Arrays 9-9
Definition of Variable-Size Cell Array by Using cell 9-9
Cell Array Indexing . 9-12
Growing a Cell Array by Using {end + 1} 9-13
Cell Array Contents 9-14
Passing Cell Arrays to External C/C++ Functions 9-14
Code Generation for Datetime Arrays
10
Code Generation for Datetime Arrays 10-2
Define Datetime Arrays for Code Generation . 10-2
Allowed Operations on Datetime Arrays . 10-2
MATLAB Toolbox Functions That Support Datetime Arrays . 10-2
Define Datetime Array Inputs . 10-5
Define Datetime Array Inputs at the Command Line 10-5
Define Datetime Array Inputs in the MATLAB Coder App 10-5
Representation of Datetime Arrays . 10-6
Datetime Array Limitations for Code Generation . 10-7
xii ContentsCode Generation for Duration Arrays
11
Code Generation for Duration Arrays 11-2
Define Duration Arrays for Code Generation 11-2
Allowed Operations on Duration Arrays . 11-2
MATLAB Toolbox Functions That Support Duration Arrays . 11-3
Define Duration Array Inputs . 11-6
Define Duration Array Inputs at the Command Line 11-6
Define Duration Array Inputs in the MATLAB Coder App . 11-6
Representation of Duration Arrays . 11-7
Duration Array Limitations for Code Generation . 11-8
Code Generation for Tables
12
Code Generation for Tables 12-2
Define Tables for Code Generation . 12-2
Allowed Operations on Tables . 12-2
MATLAB Toolbox Functions That Support Tables 12-3
Define Table Inputs . 12-5
Define Table Inputs at the Command Line 12-5
Define Table Inputs in the MATLAB Coder App 12-5
Representation of Tables 12-6
Table Limitations for Code Generation . 12-8
Creating Tables Limitations 12-8
Modifying Tables Limitations . 12-8
Using Table Functions Limitations 12-10
Code Generation for Timetables
13
Code Generation for Timetables 13-2
Define Timetables for Code Generation 13-2
Allowed Operations on Timetables . 13-2
MATLAB Toolbox Functions That Support Timetables . 13-3
Define Timetable Inputs . 13-6
Define Timetable Inputs at the Command Line 13-6
Define Timetable Inputs in the MATLAB Coder App 13-6
Representation of Timetables . 13-7
Timetable Limitations for Code Generation . 13-9
Creating Timetables Limitations . 13-9
xiiiModifying Timetables Limitations . 13-10
Using Timetable Functions Limitations . 13-12
Code Generation for Enumerated Data
14
Code Generation for Enumerations 14-2
Define Enumerations for Code Generation . 14-2
Allowed Operations on Enumerations . 14-4
MATLAB Toolbox Functions That Support Enumerations . 14-5
Customize Enumerated Types in Generated Code 14-7
Specify a Default Enumeration Value . 14-8
Specify a Header File . 14-8
Include Class Name Prefix in Generated Enumerated Type Value Names
. 14-9
Generate C++11 Code Containing Ordinary C Enumeration . 14-10
Code Generation for MATLAB Classes
15
MATLAB Classes Definition for Code Generation . 15-2
Language Limitations . 15-2
Code Generation Features Not Compatible with Classes . 15-3
Defining Class Properties for Code Generation 15-4
Inheritance from Built-In MATLAB Classes Not Supported . 15-6
Classes That Support Code Generation . 15-7
Generate Code for MATLAB Value Classes 15-8
Generate Code for MATLAB Handle Classes and System Objects . 15-12
Code Generation for Handle Class Destructors . 15-15
Guidelines and Restrictions . 15-15
Behavioral Differences of Objects in Generated Code and in MATLAB 15-16
Class Does Not Have Property . 15-18
Solution 15-18
Passing By Reference Not Supported for Some Properties 15-20
Handle Object Limitations for Code Generation . 15-21
A Variable Outside a Loop Cannot Refer to a Handle Object Allocated Inside
a Loop . 15-21
A Handle Object That a Persistent Variable Refers To Must Be a Singleton
Object . 15-22
References to Handle Objects Can Appear Undefined 15-23
xiv ContentsSystem Objects in MATLAB Code Generation . 15-25
Usage Rules and Limitations for System Objects for Generating Code 15-25
System Objects in codegen 15-27
System Objects in the MATLAB Function Block . 15-27
System Objects in the MATLAB System Block 15-27
System Objects and MATLAB Compiler Software . 15-27
Specify Objects as Inputs at the Command Line 15-28
Consistency Between coder.ClassType Object and Class Definition File
15-29
Limitations for Using Objects as Entry-Point Function Inputs 15-29
Specify Objects as Inputs in the MATLAB Coder App . 15-31
Automatically Define an Object Input Type 15-31
Provide an Example . 15-31
Consistency Between the Type Definition and Class Definition File 15-32
Limitations for Using Objects as Entry-Point Function Inputs 15-32
Work Around Language Limitation: Code Generation Does Not Support
Object Arrays . 15-34
Issue 15-34
Possible Solutions . 15-34
Generating C++ Classes
16
Generate C++ Classes for MATLAB Classes . 16-2
Example: Generate Code for a Handle Class That Has Private and Public
Members 16-2
Additional Usage Notes and Limitations . 16-5
Code Generation for Function Handles
17
Function Handle Limitations for Code Generation 17-2
Code Generation for Deep Learning Arrays
18
Code Generation for dlarray 18-2
Define dlarray for Code Generation 18-2
dlarray Object Functions with Code Generation Support . 18-3
Deep Learning Toolbox Functions with dlarray Code Generation Support
. 18-4
MATLAB Functions with dlarray Code Generation Support . 18-4
xvdlarray Limitations for Code Generation . 18-12
Recommended Usage 18-12
Limitations 18-12
Defining Functions for Code Generation
19
Code Generation for Variable Length Argument Lists . 19-2
Generate Code for arguments Block That Validates Input Arguments
. 19-3
Supported Features 19-3
Input Type Specification and arguments blocks . 19-3
Specify Number of Entry-Point Function Input or Output Arguments to
Generate 19-5
Control Number of Input Arguments 19-5
Control the Number of Output Arguments . 19-6
Code Generation for Anonymous Functions . 19-8
Anonymous Function Limitations for Code Generation 19-8
Code Generation for Nested Functions . 19-9
Nested Function Limitations for Code Generation 19-9
Calling Functions for Code Generation
20
Resolution of Function Calls for Code Generation 20-2
Key Points About Resolving Function Calls . 20-2
Compile Path Search Order 20-2
When to Use the Code Generation Path . 20-2
Resolution of File Types on Code Generation Path 20-4
Compilation Directive %#codegen . 20-5
Use MATLAB Engine to Execute a Function Call in Generated Code . 20-6
When To Declare a Function as Extrinsic 20-6
Use the coder.extrinsic Construct 20-7
Call MATLAB Functions Using feval 20-9
Working with mxArrays . 20-9
Restrictions on Using Extrinsic Functions . 20-11
Code Generation for Recursive Functions 20-12
Compile-Time Recursion 20-12
Run-Time Recursion . 20-13
Disallow Recursion 20-13
Disable Run-Time Recursion . 20-13
xvi ContentsRecursive Function Limitations for Code Generation . 20-14
Force Code Generator to Use Run-Time Recursion . 20-15
Treat the Input to the Recursive Function as a Nonconstant . 20-15
Make the Input to the Recursive Function Variable-Size 20-16
Assign Output Variable Before the Recursive Call . 20-17
Avoid Duplicate Functions in Generated Code 20-18
Issue 20-18
Cause 20-18
Solution 20-18
Fixed-Point Conversion
21
Detect Unexecuted and Constant-Folded Code . 21-2
What Is Unexecuted Code? . 21-2
Detect Unexecuted Code 21-2
Fix Unexecuted Code . 21-3
Convert MATLAB Code to Fixed-Point C Code . 21-5
Propose Fixed-Point Data Types Based on Simulation Ranges 21-6
Propose Fixed-Point Data Types Based on Derived Ranges 21-17
Specify Type Proposal Options . 21-29
Detect Overflows 21-32
Replace the exp Function with a Lookup Table 21-40
Replace a Custom Function with a Lookup Table 21-47
Enable Plotting Using the Simulation Data Inspector 21-53
Visualize Differences Between Floating-Point and Fixed-Point Results
21-54
View and Modify Variable Information 21-64
View Variable Information 21-64
Modify Variable Information . 21-64
Revert Changes 21-65
Promote Sim Min and Sim Max Values . 21-65
Automated Fixed-Point Conversion . 21-67
Automated Fixed-Point Conversion Capabilities 21-67
Code Coverage . 21-67
Proposing Data Types 21-70
Locking Proposed Data Types 21-73
Viewing Functions 21-73
Viewing Variables . 21-80
xviiLog Data for Histogram 21-82
Function Replacements 21-84
Validating Types 21-84
Testing Numerics . 21-85
Detecting Overflows . 21-85
Convert Fixed-Point Conversion Project to MATLAB Scripts . 21-86
Generated Fixed-Point Code . 21-88
Location of Generated Fixed-Point Files 21-88
Minimizing fi-casts to Improve Code Readability 21-88
Avoiding Overflows in the Generated Fixed-Point Code . 21-89
Controlling Bit Growth . 21-89
Avoiding Loss of Range or Precision . 21-90
Handling Non-Constant mpower Exponents . 21-91
Fixed-Point Code for MATLAB Classes 21-93
Automated Conversion Support for MATLAB Classes 21-93
Unsupported Constructs 21-93
Coding Style Best Practices . 21-93
Automated Fixed-Point Conversion Best Practices . 21-95
Create a Test File . 21-95
Prepare Your Algorithm for Code Acceleration or Code Generation 21-96
Check for Fixed-Point Support for Functions Used in Your Algorithm 21-96
Manage Data Types and Control Bit Growth . 21-97
Convert to Fixed Point . 21-97
Use the Histogram to Fine-Tune Data Type Settings . 21-98
Optimize Your Algorithm . 21-98
Avoid Explicit Double and Single Casts 21-100
Replacing Functions Using Lookup Table Approximations . 21-101
MATLAB Language Features Supported for Automated Fixed-Point
Conversion 21-102
MATLAB Language Features Supported for Automated Fixed-Point
Conversion . 21-102
MATLAB Language Features Not Supported for Automated Fixed-Point
Conversion . 21-103
Inspecting Data Using the Simulation Data Inspector 21-104
What Is the Simulation Data Inspector? . 21-104
Import Logged Data 21-104
Export Logged Data 21-104
Group Signals 21-104
Run Options 21-104
Create Report 21-105
Comparison Options 21-105
Enabling Plotting Using the Simulation Data Inspector 21-105
Save and Load Simulation Data Inspector Sessions . 21-105
Custom Plot Functions 21-106
Data Type Issues in Generated Code . 21-107
Enable the Highlight Option in the MATLAB Coder App . 21-107
xviii ContentsEnable the Highlight Option at the Command Line . 21-107
Stowaway Doubles . 21-107
Stowaway Singles 21-107
Expensive Fixed-Point Operations 21-107
Automated Fixed-Point Conversion Using Programmatic
Workflow
22
Convert MATLAB Code to Fixed-Point C Code . 22-2
Propose Fixed-Point Data Types Based on Simulation Ranges 22-4
Propose Fixed-Point Data Types Based on Derived Ranges . 22-9
Detect Overflows 22-16
Replace the exp Function with a Lookup Table 22-19
Replace a Custom Function with a Lookup Table 22-21
Enable Plotting Using the Simulation Data Inspector 22-23
Visualize Differences Between Floating-Point and Fixed-Point Results
22-24
Single-Precision Conversion
23
Generate Single-Precision C Code at the Command Line 23-2
Prerequisites . 23-2
Create a Folder and Copy Relevant Files . 23-2
Determine the Type of the Input Argument . 23-4
Generate and Run Single-Precision MEX to Verify Numerical Behavior
. 23-4
Generate Single-Precision C Code 23-4
View the Generated Single-Precision C Code . 23-4
View Potential Data Type Issues . 23-5
Generate Single-Precision C Code Using the MATLAB Coder App . 23-6
Prerequisites . 23-6
Create a Folder and Copy Relevant Files . 23-6
Open the MATLAB Coder App . 23-8
Select the Source Files 23-8
Enable Single-Precision Conversion 23-8
Define Input Types . 23-9
Check for Run-Time Issues . 23-9
Generate Single-Precision C Code 23-10
xixView the Generated C Code . 23-10
View Potential Data Type Issues 23-10
Generate Single-Precision MATLAB Code 23-11
Prerequisites 23-11
Create a Folder and Copy Relevant Files 23-11
Set Up the Single-Precision Configuration Object . 23-12
Generate Single-Precision MATLAB Code . 23-13
View the Type Proposal Report . 23-13
View Generated Single-Precision MATLAB Code 23-14
View Potential Data Type Issues 23-14
Compare the Double-Precision and Single-Precision Variables . 23-15
Optionally Generate Single-Precision C Code 23-16
Choose a Single-Precision Conversion Workflow 23-18
Single-Precision Conversion Best Practices 23-19
Use Integers for Index Variables 23-19
Limit Use of assert Statements . 23-19
Initialize MATLAB Class Properties in Constructor 23-19
Provide a Test File That Calls Your MATLAB Function 23-19
Prepare Your Code for Code Generation 23-20
Verify Double-Precision Code Before Single-Precision Conversion . 23-20
Best Practices for Generation of Single-Precision C/C++ Code . 23-20
Best Practices for Generation of Single-Precision MATLAB Code 23-21
Warnings from Conversion to Single-Precision C/C++ Code . 23-22
Function Uses Double-Precision in the C89/C90 Standard . 23-22
Built-In Function Is Implemented in Double-Precision 23-22
Built-In Function Returns Double-Precision . 23-23
Combining Integers and Double-Precision Numbers . 23-24
MATLAB Language Features Supported for Single-Precision Conversion
23-25
MATLAB Language Features Supported for Single-Precision Conversion
23-25
MATLAB Language Features Not Supported for Single-Precision Conversion
23-26
Setting Up a MATLAB Coder Project
24
Set Up a MATLAB Coder Project 24-2
Create a Project . 24-2
Open an Existing Project 24-2
Specify Properties of Entry-Point Function Inputs Using the App . 24-3
Why Specify Input Properties? 24-3
Specify an Input Definition Using the App 24-3
Automatically Define Input Types by Using the App . 24-4
xx ContentsMake Dimensions Variable-Size When They Meet Size Threshold . 24-5
Define Input Parameter by Example by Using the App . 24-6
Define an Input Parameter by Example 24-6
Specify Input Parameters by Example . 24-7
Specify a String Scalar Input Parameter by Example 24-8
Specify a Structure Type Input Parameter by Example 24-8
Specify a Cell Array Type Input Parameter by Example 24-9
Specify an Enumerated Type Input Parameter by Example 24-10
Specify an Object Input Type Parameter by Example 24-11
Specify a Fixed-Point Input Parameter by Example 24-12
Specify an Input from an Entry-Point Function Output Type . 24-13
Define or Edit Input Parameter Type by Using the App . 24-14
Define or Edit an Input Parameter Type 24-14
Specify a String Scalar Input Parameter 24-15
Specify an Enumerated Type Input Parameter . 24-15
Specify a Fixed-Point Input Parameter . 24-16
Specify a Structure Input Parameter . 24-16
Specify a Cell Array Input Parameter 24-18
Define Constant Input Parameters Using the App . 24-23
Define Inputs Programmatically in the MATLAB File 24-24
Add Global Variables by Using the App 24-25
Specify Global Variable Type and Initial Value Using the App 24-26
Why Specify a Type Definition for Global Variables? . 24-26
Specify a Global Variable Type . 24-26
Define a Global Variable by Example . 24-26
Define or Edit Global Variable Type . 24-27
Define Global Variable Initial Value 24-27
Define Global Variable Constant Value . 24-28
Remove Global Variables . 24-28
Undo and Redo Changes to Type Definitions in the App 24-29
Code Generation Readiness Screening in the MATLAB Coder App 24-30
Slow Operations in MATLAB Coder App . 24-31
Unable to Open a MATLAB Coder Project 24-32
Preparing MATLAB Code for C/C++ Code Generation
25
Workflow for Preparing MATLAB Code for Code Generation 25-2
See Also . 25-2
Fixing Errors Detected at Design Time . 25-3
See Also . 25-3
xxiUsing the Code Analyzer . 25-4
Check Code with the Code Analyzer 25-5
Check Code by Using the Code Generation Readiness Tool . 25-7
Run Code Generation Readiness Tool at the Command Line 25-7
Run Code Generation Readiness Tool from the Current Folder Browser
. 25-7
Run the Code Generation Readiness Tool Using the MATLAB Coder App
. 25-7
Code Generation Readiness Tool 25-8
Issues Tab . 25-8
Files Tab . 25-9
Unable to Determine Code Generation Readiness . 25-11
Generate MEX Functions by Using the MATLAB Coder App . 25-12
Workflow for Generating MEX Functions Using the MATLAB Coder App
25-12
Generate a MEX Function Using the MATLAB Coder App . 25-12
Configure Project Settings 25-14
Build a MATLAB Coder Project . 25-14
See Also 25-15
Generate MEX Functions at the Command Line . 25-16
Command-line Workflow for Generating MEX Functions 25-16
Generate a MEX Function at the Command Line 25-16
Fix Errors Detected at Code Generation Time 25-17
See Also 25-17
Running and Debugging MEX Functions 25-18
Debug MEX Functions . 25-18
Debug MEX Functions by Using a C/C++ Debugger . 25-18
Debugging Strategies 25-19
Collect and View Line Execution Counts for Your MATLAB Code . 25-20
Resolve Error: Function Is Not Supported for Code Generation 25-23
Issue 25-23
Possible Solutions . 25-23
Debug Generated C/C++ Code . 25-25
Testing MEX Functions in MATLAB
26
Why Test MEX Functions in MATLAB? 26-2
xxii ContentsWorkflow for Testing MEX Functions in MATLAB . 26-3
See Also . 26-3
Running MEX Functions . 26-4
Debug MEX Functions 26-4
Debug MEX Functions by Using a C/C++ Debugger 26-4
Check for Run-Time Issues by Using the App 26-5
Collect MATLAB Line Execution Counts . 26-5
Disable JIT Compilation for Parallel Loops . 26-5
Verify MEX Functions in the MATLAB Coder App . 26-7
Verify MEX Functions at the Command Line . 26-8
Debug Run-Time Errors 26-9
Viewing Errors in the Run-Time Stack . 26-9
Handling Run-Time Errors 26-10
Using MEX Functions That MATLAB Coder Generates . 26-11
Generating C/C++ Code from MATLAB Code
27
Code Generation Workflow . 27-3
See Also . 27-3
Generating Standalone C/C++ Executables from MATLAB Code 27-4
Generate a C Executable Using the MATLAB Coder App . 27-4
Generate a C Executable at the Command Line 27-10
Specifying main Functions for C/C++ Executables 27-11
Specify main Functions 27-12
Configure Build Settings 27-13
Specify Build Type 27-13
Specify a Language for Code Generation . 27-15
Specify Output File Name . 27-16
Specify Output File Locations 27-16
Parameter Specification Methods . 27-17
Specify Build Configuration Parameters 27-17
Specify Configuration Parameters in Command-Line Workflow
Interactively 27-22
Create and Modify Configuration Objects by Using the Dialog Box 27-22
Additional Functionalities in the Dialog Box . 27-22
Specify Data Types Used in Generated Code 27-25
Specify Data Type Using the MATLAB Coder App . 27-25
Specify Data Type at the Command Line 27-25
Use Generated Initialize and Terminate Functions 27-26
Initialize Function 27-26
xxiiiTerminate Function . 27-28
Change the Language Standard 27-30
Convert codegen Command to Equivalent MATLAB Coder Project 27-31
Example: Convert a Complete codegen Command to a Project File 27-31
Example: Convert an Incomplete codegen Command to a Template Project
File . 27-32
Limitations 27-32
Share Build Configuration Settings . 27-34
Export Settings 27-34
Import Settings 27-35
Convert MATLAB Coder Project to MATLAB Script 27-36
Convert a Project Using the MATLAB Coder App . 27-36
Convert a Project Using the Command-Line Interface 27-36
Run the Script . 27-36
Special Cases That Generate Additional MAT-File . 27-37
Preserve Variable Names in Generated Code . 27-39
Reserved Keywords 27-40
C Reserved Keywords 27-40
C++ Reserved Keywords . 27-40
Keywords Reserved for Code Generation . 27-41
Reserved Prefixes . 27-42
MATLAB Coder Code Replacement Library Keywords 27-42
Specify Properties of Entry-Point Function Inputs . 27-44
Why You Must Specify Input Properties 27-44
Properties to Specify 27-44
Rules for Specifying Properties of Primary Inputs . 27-47
Methods for Defining Properties of Primary Inputs 27-47
Define Input Properties by Example at the Command Line 27-48
Specify Constant Inputs at the Command Line . 27-50
Specify Variable-Size Inputs at the Command Line 27-51
Input Type Specification and arguments blocks 27-52
Specify Cell Array Inputs at the Command Line . 27-54
Specify Cell Array Inputs by Example 27-54
Specify the Type of the Cell Array Input 27-55
Make a Homogeneous Copy of a Type 27-55
Make a Heterogeneous Copy of a Type . 27-56
Specify Variable-Size Cell Array Inputs . 27-57
Specify Type Name for Heterogeneous Cell Array Inputs . 27-58
Specify Constant Cell Array Inputs 27-58
Constant Input Checking in MEX Functions 27-59
Control Whether a MEX Function Checks the Value of a Constant Input
27-60
Define Input Properties Programmatically in the MATLAB File 27-63
How to Use assert with MATLAB Coder 27-63
Rules for Using assert Function 27-67
xxiv ContentsSpecifying General Properties of Primary Inputs 27-68
Specifying Properties of Primary Fixed-Point Inputs . 27-69
Specifying Properties of Cell Arrays . 27-69
Specifying Class and Size of Scalar Structure 27-70
Specifying Class and Size of Structure Array 27-71
Create and Edit Input Types by Using the Coder Type Editor 27-72
Open the Coder Type Editor . 27-72
Common Editor Actions 27-72
Type Browser Pane 27-73
Type Properties Pane 27-74
MATLAB Code Pane . 27-75
Speed Up Compilation by Generating Only Code 27-77
Disable Creation of the Code Generation Report 27-78
Paths and File Infrastructure Setup 27-79
Compile Path Search Order . 27-79
Specify Folders to Search for Custom Code 27-79
Naming Conventions 27-79
Generate Code for Multiple Entry-Point Functions 27-81
Generating Code for Multiple Entry-Point Functions . 27-81
Call a Single Entry-Point Function from a MEX Function . 27-82
Generate Code for More Than One Entry-Point Function Using the MATLAB
Coder App 27-82
Generate One MEX Function for Multiple Signatures 27-85
Generate Multisignature MEX Function for a Single Entry-Point Function
27-85
Generate Multisignature MEX Function for Multiple Entry-Point Functions
27-86
Pass an Entry-Point Function Output as an Input . 27-88
Pass an Entry-Point Function Output as an Input to Another Entry-Point
Function 27-88
Use coder.OutputType to Facilitate Code Componentization . 27-89
Generate Code for Global Data . 27-91
Workflow . 27-91
Declare Global Variables 27-91
Define Global Data 27-91
Synchronizing Global Data with MATLAB . 27-93
Define Constant Global Data . 27-95
Global Data Limitations for Generated Code . 27-97
Specify Global Cell Arrays at the Command Line 27-99
Generate Code for Enumerations 27-100
Generate Code for Variable-Size Data 27-101
Disable Support for Variable-Size Data 27-101
Control Dynamic Memory Allocation 27-101
Generating Code for MATLAB Functions with Variable-Size Data 27-103
xxvGenerate Code for a MATLAB Function That Expands a Vector in a Loop
. 27-104
How MATLAB Coder Partitions Generated Code . 27-109
Partitioning Generated Files 27-109
How to Select the File Partitioning Method . 27-109
Partitioning Generated Files with One C/C++ File Per MATLAB File 27-109
Generated Files and Locations 27-113
File Partitioning and Inlining . 27-115
Requirements for Signed Integer Representation 27-118
Build Process Customization . 27-119
RTW.BuildInfo Methods . 27-119
coder.updateBuildInfo Function . 27-120
coder.ExternalDependency Class 27-120
Post-Code-Generation Command 27-120
Run-time Stack Overflow 27-122
Compiler and Linker Errors 27-123
Failure to Specify a Main Function . 27-123
Failure to Specify External Code Files 27-123
Errors Caused by External Code . 27-124
Pass Structure Arguments by Reference or by Value in Generated Code
. 27-125
Name the C Structure Type to Use With a Global Structure Variable 27-132
Generate Code for an LED Control Function That Uses Enumerated Types
. 27-134
Generate Code That Uses N-Dimensional Indexing . 27-137
Improve Readability with N-Dimensional Indexing and Row-Major Layout
. 27-137
Column-Major Layout and N-Dimensional Indexing . 27-138
Other Code Generation Considerations 27-139
Install OpenMP Library on macOS Platform . 27-141
Generate Code to Detect Edges on Images 27-142
C Code Generation for a MATLAB Kalman Filtering Algorithm . 27-148
Generate Code to Optimize Portfolio by Using Black Litterman Approach
. 27-157
Generate Code for Persistent Variables . 27-167
Generate Code for Structure Arrays . 27-171
Add Custom Toolchains to MATLAB® Coder™ Build Process . 27-173
xxvi ContentsGenerate Code for Sobel Edge Detection That Uses Half-Precision Data
Type . 27-182
Build Process Support for File and Folder Names . 28-25
Filenames with Spaces . 28-25
Folder Names with Spaces 28-25
Troubleshooting Errors When Folder Names Have Spaces 28-27
Folder Names with Special Characters . 28-28
Very Long Folder Paths . 28-28
Generate Code That Reads Data from a File 28-29
Verify Generated C/C++ Code
29
Tracing Generated C/C++ Code to MATLAB Source Code 29-2
Generate Traceability Tags . 29-2
Format of Traceability Tags 29-2
Location of Comments in Generated Code 29-2
Traceability Tag Limitations 29-6
Code Generation Reports 29-7
Report Generation . 29-7
Report Location . 29-8
Errors and Warnings 29-8
Files and Functions 29-8
MATLAB Source . 29-9
MATLAB Variables 29-10
Tracing Code 29-11
Code Insights 29-11
Additional Reports 29-12
Report Limitations 29-12
Access Code Generation Report Information Programmatically 29-13
Create Report Information Object . 29-13
Example: Create Report Information Object for Successful Code Generation
29-13
Example: Create Report Information Object for Successful Code Generation
That Checks Out Toolbox Licenses 29-16
Example: Create Report Information Object for Failed Code Generation
29-17
Inspect Code Manually . 29-18
Transferring Code Configuration Objects to a New MATLAB Session 29-19
Generate Standalone C/C++ Code That Detects and Reports Run-Time
Errors . 29-20
Generated C Code vs. Generated C++ Code . 29-20
Example: Compare Generated C and C++ Code That Include Run-Time
Checks . 29-20
Limitations 29-23
xxviiExample: Generate Standalone C Code That Detects and Reports RunTime Errors 29-25
Testing Code Generated from MATLAB Code . 29-27
Unit Test Generated Code with MATLAB Coder . 29-28
Unit Test External C Code with MATLAB Coder . 29-34
Calculate Number of Lines of Code by Using Report Information Object
29-44
Code Replacement for MATLAB Code
30
What Is Code Replacement? 30-2
Code Replacement Libraries 30-2
Code Replacement Terminology . 30-4
Code Replacement Limitations 30-5
Choose a Code Replacement Library . 30-6
About Choosing a Code Replacement Library . 30-6
Explore Available Code Replacement Libraries 30-6
Explore Code Replacement Library Contents . 30-6
Replace Code Generated from MATLAB Code 30-8
Generate SIMD Code for MATLAB Functions . 30-10
MATLAB Functions That Support SIMD Code 30-10
Generate SIMD Code Versus Plain C Code 30-12
Limitations 30-14
Custom Toolchain Registration
31
Custom Toolchain Registration . 31-2
What Is a Custom Toolchain? . 31-2
What Is a Factory Toolchain? . 31-2
What is a Toolchain Definition? 31-2
Key Terms . 31-3
Typical Workflow 31-3
About coder.make.ToolchainInfo 31-5
Create and Edit Toolchain Definition File . 31-7
Toolchain Definition File with Commentary . 31-8
Steps Involved in Writing a Toolchain Definition File 31-8
Write a Function That Creates a ToolchainInfo Object . 31-8
xxviii ContentsSetup . 31-9
Macros 31-9
C Compiler . 31-9
C++ Compiler . 31-10
Linker . 31-10
Archiver 31-11
Builder . 31-11
Build Configurations . 31-11
Create and Validate ToolchainInfo Object 31-13
Register the Custom Toolchain 31-14
Use the Custom Toolchain 31-16
Troubleshooting Custom Toolchain Validation 31-17
Build Tool Command Path Incorrect . 31-17
Build Tool Not in System Path 31-17
Tool Path Does Not Exist 31-18
Path Incompatible with Builder or Build Tool 31-18
Unsupported Platform . 31-18
Toolchain is Not installed . 31-18
Project or Configuration Is Using the Template Makefile 31-19
Prevent Circular Data Dependencies with One-Pass or Single-Pass Linkers
31-20
Build 32-bit DLL on 64-bit Windows® Platform Using MSVC Toolchain
31-21
Deploying Generated Code
32
C Compiler Considerations for Signed Integer Overflows 32-2
Use C Arrays in the Generated Function Interfaces . 32-3
Implementation of Arrays in the Generated C/C++ Code 32-3
The emxArray Dynamic Data Structure Definition 32-4
Utility Functions for Interacting with emxArray Data . 32-5
Examples 32-6
Use Dynamically Allocated C++ Arrays in Generated Function Interfaces
32-15
Using the coder::array Class Template . 32-15
Examples . 32-16
Change Interface Generation 32-19
Use a Dynamic Library in a Microsoft Visual Studio Project . 32-20
Incorporate Generated Code Using an Example Main Function 32-23
Workflow for Using an Example Main Function . 32-23
Control Example Main Generation Using the MATLAB Coder App . 32-23
xxixControl Example Main Generation Using the Command-Line Interface
32-24
Use an Example C Main in an Application 32-25
Prerequisites 32-25
Create a Folder and Copy Relevant Files 32-25
Run the Sobel Filter on the Image 32-27
Generate and Test a MEX Function 32-29
Generate an Example Main Function for sobel.m . 32-29
Copy the Example Main Files 32-32
Modify the Generated Example Main Function . 32-32
Generate the Sobel Filter Application 32-40
Run the Sobel Filter Application 32-41
Display the Resulting Image . 32-41
Package Code for Other Development Environments . 32-42
When to Package Code . 32-42
Package Generated Code Using the MATLAB Coder App 32-42
Package Generated Code at the Command Line 32-43
Specify packNGo Options . 32-44
Structure of Generated Example C/C++ Main Function 32-46
Contents of the File main.c or main.cpp 32-46
Contents of the File main.h 32-48
Troubleshoot Failures in Deployed Code . 32-50
Using Dynamic Memory Allocation for an Atoms Simulation 32-51
Register New Hardware Devices . 32-56
Specify Hardware Implementation for New Device 32-56
Specify Hardware Implementation That Persists Over MATLAB Sessions
32-57
Create Hardware Implementation by Modifying Existing Implementation
32-57
Create Hardware Implementation by Reusing Existing Implementation
32-57
Validate Hardware Device Data 32-58
Export Hardware Device Data . 32-59
Create Alternative Identifier for Target Object . 32-59
Upgrade Data Definitions for Hardware Devices 32-60
Configure CMake Build Process 32-62
Specify CMake Toolchain Definition . 32-62
Available CMake Toolchain Definitions . 32-63
Create Custom CMake Toolchain Definition 32-65
Deploy Generated C Code to External Hardware: Raspberry Pi Examples
32-68
Prerequisites 32-68
Hardware Implementation Parameters . 32-69
Hello World Example 32-70
Spring Mass Damper System Example . 32-71
xxx ContentsDeploy Generated Code . 32-75
Main Function . 32-75
Generated Function Interfaces . 32-75
Executable Applications 32-76
Static and Dynamic Libraries 32-77
Generated File Structure . 32-77
Code Verification . 32-78
Custom Hardware Considerations 32-78
Other Deployment Strategies 32-78
Approaches for Building Code Generated from MATLAB Code . 32-79
Accelerating MATLAB Algorithms
33
Workflow for Accelerating MATLAB Algorithms 33-2
See Also . 33-2
Best Practices for Using MEX Functions to Accelerate MATLAB
Algorithms 33-3
Accelerate Code That Dominates Execution Time 33-3
Include Loops Inside MEX Function 33-3
Avoid Generating MEX Functions from Unsupported Functions . 33-4
Avoid Generating MEX Functions if Built-In MATLAB Functions Dominate
Run Time 33-4
Minimize MEX Function Calls . 33-4
Accelerate MATLAB Algorithms . 33-6
Modifying MATLAB Code for Acceleration 33-7
How to Modify Your MATLAB Code for Acceleration 33-7
Profile MEX Functions by Using MATLAB Profiler 33-8
MEX Profile Generation . 33-8
Example . 33-8
Effect of Folding Expressions on MEX Code Coverage . 33-11
Control Run-Time Checks . 33-12
Types of Run-Time Checks 33-12
When to Disable Run-Time Checks 33-12
How to Disable Run-Time Checks . 33-13
Algorithm Acceleration Using Parallel for-Loops (parfor) . 33-14
Parallel for-Loops (parfor) in Generated Code 33-14
How parfor-Loops Improve Execution Speed . 33-14
When to Use parfor-Loops 33-15
When Not to Use parfor-Loops . 33-15
parfor-Loop Syntax 33-15
parfor Restrictions 33-16
Control Compilation of parfor-Loops 33-18
When to Disable parfor . 33-18
xxxiReduction Assignments in parfor-Loops . 33-19
What are Reduction Assignments? 33-19
Multiple Reductions in a parfor-Loop 33-19
Classification of Variables in parfor-Loops . 33-20
Overview . 33-20
Sliced Variables 33-21
Broadcast Variables . 33-22
Reduction Variables . 33-22
Temporary Variables . 33-27
Accelerate MATLAB Algorithms That Use Parallel for-Loops (parfor)
33-29
Specify Maximum Number of Threads in parfor-Loops . 33-30
Troubleshooting parfor-Loops . 33-31
Global or Persistent Declarations in parfor-Loop 33-31
Compiler Does Not Support OpenMP 33-31
Generate MEX Code to Accelerate Simulation of Bouncing Balls . 33-32
Generate MEX Code to Calculate Geodesics in Curved Space-Time . 33-36
Generate Accelerated MEX Code for Reverberation Using MATLAB
Classes 33-40
Using PARFOR to Speed Up an Image Contrast Enhancement Algorithm
33-42
Use Generated Code to Accelerate an Application Deployed with MATLAB
Compiler . 33-51
External Code Integration
34
Call Custom C/C++ Code from the Generated Code . 34-2
Call C Code 34-2
Return Multiple Values from a C Function 34-3
Pass Data by Reference . 34-4
Integrate External Code that Uses Custom Data Types 34-5
Integrate External Code that Uses Pointers, Structures, and Arrays 34-6
Configure Build for External C/C++ Code . 34-9
Provide External Files for Code Generation 34-9
Configure Build from Within a Function . 34-9
Configure Build by Using the Configuration Object 34-10
Configure Build by Using the MATLAB Coder App 34-11
Develop Interface for External C/C++ Code 34-12
Create a class from coder.ExternalDependency . 34-12
Best Practices for Using coder.ExternalDependency . 34-13
xxxii ContentsMapping MATLAB Types to Types in Generated Code 34-15
Complex Types . 34-16
Structure Types 34-16
Fixed-Point Types . 34-16
Character Vectors . 34-17
Multiword Types . 34-17
Generate Code to Read a Text File 34-19
Generate C/C++ Strings from MATLAB Strings and Character Row
Vectors 34-27
Add New Line to Strings in Generated Code . 34-27
Limitations 34-28
Generate Efficient and Reusable Code
35
Optimization Strategies . 35-3
Modularize MATLAB Code . 35-5
Avoid Data Copies of Function Inputs in Generated Code 35-6
Inline Code 35-8
Control Inlining to Fine-Tune Performance and Readability of Generated
Code . 35-9
Control Inlining of a Specific MATLAB Function . 35-9
Control Inlining by Using Code Generation Settings 35-9
Interaction Between Different Inlining Controls 35-11
Example: Control Inlining at the Boundary Between Your Functions and
MathWorks® Functions 35-11
Fold Function Calls into Constants . 35-14
Control Stack Space Usage 35-15
Stack Allocation and Performance 35-18
Allocate Heap Space from Command Line 35-18
Allocate Heap Space Using the MATLAB Coder App . 35-18
Dynamic Memory Allocation and Performance 35-19
When Dynamic Memory Allocation Occurs 35-19
Minimize Dynamic Memory Allocation 35-20
Provide Maximum Size for Variable-Size Arrays . 35-21
Disable Dynamic Memory Allocation During Code Generation . 35-25
xxxiiiSet Dynamic Memory Allocation Threshold 35-26
Set Dynamic Memory Allocation Threshold Using the MATLAB Coder App
35-26
Set Dynamic Memory Allocation Threshold at the Command Line . 35-26
Optimize Dynamic Array Access 35-28
Disable Cache Dynamic Array Data Pointer Property 35-28
Compare Generated C Code . 35-28
Excluding Unused Paths from Generated Code . 35-30
Prevent Code Generation for Unused Execution Paths . 35-31
Prevent Code Generation When Local Variable Controls Flow 35-31
Prevent Code Generation When Input Variable Controls Flow 35-31
Generate Code with Parallel for-Loops (parfor) . 35-33
Minimize Redundant Operations in Loops . 35-34
Unroll for-Loops and parfor-Loops 35-35
Force for-Loop Unrolling by Using coder.unroll . 35-35
Set Loop Unrolling Threshold for All for-Loops and parfor-Loops in the
MATLAB Code . 35-36
Disable Support for Integer Overflow or Nonfinites 35-40
Disable Support for Integer Overflow 35-40
Disable Support for Nonfinite Numbers 35-40
Integrate External/Custom Code . 35-42
MATLAB Coder Optimizations in Generated Code . 35-46
Constant Folding . 35-46
Loop Fusion . 35-47
Successive Matrix Operations Combined . 35-47
Unreachable Code Elimination . 35-47
memcpy Calls 35-48
memset Calls 35-48
Use coder.const with Extrinsic Function Calls 35-49
Reduce Code Generation Time by Using coder.const with feval . 35-49
Force Constant-Folding by Using coder.const with feval 35-49
memcpy Optimization 35-51
memset Optimization 35-52
Reuse Large Arrays and Structures . 35-53
LAPACK Calls in Generated Code . 35-54
Speed Up Linear Algebra in Generated Standalone Code by Using LAPACK
Calls 35-55
Specify LAPACK Library 35-55
Write LAPACK Callback Class 35-55
Generate LAPACK Calls by Specifying a LAPACK Callback Class 35-56
xxxiv ContentsLocate LAPACK Library in Execution Environment 35-57
BLAS Calls in Generated Code . 35-58
Speed Up Matrix Operations in Generated Standalone Code by Using
BLAS Calls . 35-59
Specify BLAS Library 35-59
Write BLAS Callback Class 35-59
Generate BLAS Calls by Specifying a BLAS Callback Class 35-61
Locate BLAS Library in Execution Environment 35-61
Usage Notes and Limitations for OpenBLAS Library . 35-61
Speed Up Fast Fourier Transforms in Generated Standalone Code by
Using FFTW Library Calls . 35-63
FFTW Planning Considerations . 35-63
Install FFTW Library 35-63
Write an FFT Callback Class . 35-64
Generate FFTW Library Calls by Specifying an FFT Library Callback Class
35-65
Synchronize Multithreaded Access to FFTW Planning in Generated
Standalone Code 35-67
Prerequisites 35-67
Create a MATLAB Function . 35-67
Write Supporting C Code . 35-68
Write an FFT Library Callback Class . 35-68
Generate a Dynamically Linked Library 35-69
Specify Configuration Parameters in the MATLAB Coder App 35-70
Speed Up MEX Generation by Using JIT Compilation 35-71
Specify Use of JIT Compilation in the MATLAB Coder App 35-71
Specify Use of JIT Compilation at the Command Line 35-71
JIT Compilation Incompatibilities . 35-71
Automatically Parallelize for Loops in Generated Code . 35-73
Parallelize for Loops by Using MATLAB Coder App 35-73
Parallelize for Loops at Command Line . 35-73
Inspect Generated Code and Code Insights 35-74
Disable Automatic Parallelization of a for Loop . 35-75
Parallelize Implicit for Loops 35-75
Parallelize for Loops Performing Reduction Operations . 35-76
Usage Notes and Limitations 35-77
Specify Maximum Number of Threads to Run Parallel for-Loops in the
Generated Code . 35-79
Specify Number of Threads by Using MATLAB Coder App 35-79
Specify Number of Threads at the Command Line . 35-80
Create Custom Hardware Processor . 35-81
Optimize Generated Code for Fast Fourier Transform Functions . 35-83
Intel Target Support . 35-83
ARM Target Support . 35-84
MEX Target Support . 35-85
xxxvGenerating Reentrant C Code from MATLAB Code
36
Generate Reentrant C Code from MATLAB Code . 36-2
About This Tutorial . 36-2
Copying Files Locally . 36-3
About the Example . 36-3
Providing a C main Function 36-4
Configuring Build Parameters . 36-6
Generating the C Code 36-6
Viewing the Generated C Code 36-6
Running the Code 36-7
Key Points to Remember . 36-7
Learn More 36-8
Reentrant Code 36-9
Specify Generation of Reentrant Code 36-11
Specify Generation of Reentrant Code Using the MATLAB Coder App 36-11
Specify Generation of Reentrant Code Using the Command-Line Interface
36-11
API for Generated Reusable Code 36-12
Call Reentrant Code in a Single-Threaded Environment 36-13
Call Reentrant Code in a Multithreaded Environment 36-14
Multithreaded Examples 36-14
Call Reentrant Code with No Persistent or Global Data (UNIX Only) 36-15
Provide a Main Function 36-15
Generate Reentrant C Code . 36-17
Examine the Generated Code 36-17
Run the Code 36-18
Call Reentrant Code — Multithreaded with Persistent Data (Windows
Only) 36-19
MATLAB Code for This Example 36-19
Provide a Main Function 36-19
Generate Reentrant C Code . 36-22
Examine the Generated Code 36-22
Run the Code 36-23
Call Reentrant Code — Multithreaded with Persistent Data (UNIX Only)
36-24
MATLAB Code for This Example 36-24
Provide a Main Function 36-24
Generate Reentrant C Code . 36-27
Examine the Generated Code 36-28
Run the Code 36-28
xxxvi ContentsTroubleshooting Code Generation Problems
37
JIT MEX Incompatibility Warning . 37-2
Issue . 37-2
Cause . 37-2
Solution . 37-2
JIT Compilation Does Not Support OpenMP . 37-3
Issue . 37-3
Cause . 37-3
Solution . 37-3
Output Variable Must Be Assigned Before Run-Time Recursive Call . 37-4
Issue . 37-4
Cause . 37-4
Solution . 37-4
Compile-Time Recursion Limit Reached 37-7
Issue . 37-7
Cause . 37-7
Solutions 37-7
Force Run-Time Recursion . 37-7
Increase the Compile-Time Recursion Limit 37-9
Unable to Determine That Every Element of Cell Array Is Assigned 37-10
Issue 37-10
Cause 37-10
Solution 37-11
Nonconstant Index into varargin or varargout in a for-Loop 37-14
Issue 37-14
Cause 37-14
Solution 37-14
Unknown Output Type for coder.ceval . 37-16
Issue 37-16
Cause 37-16
Solution 37-16
MEX Generated on macOS Platform Stays Loaded in Memory . 37-18
Issue 37-18
Cause 37-18
Solution 37-18
Resolve Error: Code Generator Failed to Produce C++ Destructor for
MATLAB Class 37-20
Issue 37-20
Possible Solutions . 37-20
xxxviiRow-Major Array Layout
38
Row-Major and Column-Major Array Layouts 38-2
Array Storage in Computer Memory 38-2
Conversions Between Different Array Layouts 38-2
Generate Code That Uses Row-Major Array Layout . 38-4
Specify Row-Major Layout . 38-4
Array Layout and Algorithmic Efficiency . 38-5
Row-Major Layout for N-Dimensional Arrays . 38-6
Specify Array Layout in External Function Calls . 38-7
Deep Learning with MATLAB Coder
39
Prerequisites for Deep Learning with MATLAB Coder . 39-2
MathWorks Products . 39-2
Third-Party Hardware and Software 39-2
Environment Variables 39-4
Workflow for Deep Learning Code Generation with MATLAB Coder 39-7
Networks and Layers Supported for Code Generation . 39-8
Supported Pretrained Networks . 39-8
Supported Layers 39-9
Supported Classes 39-20
int8 Code Generation 39-27
Analyze Network for Code Generation . 39-29
Check dlnetwork for Code Generation Compatibility . 39-29
Analyze Classification Network for Code Generation Compatibility 39-31
Load Pretrained Networks for Code Generation . 39-37
Load a Network by Using coder.loadDeepLearningNetwork . 39-37
Specify a Network Object for Code Generation . 39-37
Specify a dlnetwork Object for Code Generation 39-38
Generate Generic C/C++ Code for Deep Learning Networks . 39-40
Requirements 39-40
Code Generation by Using codegen . 39-40
Code Generation by Using the MATLAB Coder App 39-41
Code Generation for Deep Learning Networks with MKL-DNN . 39-43
Requirements 39-43
Code Generation by Using codegen . 39-43
Code Generation by Using the MATLAB Coder App 39-44
Code Generation for Deep Learning Networks with ARM Compute Library
39-46
Requirements 39-46
xxxviii ContentsCode Generation by Using codegen . 39-46
Code Generation by Using the MATLAB Coder App 39-49
Cross-Compile Deep Learning Code That Uses ARM Compute Library
39-51
Prerequisites 39-51
Generate and Deploy Deep Learning Code 39-52
Generate int8 Code for Deep Learning Networks 39-54
ARM Cortex-A Processors . 39-54
ARM Cortex-M Processors 39-55
Update Network Parameters After Code Generation . 39-57
Create an Entry-Point Function . 39-57
Create a Network . 39-57
Code Generation by Using codegen . 39-58
Run the Generated MEX 39-58
Update Network with Different Learnable Parameters . 39-59
Run the Generated MEX with Updated Learnables 39-59
Limitations 39-60
Deep Learning Code Generation on Intel Targets for Different Batch Sizes
39-61
Deep Learning Prediction with ARM Compute Using codegen . 39-70
Code Generation for Deep Learning on ARM Targets 39-75
Generate C++ Code for Object Detection Using YOLO v2 and Intel MKLDNN 39-80
Code Generation and Deployment of MobileNet-v2 Network to Raspberry
Pi . 39-83
Code Generation for Semantic Segmentation Application on Intel CPUs
That Uses U-Net . 39-87
Code Generation for Semantic Segmentation Application on ARM Neon
Targets That Uses U-Net 39-96
Code Generation for LSTM Network on Raspberry Pi . 39-105
Code Generation for LSTM Network That Uses Intel MKL-DNN . 39-112
Code Generation for Convolutional LSTM Network That Uses Intel MKLDNN . 39-116
Cross Compile Deep Learning Code for ARM Neon Targets 39-120
Generate INT8 Code for Deep Learning Network on Raspberry Pi . 39-126
Generate INT8 Code for Deep Learning Network on Cortex-M Target
. 39-134
xxxixGenerate Generic C/C++ Code for Sequence-to-Sequence Regression That
Uses Deep Learning 39-137
Generate Digit Images Using Variational Autoencoder on Intel CPUs
. 39-146
Post-Code-Generation Update of Deep Learning Network Parameters
. 39-152
Generate Code for LSTM Network and Deploy on Cortex-M Target 39-161
Prune Filters in a Detection Network Using Taylor Scores . 39-168
Generating Code for C++
40
C++ Code Generation . 40-2
Generate C++ Code 40-2
C++ Language Features Supported in Generated Code . 40-2
Additional Differences Between Generated C Code and C++ Code . 40-3
Generate C++ Code with Class Interface . 40-4
Generate C++ Code with a Class Interface . 40-4
Globals and Persistents in a Generated C++ Class . 40-6
Put Multiple Entry-Point Functions in the Same Class . 40-7
Organize Generated C++ Code into Namespaces . 40-9
Settings That Control Namespace Structure 40-9
Example: Generate C++ Code with Namespaces . 40-10
Integrate Multiple Generated C++ Code Projects . 40-14
Generate C++ Classes for MATLAB Classes That Model Simple and
Damped Oscillators 40-18
Simulation Data Inspector
41
View Data in the Simulation Data Inspector . 41-2
View Logged Data . 41-2
Import Data from the Workspace or a File 41-3
View Complex Data 41-5
View String Data 41-6
View Frame-Based Data . 41-9
View Event-Based Data 41-9
Import Data from a CSV File into the Simulation Data Inspector 41-11
Basic File Format . 41-11
Multiple Time Vectors 41-11
xl ContentsSignal Metadata 41-12
Import Data from a CSV File . 41-13
Microsoft Excel Import, Export, and Logging Format 41-16
Basic File Format . 41-16
Multiple Time Vectors 41-16
Signal Metadata 41-17
User-Defined Data Types . 41-19
Complex, Multidimensional, and Bus Signals 41-21
Function-Call Signals 41-21
Simulation Parameters . 41-22
Multiple Runs 41-22
Configure the Simulation Data Inspector 41-24
Logged Data Size and Location . 41-24
Archive Behavior and Run Limit 41-25
Incoming Run Names and Location 41-26
Signal Metadata to Display 41-27
Signal Selection on the Inspect Pane 41-28
How Signals Are Aligned for Comparison . 41-28
Colors Used to Display Comparison Results . 41-29
Signal Grouping 41-29
Data to Stream from Parallel Simulations . 41-30
Options for Saving and Loading Session Files 41-30
Signal Display Units . 41-30
How the Simulation Data Inspector Compares Data . 41-32
Signal Alignment . 41-32
Synchronization 41-33
Interpolation 41-34
Tolerance Specification . 41-34
Limitations 41-36
Save and Share Simulation Data Inspector Data and Views . 41-37
Save and Load Simulation Data Inspector Sessions 41-37
Share Simulation Data Inspector Views 41-38
Share Simulation Data Inspector Plots . 41-38
Create Simulation Data Inspector Report . 41-39
Export Data to the Workspace or a File . 41-40
Export Video Signal to an MP4 File 41-41
Inspect and Compare Data Programmatically 41-43
Create a Run and View the Data 41-43
Compare Two Signals in the Same Run . 41-44
Compare Runs with Global Tolerance 41-45
Analyze Simulation Data Using Signal Tolerances . 41-46
Limit the Size of Logged Data . 41-49
Limit the Number of Runs Retained in the Simulation Data Inspector
Archive . 41-49
Specify a Minimum Disk Space Requirement or Maximum Size for Logged
Data . 41-49
View Data Only During Simulation 41-50
Reduce the Number of Data Points Logged from Simulation . 41-50

كلمة سر فك الضغط : books-world.net
The Unzip Password : books-world.net

تحميل

يجب عليك التسجيل في الموقع لكي تتمكن من التحميل

تسجيل | تسجيل الدخول