1. A method of calculating feasibility of achieving a desired speedup of an application in a heterogeneous system, the method comprising: receiving the desired speedup of the application as input; performing a static analysis via a computing system comprising one or more processors, of the application to obtain instrumented and compiled code; performing a dynamic analysis, via the computing system, of the instrumented and compiled code, wherein the dynamic analysis comprises: identifying a set of parameters, the set of parameters comprising: an end-to-end execution time of the application, an execution time of data parallel loops in the application, an execution time of non-data parallel loops in the application, and an amount of physical memory used by each data structure in each data parallel loop; and calculating feasibility of achieving the desired speedup of the application based on the identified set of parameters, and satisfaction of each of, an initialization invariant, a data-parallel Invariant and a data transfer invariant.