1. A method comprising: receiving, by a computing device, program code; receiving, by the computing device, an input 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, by the computing device prior to execution of the program code and based on the input size and the type information, a portion of the program code, of the portions of the program code, that is executable by a graphical processing unit (GPU) determining the portion of the program code that is executable by the GPU comprising: comparing the portions of the program code to a size threshold; comparing the portions of the program code to a degree of parallelism threshold; and determining the portion of the program code that is executable by the GPU based on comparing the portions of the program code to the size threshold and comparing the portions of the program code to the degree of parallelism threshold; determining, prior to execution of the program code and based on the input size and the type information, a portion of the program code, of the portions of the program code, that is executable by a central processing unit (CPU) the portion of the program code that is executable by the CPU being different than the portion of the program code that is executable by the GPU; compiling, by the computing device, the portion of the program code that is executable by the GPU to create a compiled GPU-executable portion of the program code; compiling, by the computing device, the portion of the program code that is executable by the CPU 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.