title: Why isn't RDTSC a serializing instruction?
body: <p>The <a href="http://www.ccsl.carleton.ca/~jamuir/rdtscpm1.pdf" rel="noreferrer">Intel manuals for the RDTSC instruction</a> warn that out of order execution can change when RDTSC is actually executed, so they recommend inserting a CPUID instruction in front of it because CPUID will serialize the instruction stream (CPUID is never executed out of order). My question is simple: if they had the ability to make instructions serializing, why didn't they make RDTSC serializing? The entire point of it appears to be to get cycle accurate timings. Is there a situation under which you would <em>not</em> want to precede it with a serializing instruction?</p>
  
  <p>Newer Intel CPUs have a separate RDTSCP instruction that is serializing. Intel opted to introduce a separate instruction rather than change the behavior of RDTSC, which suggests to me that there has to be some situation where a potentially out of order timing is what you want. What is it?</p>