Sor*_*ush 5 architecture performance x86 preprocessor performance-testing
我有一台旧电脑.
我想精确计算MIPS(每秒百万指令)和处理器的DMIPS.
我能为此做些什么?
根据您的需求,这里有一些引导加载程序代码,它执行一种基准测试,可以在某种程度上用于测量 MIPS。这里的主要目标是低级别,我相信这是您可以使用 PC 实际编程的最低级别,除非您愿意更换 BIOS 或其他东西。
无论如何,这是软盘映像的代码,在启动时,它将尝试执行四条指令(两条add
s、一条sub
和一条条件跳转)一百万次。指令执行多少次由ITERS
宏控制。通过升高或降低它,您可以指定应该进行多少次迭代。
时间是通过使用该指令来测量的,该指令以寄存器和rdtsc
中的 64 位数字形式返回自加电以来处理器的节拍数。通过计算执行循环之前和之前该值的差值,我们可以获得处理器执行循环所花费的滴答数。然后通过使用 BIOS 10h 调用将该值作为十六进制值输出到屏幕。显然,实际花费的时间取决于处理器时钟的频率。edx
eax
这是来源。如果您使用 NASM 进行编译-f bin
,您将获得软盘映像,然后使用某些原始块写入程序将其写入软盘,例如dd
。然后,启动时选择软盘作为启动介质。所有这些也可以与 USB 驱动器配合使用,但这更多地依赖于 BIOS。与所有低级的东西一样,我对在您的计算机上实际执行该软件的结果不承担任何责任。
bits 16
org 0x7c00
ITERS equ 1000000
jmp 0x0000:start
start:
cli
xor ax, ax
mov ds, ax
mov ss, ax
mov sp, stack_end
rdtsc
mov [old_rdtsc], eax
mov [old_rdtsc+4], edx
mov eax, ITERS
.loop:
add ebx, ecx
add ecx, edx
sub eax, 1
jnz .loop
rdtsc
sub eax, [old_rdtsc]
sbb edx, [old_rdtsc+4]
mov si, 15
.fillbuf_eax:
mov edi, eax
shr eax, 4
and di, 0xf
mov bl, [hex_chars+di]
mov [str_buf+si], bl
sub si, 1
cmp si, 7
ja .fillbuf_eax
.fillbuf_edx:
mov edi, edx
shr edx, 4
and di, 0xf
mov bl, [hex_chars+di]
mov [str_buf+si], bl
sub si, 1
jns .fillbuf_edx
mov ah, 0xe
xor bx, bx
.bios_write:
pusha
mov al, [str_buf+bx]
int 10h
popa
add bx, 1
cmp bx, 16
jb .bios_write
sti
.halt:
hlt
jmp .halt
hex_chars db "0123456789ABCDEF"
old_rdtsc resq 1
str_buf resb 16
STACK_SIZE equ 200
stack resb STACK_SIZE
stack_end equ $
times 510-($-$$) db 0x90
db 0x55, 0xaa
Run Code Online (Sandbox Code Playgroud)
在我相当旧的 AMD Athlon XP 1700+ 上,0x1e8596
执行此代码得到的结果是 2000278 个 CPU 时钟周期。由于 CPU 运行频率为 1466MHz,因此这大约等于 1.36ms。
归档时间: |
|
查看次数: |
19024 次 |
最近记录: |