1. A method to assign a thread to at least one of a plurality of heterogeneous processor cores, the method comprising: identifying, by a multi-core processor, a first phase of the thread based on a breakpoint of the thread, wherein the first phase is related to a first task, wherein the multi-core processor includes the plurality of heterogeneous processor cores; identifying, by the multi-core processor, a second phase of the thread based on the breakpoint of the thread, wherein the second phase is related to a second task, and the breakpoint is effective to identify a switch from the first task to the second task during an execution of the thread; prior to executing the first phase of the thread, associating, by the multi-core processor, the first phase of the thread with a first execution characteristic based on the first task; prior to executing the first phase of the thread, associating, by the multi-core processor, the second phase of the thread with a second execution characteristic based on the second task, wherein the second execution characteristic is different from the first execution characteristic; receiving, by the multi-core processor, information from a performance counter associated with the plurality of heterogeneous processor cores, wherein the information includes performance counts indicating respective numbers of cache line evictions among caches associated with the plurality of heterogeneous processor cores; identifying, by the multi-core processor, a first processor core among the plurality of heterogeneous processor cores based, at least in part, on the first processor core including a first number of cache line evictions, wherein the first number of cache line evictions is greater than a threshold, and the first number of cache line evictions is among the respective numbers of cache line evictions indicated by the performance counts; associating, by the multi-core processor, the first phase of the thread with the first processor core based on the identification of the first processor core as including the first number of cache line evictions that is greater than the threshold; identifying, by the multi-core processor, a second processor core among the plurality of heterogeneous processor cores based, at least in part, on the second processor core including a second number of cache line evictions, wherein the second number of cache line evictions is greater than the threshold, and the second number of cache line evictions is among the respective numbers of cache line evictions indicated by the performance counts; associating, by the multi-core processor, the second phase of the thread with the second processor core based on the identification of the second processor core as including the second number of cache line evictions that is greater than the threshold; executing, by the multi-core processor, the first phase of the thread on the first processor core based, at least in part, on the association of the first phase of the thread with the first execution characteristic and the association of the first phase of the thread with the first processor core, such that the first processor core performs the first task; determining, by the multi-core processor, that the thread has reached the breakpoint; and in response to the determining, executing, by the multi-core processor, the second phase of the thread on at least the second processor core based, at least in part, on the association of the second phase of the thread with the second execution characteristic and the association of the second phase of the thread with the second processor core, wherein the second processor core is different from the first processor core, such that the second processor core performs the second task.