EMMS指令执行时间?

时间:2009-03-26 13:23:01

标签: assembly x86 mmx

我正在阅读装配艺术:MMX指令集“,在执行一些MMX指令后,需要执行EMMS指令来重置FPU。它说明了EMMS指令非常慢。

然而,当我分析EMMS执行时间以查看它有多慢时,(使用RDTSC来计算时钟周期),它似乎在0个周期内执行。

发生了什么事?我在某个地方犯了错误,或者Art Of Assembly已经过时了吗?

2 个答案:

答案 0 :(得分:2)

古老的Pentium MMX速度很慢,但在更现代的处理器上速度非常快。

尽管如此,MMX今天已经过时了。使用SSE2,您可以毫无困难地与FPU进行多路复用。

此外,RDTSC指令可以与其他指令并行执行,这解释了您的测量 - CPU只是在同一时钟周期内同时开始执行RDTSC和EMMS ...如果您想测量一块时间代码需要,您必须根据代码序列化两个RDTSC - 通常使用CPUID指令。由于您使用的序列化指令本身需要CPU周期,因此您还必须测量在您编写的测量装置之间没有代码所需的周期数。

最后一点是即使在Pentium MMX上,EMMS指令本身也很快完成 - 这是之后的第一个FPU指令,这是一个令人讨厌的延迟......

答案 1 :(得分:0)

您需要一个序列化指令,例如CPUID,以确保RDTSC不会无序执行。您可以阅读更多here