IP Library Granted Patent US 9,921,815
Granted Patent B2
US 9,921,815 · App. 14/883,449 · Granted Mar 20, 2018

Program variable convergence analysis

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,921,815
App. No.
14/883,449
Granted
Mar 20, 2018
Kind
B2
Abstract

System and method for convergence analysis. One or more state variables of a first program may be determined based on dependencies of variables in a first program. A second program corresponding to the first program is created based on the state variables and their dependencies, and executed multiple times. Each execution may include recording values of the state variables, determining an execution count, comparing the values to corresponding values from previous executions of the second program, and terminating the executing in response to the values matching corresponding values from at least one previous execution of the second program. A convergence property for the first program is determined based on the execution count, and indicating a number of executions of the first program required to generate all possible values of the one or more variables. The convergence property is stored, and may be useable to optimize the first program.

Claims (138)

1. A non-transitory computer accessible memory medium that stores program instructions executable by a processor to implement:

determining, based on dependencies of one or more variables in a first program, one or more state variables of the first program;

creating, based on the one or more state variables and dependencies of the one or more state variables, a second program corresponding to the first program;

executing the second program a plurality of times, comprising:

for each execution:

recording values of the one or more state variables;

determining an execution count;

comparing the values to corresponding values from previous executions of the second program; and

terminating said executing in response to determining that the values match corresponding values from at least one previous execution of the second program;

determining, based on the execution count, a convergence property for the first program that indicates a number of executions of the first program required to generate all possible values of the one or more variables; and

storing the convergence property, wherein the convergence property is useable to optimize the first program;

wherein said determining one or more state variables, said creating, and said executing are performed as part of compiling the first program.

2. The non-transitory computer accessible memory medium of claim 1 , wherein the one or more variables have data types comprising one or more of:

scalar;

array; or

heterogeneous data structure.

3. The non-transitory computer accessible memory medium of claim 1 , wherein the first program comprises one or more of:

a data flow program;

a graphical program;

a graphical data flow program; or

a hardware description program.

4. The non-transitory computer accessible memory medium of claim 1 , wherein the first program comprises one or more of:

a procedural program;

a functional program;

a textual program; or

a declarative program.

5. The non-transitory computer accessible memory medium of claim 1 , wherein said

executing the second program comprises one or more of:

running compiled code on a computer, wherein the compiled code is generated from at least a portion of the second program;

interpreting program statements of at least a portion of the second program; or

evaluating operations in a graph generated from at least a portion of the second program.

6. The non-transitory computer accessible memory medium of claim 1 , wherein the convergence property comprises one or more of:

a finite integer value;

a real value, indicating a fractional execution of the program;

an indication that there is no convergence; or

a convergence property for each variable of at least a subset of variables in the first program.

7. The non-transitory computer accessible memory medium of claim 1 , wherein the dependencies comprise one or more of:

a data dependency through variable assignment;

a control dependency through control structures; or

a transitive closure of a data or control dependency.

8. The non-transitory computer accessible memory medium of claim 1 , wherein the one or more state variables comprise one or more of:

at least one static variable;

at least one global variable;

at least one feedback node in a dataflow language;

at least one modal parameter; or

at least one parameter that takes on one of a plurality of values throughout execution of the first program.

9. The non-transitory computer accessible memory medium of claim 1 , wherein the second program is one or more of:

smaller than the first program;

a program that executes faster than the first program;

an empty program with no state variables; or

the same as the first program.

10. The non-transitory computer accessible memory medium of claim 1 , wherein the program instructions are further executable to implement:

compiling the first program based on the convergence property, said compiling comprising generating code configured to run on one or more of:

a desktop computer with one or more central processing unit (CPU) cores;

an embedded computer with one or more CPU cores;

a graphics processing unit (GPU);

an embedded GPU;

a field programmable gate array (FPGA); or

an application specific integrated circuit (ASIC).

11. The non-transitory computer accessible memory medium of claim 1 , wherein the program instructions are further executable to implement:

optimizing the first program based on the convergence property.

12. The non-transitory computer accessible memory medium of claim 11 , wherein said optimizing the first program based on the convergence property comprises one or more of:

constant propagation and folding;

range propagation and minimization;

array size inference;

dead code elimination;

loop transformations,

array transformations;

memory optimization;

inserting assertions;

inserting code coverage instrumentation;

loop unrolling;

in-lining of subprograms;

