Legal claims defining the scope of protection, as filed with the USPTO.
1. An apparatus, comprising: a processor; and a non-transitory computer accessible memory medium coupled to the processor that stores program instructions executable by the apparatus to perform: compiling a program to generate output code, the compiling comprising: determining one or more program structures in the program containing one or more variables at the entry or exit of each of these program structures, wherein each variable at the entry or exit of a program structure specifies a value transfer between outside of a program structure and inside the program structure, and wherein each value transfer specifies a value transfer from one or more source variables to a destination variable; and implementing each of the value transfer operations in the output code, wherein, during operation based on the output code, the implementation of the value transfer operation includes: assigning each variable of the value transfer operation to a respective memory resource, thereby mapping the variables to the memory resources; determining a subset of the destination variables for which assigning the destination variable to a memory resource of a corresponding source variable does not disrupt the functionality of the program; and for the subset of the destination variables, dynamically changing the mapping, including assigning the destination variable to the memory resource of a first source variable of the one or more source variables, thereby transferring the value from the first source variable to the destination variable without copying the value between the memory resources.
2. The apparatus of claim 1 , wherein said determining the subset of the destination variables comprises determining a memory resource requirement associated with the program.
3. The apparatus of claim 2 , wherein said compiling the program further comprises: determining that the one or more program structures operate with a static schedule; and in response to determining that the one or more program structures operate with a static schedule, collecting variables that transfer values across program structures into a group of related variables and analyzing the lifetimes of the related variables in the group of related variables.
4. The apparatus of claim 3 , wherein said compiling the program further comprises: determining temporal overlap of the lifetimes of the related variables in the group of related variables; and wherein said determining the subset of the destination variables is based on the determined temporal overlap of the lifetimes.
5. The apparatus of claim 2 , wherein said compiling the program further comprises: determining that the one or more program structures operate with a dynamic schedule; in response to determining that the one or more program structures operate with a dynamic schedule: construct a segment dependency graph based on the one or more structures; extract a segment conflict graph based on the segment dependency graph; and determine the memory resource requirement associated with the program based on a maximum clique size of the segment conflict graph.
6. The apparatus of claim 1 , wherein the output code is configured for operation by a programmable hardware device.
7. A non-transitory computer accessible memory medium that stores program instructions executable by a functional unit to perform operations comprising: compiling a program to generate output code, the compiling comprising: determining one or more program structures in the program containing one or more variables at one or more of the entry and exit of each of these program structures, wherein each variable specifies a value transfer between outside of a program structure and inside the program structure, and wherein each value transfer specifies a value transfer from one or more source variables to a destination variable; and implementing each of the value transfer operations in the output code, wherein, during operation based on the output code, the implementation of the value transfer operation includes: assigning each variable of the value transfer operation to a respective memory resource, thereby mapping the variables to the memory resources; determining a subset of the destination variables for which assigning the destination variable to a memory resource of a corresponding source variable does not disrupt the functionality of the program; and for the determined subset of the destination variables, dynamically changing the mapping, including assigning the destination variable to the memory resource of a first source variable of the one or more source variables, thereby transferring the value from the first source variable to the destination variable without copying the value between the memory resources.
8. The memory medium of claim 7 , wherein said determining the subset of the destination variables comprises determining a memory resource requirement associated with the program.
9. The memory medium of claim 8 , wherein said compiling the program further comprises: in response to determining that the one or more program structures operate with a dynamic schedule: constructing a segment dependency graph based on the one or more program structures; extracting a segment conflict graph based on the segment dependency graph; and determining the memory resource requirement associated with the program based on a maximum clique size of the segment conflict graph.
10. The memory medium of claim 7 , wherein said compiling the program further comprises: determining that the one or more program structures operate with a static schedule; and in response to determining that the one or more program structures operate with a static schedule, collecting variables that transfer values across program structures into a group of related variables and analyzing the lifetimes of the related variables in the group of related variables.
11. The memory medium of claim 10 , wherein said compiling the program further comprises: determining temporal overlap of the lifetimes of the related variables in the group of related variables; and wherein said determining the subset of the destination variables is based on the determined temporal overlap of the lifetimes.
12. The memory medium of claim 7 , wherein the output code is configured for programming a programmable hardware device to perform operations to implement the functionality of the program.
13. The memory medium of claim 7 , wherein said compiling allows operation of two or more program structures in a pipelined manner by passing values between the two or more program structures without copying values between their respective memory resources.
14. A method for compiling a program to generate output code, the method comprising: by a processor: determining one or more program structures in the program containing one or more variables at the entry or exit of each of these program structures, wherein each variable at the entry or exit of a program structure specifies a value transfer between outside of a program structure and inside the program structure, and wherein each value transfer specifies a value transfer from one or more source variables to a destination variable; implementing each of the value transfer operations in the output code, wherein, during operation based on the output code, the implementation of the value transfer operation includes: assigning each variable of the value transfer operation to a respective memory resource, thereby mapping the variables to the memory resources; determining a subset of the destination variables for which assigning the destination variable to a memory resource of a corresponding source variable does not disrupt the functionality of the program; and for the subset of the destination variables, dynamically changing the mapping, including assigning the destination variable to the memory resource of a first source variable of the one or more source variables, thereby transferring the value from the first source variable to the destination variable without copying the value between the memory resources.
15. The method of claim 14 , wherein said determining the subset of the destination variables comprises determining a memory resource requirement associated with the program.
16. The method of claim 15 , wherein said compiling the program further comprises: determining that the one or more program structures operate with a static schedule; and in response to determining that the one or more program structures operate with a static schedule, collecting variables that transfer values across program structures into a group of related variables and analyzing the lifetimes of the related variables in the group of related variables.
17. The method of claim 16 , wherein said compiling the program further comprises: determining temporal overlap of the lifetimes of the related variables in the group of related variables; and wherein said determining the subset of the destination variables is based on the determined temporal overlap of the lifetimes.
18. The method of claim 15 , wherein said compiling the program further comprises: determining that the one or more program structures operate with a dynamic schedule; in response to determining that the one or more program structures operate with a dynamic schedule: construct a segment dependency graph based on the one or more structures; extract a segment conflict graph based on the segment dependency graph; and determine the memory resource requirement associated with the program based on a maximum clique size of the segment conflict graph.
19. The method of claim 14 , the method further comprising: programming a programmable hardware device based on the output code such that the programmable hardware device is configured to operate to perform the functionality.
20. The method of claim 14 , wherein said compiling allows operation of two or more program structures in a pipelined manner.
Unknown
March 26, 2019
Browse 5M+ US patents with plain-English claim translations and AI-generated analysis.