如何计算我的处理器的MIPS?

时间:2012-07-09 10:30:16

标签: performance architecture x86 preprocessor performance-testing

我有一台旧电脑 我想精确计算MIPS(每秒百万次指令)和处理器的DMIPS 我能为此做些什么?

4 个答案:

答案 0 :(得分:4)

根据您的需要,这里有一些引导加载程序代码,它执行一种可能用于以某种方式测量MIPS的基准测试。这里的主要目标是低级别,我相信这是您可以用PC实际编程的最低级别,除非您愿意更换BIOS或其他东西。

无论如何,这是软盘映像的代码,在启动时,将尝试执行四百条指令(两个add,一个sub和一个条件跳转)一百万次。执行指令的次数由ITERS宏控制。通过提高或降低它,您可以指定应该进行多少次迭代。

使用rdtsc指令测量时间,该指令将上电后处理器滴答数作为寄存器edxeax中的64位数字返回。通过在执行循环之前和之前计算该值的差异,我们得到处理器执行它的滴答数。然后通过使用BIOS 10h调用作为十六进制值将该值输出到屏幕。显然,花在它上面的实际时间取决于处理器时钟的频率。

这是来源。如果使用带有-f bin的NASM编译它,您将获得软盘映像,然后使用一些原始块编写程序将其写入软盘,例如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

在我相当老的AMD Athlon XP 1700+上,由于执行此代码,我得到0x1e8596,这等于2000278 CPU滴答。由于CPU运行在1466MHz,这或多或少等于大约1,36ms。

答案 1 :(得分:3)

这是一种非常粗暴的做法:

get start time.
add two numbers million times <- repeat this N times, N >= 1
get end time.

MIPS = (end time - start time) in seconds / N. 

在这里找到套件(在C,int +浮动)

https://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/Benchmarks/Dhrystone/?diff_format=h&sortby=date

对于Dhrystone mips,您需要运行Dhrystone套件以获得分数,并将分数除以1757。

答案 2 :(得分:2)

上的特定GHZ上有一个按工艺类型划分的MIPS清单

http://en.wikipedia.org/wiki/Instructions_per_second

否则你可以对基准测试进行编程并运行它(在一个没有太多运行的控制台中)或从某个地方下载基准测试.......

答案 3 :(得分:0)

MIPS的计算可以通过知道处理器在一个周期内执行的指令数和时钟速度来完成。

MIPS =(处理器时钟速度*每周期执行的Num指令)/(10 ^ 6)。

例如,TI 6487每个周期可以执行8个32位指令,每个内核的时钟速度为1.2 GHz。

所以MIPS =((1.2 * 10 ^ 9)* 8)/(10 ^ 6)=每个内核9600 MIPS,这个DSP有3个内核,因此DSP的总MIPS是28800.