1. A method for compiling, comprising: receiving an annotated application having parallelizable code portions for a many-core coprocessor; for a parallelizable code portion of the annotated application stored on a computer readable storage medium, determining one or more variables that are to be transferred to and/or from a coprocessor if the parallelizable code portion were to be offloaded with a liveness analysis to determine variables to be copied in to (live-in variables) and out of (live-out variables) the many-core coprocessor; determining a start location and an end location for at least one of the one or more variables as a size in memory; and transforming the parallelizable code portion by inserting an offload construct around the parallelizable code portion and passing the one or more variables and the size as arguments of the offload construct such that the parallelizable code portion is offloaded to said coprocessor at runtime, wherein the parallelizable code portion is guarded by an if condition that invokes a cost-benefit analysis at the runtime to determine whether offloading a particular code section to the many-core coprocessor is beneficial; optimizing the transformed parallelizable code portion by performing optimizing operations unrelated to the determination of the cost-benefit analysis; invoking the cost-benefit analysis to the parallelizable code portion at the runtime as a condition for making a determination to offload the parallelizable code portion to the coprocessor is beneficial, wherein the cost benefit analysis is based on a number of iterations for every loop compared to a first threshold, a total amount of work over all loops compared to a second threshold, a ratio of total central processing unit (CPU) operations to total data transfer size as compared to a third threshold, and a ratio of total CPU operations to total memory operations compared to a fourth threshold; and offloading the parallelizable code portion to the many-core coprocessor if necessary.