MSDN strongly discourages the use of the __rdtsc() intrinsic, I believe because it behaves unpredictably on different processors (and on older versions of Windows such as XP,) and therefore leads to code that is not highly portable.
We strongly discourage using the RDTSC or RDTSCP processor instruction to directly query the TSC because you won't get reliable results on some versions of Windows, across live migrations of virtual machines, and on hardware systems without invariant or tightly synchronized TSCs. Instead, we encourage you to use QPC to leverage the abstraction, consistency, and portability that it offers.
You can use coreinfo.exe from Sysinternals to check whether your CPU uses an invariant TSC or not.
You've also got Raymond Chen telling us that QueryPerformanceCounter acts differently on different systems based on the hardware:
Secondly, I have a question about the LARGE_INTEGER union. With highly portable code in mind, do we need to put logic in our code that says something like "if on a 32-bit computer, use .HighPart and .LowPart, otherwise use .Quadpart"? Or will the .QuadPart member always work on both 32-bit and 64-bit machines?