Feedback-driven threading: power-efficient and high-performance execution of multi-threaded workloads on CMPs