out-lining of portions of programs;

data type propagation and refinement;

float to fixed data type conversion;

optimization of overflow/quantization operations;

type conversion insertion; or

converting to look-up table implementations.

13. A computer-implemented method, the method comprising:

utilizing a computer to perform:

determining, based on dependencies of one or more variables in a first program, one or more state variables of the first program;

creating, based on the one or more state variables and dependencies of the one or more state variables, a second program corresponding to the first program;

executing the second program a plurality of times, comprising:

for each execution:

recording values of the one or more state variables;

determining an execution count;

comparing the values to corresponding values from previous executions of the second program; and

terminating said executing in response to determining that the values match corresponding values from at least one previous execution of the second program;

determining, based on the execution count, a convergence property for the first program that indicates a number of executions of the first program required to generate all possible values of the one or more variables; and

storing the convergence property, wherein the convergence property is useable to optimize the first program;

wherein said determining one or more state variables, said creating, and said executing are performed as part of compiling the first program.

14. The computer-implemented method of claim 13 , wherein the first program comprises one or more of:

a data flow program;

a graphical program;

a graphical data flow program;

a hardware description program;

a procedural program;

a functional program;

a textual program; or

a declarative program.

15. The computer-implemented method of claim 13 , wherein said executing the second program comprises one or more of:

running compiled code on a computer, wherein the compiled code is generated from at least a portion of the second program;

interpreting program statements of at least a portion of the second program; or

evaluating operations in a graph generated from at least a portion of the second program.

16. The computer-implemented method of claim 13 , wherein the convergence property comprises one or more of:

a finite integer value;

a real value, indicating a fractional execution of the program;

an indication that there is no convergence; or

a convergence property for each variable of at least a subset of variables in the first program.

17. The computer-implemented method of claim 16 , further comprising:

compiling the first program based on the convergence property, said compiling comprising generating code configured to run on one or more of:

a desktop computer with one or more central processing unit (CPU) cores;

an embedded computer with one or more CPU cores;

a graphics processing unit (GPU);

an embedded GPU;

a field programmable gate array (FPGA); or

an application specific integrated circuit (ASIC).

18. The computer-implemented method of claim 13 , wherein the program instructions are further executable to implement:

optimizing the first program based on the convergence property.

19. The computer-implemented method of claim 18 , wherein said optimizing the first program based on the convergence property comprises one or more of:

constant propagation and folding;

range propagation and minimization;

array size inference;

dead code elimination;

loop transformations,

array transformations;

memory optimization;

inserting assertions;

inserting code coverage instrumentation;

loop unrolling;

in-lining of subprograms;

out-lining of portions of programs;

data type propagation and refinement;

float to fixed data type conversion;

optimization of overflow/quantization operations;

type conversion insertion; or

converting to look-up table implementations.

Assignments (5)
RELEASE OF SECURITY INTEREST IN PATENTS (REEL/FRAME 057280/0028) Recorded Oct 13, 2023
From: WELLS FARGO BANK, NATIONAL ASSOCIATION, AS ADMINISTRATIVE AGENT
To: NATIONAL INSTRUMENTS CORPORATION
Reel/Frame 065231/0466 →
RELEASE OF SECURITY INTEREST IN PATENTS (REEL/FRAME 052935/0001) Recorded Oct 13, 2023
From: WELLS FARGO BANK, NATIONAL ASSOCIATION, AS ADMINISTRATIVE AGENT
To: NATIONAL INSTRUMENTS CORPORATION; PHASE MATRIX, INC.
Reel/Frame 065653/0463 →
SECURITY INTEREST Recorded Jun 18, 2021
From: NATIONAL INSTRUMENTS CORPORATION
To: WELLS FARGO BANK, NATIONAL ASSOCIATION
Reel/Frame 057280/0028 →
SECURITY INTEREST Recorded Jun 14, 2020
From: NATIONAL INSTRUMENTS CORPORATION; PHASE MATRIX, INC.
To: WELLS FARGO BANK, NATIONAL ASSOCIATION
Reel/Frame 052935/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 14, 2015
From: RICHE, TAYLOR L.; PETERSEN, NEWTON G.; KEE, HOJIN; ARNESEN, ADAM T.; YI, HAORAN; BLASIG, DUSTYN K.; LY, TAI A.
To: NATIONAL INSTRUMENTS CORPORATION
Reel/Frame 036794/0845 →