Simultaneous multithreading: Maximizing on-chip parallelism | Synapse