7

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

4

4 回答 4

4

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

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

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

这是来源。如果您使用 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

在我相当旧的 AMD Athlon XP 1700+ 上,我得到0x1e8596了执行此代码的结果,它等于 2000278 CPU 滴答声。由于 CPU 以 1466MHz 运行,这或多或少等于大约 1.36ms。

于 2012-07-09T18:16:07.263 回答
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+floating)

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

对于 Dhrystone mips,您需要运行 Dhrystone 套件来获取分数,然后将分数除以 1757。

于 2012-07-09T10:33:52.397 回答
2

在特定 GHZ 上按处理器类型列出了 MIPS 列表,可在

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

否则,您可以对基准进行编程并运行它(在没有太多运行的控制台中)或从某处下载基准并运行......

于 2012-07-09T11:16:53.713 回答
1

知道您的处理器将在一个周期内执行多少条指令以及您的时钟速度,就可以计算 MIPS。

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

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

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

于 2013-09-15T12:48:29.897 回答