为什么奔腾汇编指令越多,花费的时间就越少? [英] Why do more Pentium assembly instructions take less time?

查看:0
本文介绍了为什么奔腾汇编指令越多,花费的时间就越少?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是两个奔腾组装序列列表中的一个片段。我们有一个外部循环,它试图对我们的序列进行计时,并正在执行调用表以到达这些例程。因此,每次外部呼叫都是从同一位置进行的。这两个序列的不同之处在于,第一个序列比第二个序列少一条指令。

我们在两台英特尔计算机上获得的结果非常不同。

CPUID指令告知Family、Model和Step。

机器1:家庭6,型号15步进11。CPUZ报告"Intel Core 2 Duo E6750"
这些指令的执行速度在统计上是相同的。

机器2:家庭15,型号3,第三步。CPUZ报告"Intel Pentium 4"
第一个序列比第二个序列花费的时间长约8%。

我们根本无法解释时间上的增加。不应该有任何不同的标志延迟、分支预测、寄存器使用问题等。至少我们无法判断。

有人知道为什么在一台计算机上执行第一个序列需要更长的时间吗?

编辑:在第一个序列中添加"XOR PTR Ereg,0"确实会使计时与奔腾4上的第二个匹配。奇怪。

第一个序列:

00000040               ALUSHIFT_AND_C_V_E LABEL NEAR
00000040  0F B7 04 55       MOVZX   EAX, gwr[(SIZEOF WORD) * EDX]       ; EAX = 0000000000000000 LLLLLLLLLLLLLLLL
   00000000 E
00000048  0F B7 14 4D       MOVZX   EDX, gwr[(SIZEOF WORD) * ECX]       ; EDX = 0000000000000000 RRRRRRRRRRRRRRRR
   00000000 E
00000050  23 C2             AND     EAX, EDX                            ; AX = L&R      (result)
00000052  A3 00000000 E     MOV     dvalue, EAX                         ; Save the temporary ALU/Shifter result
00000057  C3                RET                                         ; Return

第二个序列:

00000060               ALUSHIFT_AND_C_V_NE LABEL NEAR
00000060  0F B7 04 55       MOVZX   EAX, gwr[(SIZEOF WORD) * EDX]       ; EAX = 0000000000000000 LLLLLLLLLLLLLLLL
   00000000 E
00000068  0F B7 14 4D       MOVZX   EDX, gwr[(SIZEOF WORD) * ECX]       ; EDX = 0000000000000000 RRRRRRRRRRRRRRRR
   00000000 E
00000070  23 C2             AND     EAX, EDX                            ; AX = L&R      (result)
00000072  80 35 00000000 E  XOR     BYTE PTR ereg, 1                    ; E = ~E
   01
00000079  A3 00000000 E     MOV     dvalue, EAX                         ; Save the temporary ALU/Shifter result
0000007E  C3                RET                                         ; Return

推荐答案

在奔腾I或奔腾II之后,编译器执行的大多数优化都不是作为所必需的。芯片会将这些指令分解成微操作,然后为您进行优化。这可能是芯片之间的分支预测差异,或者是XOR+RET与普通RET一样昂贵的事实。我不太熟悉你上面所说的奔腾的型号。另一种可能性是也可能是缓存线问题或硬件差异。

英特尔文档中可能有某些内容,也可能没有。

不管怎样。有经验的汇编程序员知道,唯一的真理是通过测试来实现的,这就是您正在做的事情。

这篇关于为什么奔腾汇编指令越多,花费的时间就越少?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