1. A method for executing a single threaded program within a multi-core processor comprising identifying an idle core within the multi-core processor; performing a look ahead operation on instructions of the single threaded program to identify a plurality of instruction threads within the single threaded program; allocating the idle core to execute at least some of the plurality of instruction threads; and executing the at least some of the instruction threads on the idle core.