1
18
这是为了防止无序执行。从现在已从网络上消失的链接(但在消失之前偶然复制到这里),本文来自一篇题为“性能监视”的文章,作者是John Eckerdal:
|
2
6
原因有二:
|
3
1
cpuid正在序列化,防止RDTSC的无序执行。 现在你可以安全地使用LFENCE了。它被记录为在英特尔CPU上的指令流(但不是存储到内存)上序列化,现在在AMD上也在为Spectre更新微码后序列化。 https://hadibrais.wordpress.com/2018/05/14/the-significance-of-the-x86-lfence-instruction/ 解释更多关于LFENCE的信息。 也见 https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-32-ia-64-benchmark-code-execution-paper.pdf 一种使用RDTSC的方法 磷 这使得cpuid(或lfence)不在定时区域内:
也见 Get CPU cycle count? 关于RDTSC注意事项的更多信息,如常数和不间断的注意事项。
另外,RDTSCP会给您一个核心ID。如果您想检查核心迁移,也可以在启动时使用RDTSCP。但是如果你的CPU有
正如@tony's answer所指出的那样,您可以从cpuid中获取核心ID。 |