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

8

我有一台旧电脑。
我想准确地计算它的处理器的MIPS(每秒百万条指令)和DMIPS。
我该怎么做?

4个回答

5
根据您的要求,这里有一些引导加载程序代码,可以执行一种基准测试,可能可以用来衡量MIPS。这里的主要目标是低级别编程,我相信这是您可以使用PC实际上进行编程的最低级别,除非您愿意替换您的BIOS或其他东西。
无论如何,这是软盘镜像的代码,当启动时,将尝试执行四个指令(两个"add",一个"sub"和一个条件跳转)一百万次。指令执行的次数由"ITERS"宏控制。通过提高或降低它,您可以指定应该执行多少次迭代。
时间是通过使用"rdtsc"指令来测量的,该指令返回自其上电以来处理器时钟周期数的64位数字在寄存器"edx"和"eax"中。通过计算循环执行之前和之后的值的差异,我们可以得到处理器执行它所花费的时钟周期数。然后,使用BIOS 10h调用将该值作为十六进制值输出到屏幕上。实际花费的时间显然取决于处理器时钟频率。
以下是源代码。如果您使用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.36 毫秒。

3

通过这样做,其他进程(如操作系统指令等)的运行时间将会增加。这个公式只在处理器执行我的指令而不是其他指令时才有效。我希望我的MIPS非常紧凑。 - Soroush
5
那么你将不得不在没有操作系统的情况下运行你的代码。有什么问题吗? - Daniel Kamil Kozar
以下是运行无操作系统的几个快速步骤:
  1. 生成一个 ELF 二进制文件,从偏移量 1mb(保护模式)开始。使用链接器脚本完成。
  2. 添加一个 multiboot 可执行头文件。
  3. 确保您拥有基准测试使用的基本函数的简单实现,例如 printf,以打印结果(如果有)。将这些编译并静态链接到可执行文件中。
- Karthik Kumar Viswanathan

2
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。

2

http://en.wikipedia.org/wiki/Instructions_per_second上可以找到按处理器类型和特定GHZ列出的MIPS列表。

否则,您可以编写基准测试并运行它(在没有太多运行的控制台中),或者从某个地方下载基准测试并运行它......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接