Architectural Optimizations in Multi-Core Processors