鲍勃.s
.data
variable:
.word 0,0,0,0
.word 0,0,0,0
.word 0,0,0,0
.word 0,0,0,0
.word 0,0,0,0
.word 0,0,0,0
.text
.globl runAssemblyCode
runAssemblyCode:
mov $0xFFFFFFFF,%eax
start_loop:
decl variable+0
decl variable+8
decl variable+16
;decl variable+24
dec %eax
jne start_loop
retq
ted.c
#include <stdio.h>
#include <time.h>
void runAssemblyCode ( void );
int main ( void )
{
volatile unsigned int ra,rb;
ra=(unsigned int)time(NULL);
runAssemblyCode();
rb=(unsigned int)time(NULL);
printf("%u\n",rb-ra);
return(0);
}
gcc -O2 ted.c bob.s -o ted
这是额外的指令:
00000000004005d4 <runAssemblyCode>:
4005d4: b8 ff ff ff ff mov $0xffffffff,%eax
00000000004005d9 <start_loop>:
4005d9: ff 0c 25 28 10 60 00 decl 0x601028
4005e0: ff 0c 25 30 10 60 00 decl 0x601030
4005e7: ff 0c 25 38 10 60 00 decl 0x601038
4005ee: ff 0c 25 40 10 60 00 decl 0x601040
4005f5: ff c8 dec %eax
4005f7: 75 e0 jne 4005d9 <start_loop>
4005f9: c3 retq
4005fa: 90 nop
我看不出有什么不同,也许您可以更正我的代码,或者其他人可以尝试在他们的系统上查看他们看到的内容...
这是一个非常痛苦的指令,而且如果您正在做的事情不是基于字节的内存递减,这是未对齐的并且会给内存系统带来痛苦。所以这个例程应该对缓存行以及内核数量等敏感。
不管有没有额外的指令,大约需要 13 秒。
AMD 飞鸿 9950 四核处理器
在一个
Intel(R) Core(TM)2 CPU 6300
不管有没有额外的指令,大约需要 9-10 秒。
两个处理器:
Intel(R) Xeon(TM) CPU
不管有没有额外的指令,都需要大约 13 秒。
关于这个:
Intel(R) Core(TM)2 双核 CPU T7500
8 秒有或没有。
所有都在运行 Ubuntu 64 位 10.04 或 10.10,可能是 11.04。
更多机器,64 位,ubuntu
Intel(R) Xeon(R) CPU X5450(8 核)
6 秒有或没有额外的指令。
Intel(R) Xeon(R) CPU E5405(8 核)
9 秒有或没有。
您的系统中 DDR/DRAM 的速度是多少?您正在运行哪种处理器(如果在 linux 上,则为 cat /proc/cpuinfo)。
Intel(R) Xeon(R) CPU E5440(8 核)
6 秒有或没有
啊,找到了一个单核,但至强:
Intel(R) Xeon(TM) CPU
15 秒有或没有额外的指令