1. A method implemented by a computing device, the method comprising: receiving, by the computing device, program code; receiving, by the computing device, size and type information associated with inputs to the program code; performing, by the computing device, a static analysis of the program code to identify portions of the program code; determining, prior to execution of the program code and based on the input size and type information, a portion of the program code that is executable by a graphical processing unit (GPU); determining, prior to execution of the program code and based on the input size and type information, a portion of the program code that is executable by a central processing unit (CPU); compiling, by the computing device, the GPU-executable portion of the program code to create a compiled GPU-executable portion of the program code; compiling, by the computing device, the CPU-executable portion of the program code to create a compiled CPU-executable portion of the program code; providing, to the GPU for execution and by the computing device, the compiled GPU-executable portion of the program code; and providing, to the CPU for execution and by the computing device, the compiled CPU-executable portion of the program code.