Efficiently mapping threads to system cores is critical for achieving high performance and power efficiency in multicore systems. Conventional scheduling techniques do not take system heterogeneity and varying voltage/frequency states into account and therefore do not produce efficient mappings. Additionally, since thread behavior varies throughout its execution, a fixed thread-to-core mapping is sub-optimal. Dynamically mapping threads to appropriate core states can significantly improve system throughput and decrease energy consumption. Mapping decisions are of utmost importance in systems that have performance constraints to satisfy. The problem of thread assignment in order to meet performance or power constraints has been shown to be NP-complete and therefore exceedingly expensive to solve online. This paper proposes a heuristic method for dynamically assigning threads to system cores such that performance requirements are met while minimizing the energy consumed. This method can be applied to systems consisting of heterogeneous cores, and systems with dynamic voltage/frequency scaling capabilities. Simulation results show that the proposed heuristic can be used online in hundred-core systems, with runtime overhead of less than 1 millisecond for 256-core systems.