命令で TSC を読み取るが、直前にrdtsc
呼び出すコードに遭遇することがあります。cpuid
通話はなぜcpuid
必要なのですか?TSC値を持つ異なるコアと関係があるかもしれないことは理解していますが、これら2つの命令を順番に呼び出すと、正確にはどうなりますか?
アウトオブオーダー実行を防ぐためです。Webから消えたリンク(ただし、消える前に偶然ここにコピーされた)から、このテキストは、あるJohnEckerdalによる「パフォーマンスモニタリング」というタイトルの記事からのものです。
PentiumProおよびPentiumIIプロセッサは、アウトオブオーダー実行命令をサポートしており、プログラムしたときに別の順序で実行される場合があります。世話をしないと、これがエラーの原因になる可能性があります。
これを防ぐには、プログラマーは命令キューをシリアル化する必要があります。これは、RDTSC命令の前にCPUID命令のようなシリアル化命令を挿入することで実行できます。
2つの理由: