Chip Multiprocessor Architecture: Techniques to Improve Throughput and Latency