1. A computer-implemented method for translating an application program for execution by a general purpose processor, the method comprising: receiving the application program written using a parallel programming model for execution on a multi-core graphics processing unit; partitioning the application program into regions of synchronization independent instructions to produce a partitioned application program; determining a plurality of variance vectors associated with a first region in the regions of synchronization independent instructions, wherein each variance vector indicates dependence of a different statement in the region on zero or more cooperative thread array dimensions; and inserting a loop around the first region to produce a translated application program for execution by the general purpose processor, wherein the loop iterates over only the cooperative thread array dimensions that correspond to the thread dimensions in the plurality of variance vectors.