How Simultaneous Multithreading Works Under the Hood