「アセンブリの技術 - 第11章MMX命令セット」EMMS命令実行時間?
MMX命令を実行した後、FPMSをリセットするにはEMMS命令を実行する必要があります。それはEMMS命令が非常に遅いと述べている。
しかし、EMMSの実行時間をプロファイリングして、遅い(RDTSCを使用してクロックサイクルをカウントする)ことを確認したとき、0サイクルで実行されているように見えます。
何が起こっているのですか?私はどこかで間違いを犯したのですか?
「アセンブリの技術 - 第11章MMX命令セット」EMMS命令実行時間?
MMX命令を実行した後、FPMSをリセットするにはEMMS命令を実行する必要があります。それはEMMS命令が非常に遅いと述べている。
しかし、EMMSの実行時間をプロファイリングして、遅い(RDTSCを使用してクロックサイクルをカウントする)ことを確認したとき、0サイクルで実行されているように見えます。
何が起こっているのですか?私はどこかで間違いを犯したのですか?
古代のPentium MMXでは遅かったが、現代のプロセッサでは非常に高速だった。
まだ、MMXは今日ではほとんど古くなっています。 SSE2を使用すると、FPUと多重化する際に問題は発生しません。
また、他の命令と並行してRDTSC命令を実行することができます。これは、CPUがRDTSCとEMMSを同じクロックサイクルで同時に実行し始めたことを示しています。コードに関しては、コードに関して両方のRDTSCをシリアル化する必要があります - 通常、CPUID命令がそのために使用されます。使用するシリアライズ命令はCPUサイクル自体を取るので、書き込みリグを使用する測定リグの間にコードなしで何サイクルがかかるかを測定する必要があります。
最後の点ものPentium MMXにEMMS命令自体が速く終了していることである - 、あなたはシリアル化命令を必要とする...それは厄介な遅延を得ていたことの後の最初のFPU命令だった
をなどCPUIDを使用して、RDTSCが順不同で実行されないようにします。詳しくはhereをご覧ください。
ありがとうStormsoul –