1. A method of compiling, the method comprising: receiving, with a processor, intermediate code that was generated from compiling source code of an application, wherein the intermediate code includes information generated from the compiling that identifies a hierarchical structure of lower level sub-routines in higher level sub-routines, wherein the lower level sub-routines are defined in the source code of the application to execute more frequently than the higher level sub-routines that identify the lower level sub-routines, wherein the information generated that identifies the hierarchical structure includes function calls in the higher level sub-routines that call for execution of the lower level sub-routines, and wherein receiving the intermediate code comprises receiving intermediate code for the higher level sub-routines separate from intermediate code for the lower level sub-routines; compiling, with the processor, the intermediate code to generate object code based on the information that identifies the lower level sub-routines in the higher level sub-routines, wherein compiling comprises arranging the function calls in the higher level sub-routines for the lower level sub-routines based on a determination of whether the object code is to be executed on the processor, a graphics processing unit (GPU), or a digital signal processor (DSP), and based on a number of times the lower level sub-routines are to execute; and storing the object code.