从开发层面讲mips架构有什么特点

从开发层面讲mips架构有什么特点,第1张

作者:知乎用户

链接:>

是指单字长定点指令平均执行速度。

MIPS即Million Instructions Per Second的简写,计算机每秒钟执行的百万指令数,是衡量计算机运行速度的指标,即每秒处理的百万级的机器语言指令数,是衡量计算机运算速度的指标。MIPS是指令执行的速率,规定了性能和执行时间成反比,越快的计算机具有越高的MIPS值。

现如今CPU的频率越来越高,又是流水线又是超标量计算又是双核多核的,单纯以时钟频率来衡量计算机的速度已经不再科学,用MIPS来衡量相对比较合理。MIPS是指令执行的速率,规定了性能和执行时间成反比,越快的计算机具有越高的MIPS值。

mips存在的问题

MIPS是指令执行的速率,规定了性能和执行时间成反比,越快的计算机具有越高的MIPS值。从表面看,MIPS既容易理解,又符合人的直觉。其实用MIPS作为度量性能的指标存在三个问题。

首先MIPS规定了指令执行的速率,但没有考虑指令的能力。我们没有办法用MIPS比较不同指令集的计算机,因为指令数肯定是不同的。其次在同一计算机上,不同的程序会有不同的MIPS,因而一台计算机不会只有一个MIPS值。

最后一点,也是最重要的一点,如果一个新程序执行的指令数更多,但每条指令的执行速度更快,则MIPS的变化是性能无关的。

MIPS应该是MIPS(Million Instructions Per Second):单字长定点指令平均执行速度

这个就与CPU的架构有很大关系,有些CPU,它的指令周期就是晶振的周期(所谓的单周期),所以MIPS=f(MHz)

有些CPU比如未优化的51,好像是执行一条指令需要12T,那么同样完成一个 *** 作,如果耗时相同就需要更高的频率,所以说MIPS=f(MHz)/CPI (CPI是每个指令的cycle数)

编译64位程序,不一定要编译机器是64位的,但是32位机器默认安装的gcc编译环境还是不能用来编译64位程序。 编译64位程序,需要加上-m64编译器参数,默认安装的gcc已经支持该参数,但是缺少64位机器指令相关的文件,所以不能编译

准确测试cpu的mips或者mflops一般是设计体系结构时候用cpu模拟器或者verilog前仿得到的。对于用C语言比较准确的测试mips或者mflops,你可以用一个程序读取系统时间,然后执行第二个程序,第二个程序执行完成后再记录执行的时间,然后反汇编第二个程序,统计第二个程序中执行的指令条数,通常第二个程序中执行的指令数是确定的,(分支和循环的次数是可确定的)。mips和mflops在risc cpu的评价中比较有价值,感觉cisc稍差一些。

MIPS是衡量计算机CPU性能的指标。

MIPS是世界上很流行的一种RISC处理器。MIPS的意思“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages)。

其机制是尽量利用软件办法避免流水线中的数据相关问题。它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。

MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。

MIPS技术公司是美国著名的芯片设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。和英特尔采用的复杂指令系统计算结构(CISC)相比,RISC具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。

用MIPS作为度量性能值存在的问题:

MIPS是指令执行的速率,规定了性能和执行时间成反比,越快的计算机具有越高的MIPS值。从表面看,MIPS既容易理解,又符合人的直觉。其实,用MIPS作为度量性能的指标存在三个问题。

1、MIPS规定了指令执行的速率,但没有考虑指令的能力。我们没有办法用MIPS比较不同指令集的计算机,因为指令数肯定是不同的。

2、在同一计算机上,不同的程序会有不同的MIPS,因而一台计算机不会只有一个MIPS值。

例如,将执行时间用MIPS、CPI、时钟频率代入之后可得:MIPS = 指令数/(执行时间 10^6) = 指令数 / (指令数 CPI / 时钟频率 10^6) = 时钟频率 / (CPI 10^6)。

3、也是最重要的一点,如果一个新程序执行的指令数更多,但每条指令的执行速度更快,则MIPS的变化是性能无关的。

寄存器的大小为32位,由于32位为一组的情况很常见,所以称之为 “字(word)” ,另外由于MIPS使用字节编址,所以连续的地址字的地址也就相差4。另外,处理器只能将少量的数据保存在寄存器上,剩下的数以十亿记的数据都是放在存储器上的。比如数据结构和数组等。所以MIPS体系中要对存储器和寄存器之间的数据进行传输,就有了 数据传送指令 。其具体的实现方法是:讲一个基址存于寄存器中,然后通过数据传送指令进行取值,所以当使用数据传送指令取存储器中的数据(字)的时候,其 地址偏移量是基址+4 逻辑偏移量。按字节编址的情况下,所有字的起始地址必须是4的倍数,这就是 对齐限制

对立即数(也就是常数1,2··· 这些存放在存储器中的数据)的 *** 作一般都是相对于对寄存器 *** 作的指令加上一个i(immediately),对于无符号数则加上一个u,默认情况下是对寄存器进行有符号数的 *** 作。另外注意,由于“0”这个数用处远比别的常数大,所以专门在寄存器zero中存放了0,且恒为0;至于为什么大?有的时候是要判断一个数是否小于0有时候是要用0进行 *** 作,比如异或,或非等一些 *** 作可能用的上,所以其概率远远的高于别的常数,这就是前面讲过的“加速大概率事件发生”的重要思想的体现!

目前普遍采用二进制补码的方式实现负数,为什么呢?我也是一阵苦恼,后来慢慢的摸索发现,二进制补码可以直接进行想加 *** 作就得出其具体的数值,与无符号数完美的统一,具体的实现方式是把符号位,也就是最左端的一位作为符号位,然后在计算机十进制数值的时候,对符号位的十进制值取负数,然后与后面的位数的十进制数相加,就会得到其表示的负数,而取反码这一方式虽然正数负数对称,但是存在了两个0 的问题,对于粗心的程序员是很麻烦的,另外,求一个正数的相反数的补码表现形式很简单,补码=反码+1,比如0010 表示+2,第一位是符号位, 如果要取-2,那么只需要先变为1101,然后加1 ,得到1110,这就是二进制的-2的补码表示。转换为十进制的时候就是

当然,这一公式仅仅针对负数,正数的反码补码都是原码。

很多时候存在了把十六位数转换为32位数的情况。这个时候,只需要把符号位复制16次,并且把原来的16位数放在右边,符号位复制后的16个数放在左边,组合之后的32位数就是32位的符号数了。然后你再算相反数的补码表示,就会发现,好神奇哟~~

以上就是关于从开发层面讲mips架构有什么特点全部的内容,包括:从开发层面讲mips架构有什么特点、用C语言编写简单的MIPS模拟器 要有代码、在计算机领域中通常用mips来描述等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9713658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存