Challenges and Techniques for the Efficient Exploitation of Deep, CMP- and SMT-based Multiprocessors