Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何计算我的处理器的MIPS?_Performance_Architecture_X86_Preprocessor_Performance Testing - Fatal编程技术网

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

Performance 如何计算我的处理器的MIPS?,performance,architecture,x86,preprocessor,performance-testing,Performance,Architecture,X86,Preprocessor,Performance Testing,我有一台旧电脑。 我想精确计算其处理器的MIPS(每秒百万条指令)和DMIP。 我能为此做些什么?这里有一个非常粗糙的方法: 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. 获取开始时间。 将两个数字相加一百万次=1 获取结束时间。 MIPS=(结束时间

我有一台旧电脑。
我想精确计算其处理器的MIPS(每秒百万条指令)和DMIP。

我能为此做些什么?

这里有一个非常粗糙的方法:

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. 
获取开始时间。
将两个数字相加一百万次=1
获取结束时间。
MIPS=(结束时间-开始时间),以秒为单位/N。
在这里找到套件(在C中,int+floating)


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

在特定GHZ上有一个按处理器或类型列出的mips列表


否则,您可以对基准进行编程并运行它(在控制台中运行,而无需大量运行),或者从某个地方下载基准并运行它….

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

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

时间是通过使用
rdtsc
指令来测量的,该指令将处理器通电后的时钟数作为寄存器
edx
eax
中的64位数字返回。通过计算这个值在执行循环之前和之前的差值,我们可以得到处理器执行循环所花费的时间。然后,将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
,相当于20000278个CPU周期。由于CPU以1466MHz的频率运行,这或多或少等于约1,36ms。

可以计算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。

通过执行此其他过程(如操作系统指令,…)将增加运行时间。当处理器只执行我的指令而不执行其他指令时,此公式有效。我希望我的MIPS非常紧凑。然后您必须在没有操作系统的情况下运行代码。有什么问题吗?下面是一些在没有OS:1的情况下运行的快速步骤。从偏移量1mb(保护模式)开始生成ELF二进制文件。使用链接器脚本进行相同的操作。2.向其添加一个多引导可执行文件头。3.确保您拥有基准测试使用的基本函数的简单实现,例如printf,以打印结果(如果有的话)。编译这些文件并将其静态链接到可执行文件中。