Patent ID: 8825982

Claim:
A method to create a hardware hierarchy of memories from a software program fragment within a software program, the method comprising: (a) performing compiler dependence analysis over memory instructions in the software program fragment; (b) finding smallest groups of the memory instructions, wherein the smallest groups are not dependent on each other; assigning each such group to a separate new memory, which is accessed using original memory addresses of the software program fragment; (c) modifying the memory instructions of each group to make the memory instructions access the separate new memory that the smallest group was assigned to; and (d) at run time, initializing each separate new memory from original memory of the software program, at entries of the software program fragment; storing changes made by the software program fragment in each separate new memory back to the original memory of the software program, at exits of the software program fragment; (e) creating an application-specific hardware accelerator implementing the software program fragment as modified in steps (a)-(d) in hardware, wherein the application-specific hardware accelerator comprises the separate new memories created in step (b), and communicates with the software program as follows: (i) at the beginning of the said program fragment, the software program signals the application-specific hardware accelerator to start; (ii) the application-specific hardware accelerator initializes the separate new memories from the original memory of the software program; (iii) the application-specific hardware accelerator operates on the separate new memories, performing the computation specified by the software program fragment; (iv) the application-specific hardware accelerator stores the changes made by the software program fragment in the separate new memories back to the original memory of the software program, and signals the software program that the application-specific hardware accelerator has completed; and (v) the software program continues execution from the end of the software program fragment.