1. A method for scheduling work units in a heterogeneous multi-core architecture comprising: scheduling a first compute kernel within a computer program to a first processor core of a plurality of processor cores based at least in part on information determined during compilation of the first compute kernel, wherein the first processor core has a first micro-architecture; receiving measured runtime information corresponding to the runtime behavior of the first compute kernel on the first processor core; and rescheduling the first compute kernel from the first processor core to a second processor core of the plurality of processor cores based at least in part on the received runtime information, wherein the second processor core has a second micro-architecture different from the first micro-architecture.