搜索
bottom↓
回复: 106

在网上无意中发现了这个网站,有对现在大多数的MCU ,DSP ...的一些运行性能的测试!

[复制链接]

出0入0汤圆

发表于 2005-10-28 23:59:55 | 显示全部楼层 |阅读模式
http://www.caxapa.ru/benchmarks/?test=14

  

大家看看这些结果,看看AVR的表现是不是超过了还是低于大家的期望!!!




站长注:COOL帖的原因,是后面AA55与小俊的讨论。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2005-10-29 00:06:26 | 显示全部楼层
评价一般嘛,每用到那么高的深度,我觉得AVR在于它开发快速,成本低,非常方便

出0入0汤圆

发表于 2005-10-29 00:20:11 | 显示全部楼层
搞不懂为什么8051的MIPS总是100?



如果标准51做到100MIPS,需要1200MHz的时钟输入,可能吗?

而单周期的芯片就容易多了

AVR做到20MIPS,却只需要20MHz的时钟输入



PIC做到10MIPS,需要40MHz的时钟输入(PIC好像是4周期的)



16-bit Switch Case 运算指标

CPU类型           MIPS        Cycles   Real-time(µs)   Code size(Bytes)

8051             100.0          120        1.2            326

MSP430F2131       16.0           49        3.1            178

ATmega            20.0          144        7.2            388

MSP430F149         8.0           48        6.0            176

ARM7(Thumb)       60.0          146        2.4            504

TMS320F2812      150.0           48        0.3            144

PIC18F4620        10.0           73        7.3            190

ARM7              60.0           54        0.9             12

DSPIC30F          30.0           37        1.2            438

PIC16F870          5.0           64       12.8            101



Matrix Multiplication运算指标

CPU类型           MIPS        Cycles   Real-time(µs)   Code size(Bytes)

8051             100.0         9454       94.5            345

MSP430F2131       16.0         6633      414.6            352

ATmega            20.0         2575      128.8            350

MSP430F149         8.0         2847      355.9            166

ARM7(Thumb)       60.0         2918       48.6            432

BLACKFIN         750.0          569        0.8            ?

MB90(16-LX)       16.0         3435      214.7            183

MB91(FR)          64.0         1814       28.3            236

TMS320C6711      150.0          200        1.3            744

TMS320F2812      150.0          608        4.1             58

PIC18F4620        10.0        10838     1083.8            426

ARM7              60.0         1652       27.5            148

DSPIC30F          30.0         1407       46.9            414



以上单片机中,8051(100MIPS/1200MHz),ATMEGA即AVR(20MIPS/20MHz),PIC18(10MIPS/40MHz),PIC16(5MIPS/20MHz)是8位,其它都是16/32位的



终于搞明白了,以上数据是以MCU的最大能力来算的,AVR最高能跑20MHz/20MIPS,PIC18F4620最高能跑40MHz/10MIPS,PIC16F870最高能跑20MHz/5MIPS。

而8051呢,不好意思,太慢了,只能以超频到1200MHz/100MIPS的速度才好算,而且作为对比的数据基准。(不过,现在ATMEL已经出了单周期的51核了)

出0入0汤圆

发表于 2005-10-29 00:36:48 | 显示全部楼层
很难比较,不同的MCU特点不同,有8,16,32位的,内部的结构指令也不同。

例如浮点运算,当然32位最有优势,而且编译器也各有所长...

出0入0汤圆

 楼主| 发表于 2005-10-29 00:37:03 | 显示全部楼层
8051的MIPS总是100,我觉得也有问题.8051的MIPS要到100,这个8051应该是奔腾级别的

出0入0汤圆

发表于 2005-10-29 01:20:05 | 显示全部楼层
哈哈!

100MIPS的8051应该是奔死级别了!

出0入0汤圆

发表于 2005-10-29 01:21:48 | 显示全部楼层
从这个表格我更看出了AVR是一款性价比一流的8位MCU!!

出0入0汤圆

 楼主| 发表于 2005-10-29 09:05:15 | 显示全部楼层
100MIPS的8051应该是奔死级别了! 呵呵

各有优势!



  就是不知道他们的测试代码是怎么样的

出0入0汤圆

发表于 2005-10-29 09:47:44 | 显示全部楼层
c8051就有100MIPS/100MHz的型号,PIC16应该是5MIPS/20MHz,PIC18是2CLK还是4CLK就不清楚了,反正不是1CLK

出0入0汤圆

发表于 2005-10-29 09:51:06 | 显示全部楼层
100mips的51还是有的

,去新华龙看看吧



C8051F120

100 MIPS 8051 CPU

128k 字节Flash

8448 字节RAM

外部数据存储接口

2个UARTs, SPI, SMBus/I2C

5个16位定时器, PCA

64 个I/O口

12位ADC :100ksps; 8 位ADC :500ksps

12位DACs

比较器;电压基准;温度传感器

JTAG非侵入式在系统调试

-40℃ 到+85℃; TQFP-100 封装

出0入0汤圆

发表于 2005-10-29 09:53:46 | 显示全部楼层
测试项下拉列表选择框右边有每个项目的源代码。

出0入0汤圆

发表于 2005-10-29 10:49:56 | 显示全部楼层
这个100MIPS的说法是个商业噱头。



100MIPS是在100MHz的时钟条件下的峰值数度、平均操作是没有这么高的速度的;另外,这个1000MISP还只是“CPU吞吐量”,也就是数据传送速度。可是谁见过单片机只执行MOVE指令,而不做算术、逻辑运算了?那不成了DMA控制器。DMA控制器持续传输速率轻松就能达到1G以上,是不是也可以鱼目混珠叫做“1000MIPS的微控制器”?



另外,C8051F120典型的指令执行时间是2个时钟周期,100MHz下,平均指令执行速度也就50MIPS。



还有,C8051F120是通过加深流水线来获得比较高的处理速度的。流水线比较适合大量顺序执行代码,如果一旦遇到跳转指令,那些流水线钟预取的指令全部作废,要重新从ROM中取指令。而ROM是很难做到高速度的。因此在有大量比较、跳转指令执行时候,这个流水线的效率就大打折扣。而单片机主要作为控制用,大量执行分析、判断指令是不可避免的,这个流水线的作用就没有宣传的那么高了。



所以,这个靠100MHz高频时钟驱动下、在特定条件下得到的100MIPS是有水分的。个人估计,打个3-4折还差不多。

出0入0汤圆

发表于 2005-10-29 11:05:31 | 显示全部楼层
彼此彼此,都是指峰值MIPS,ARM AVR MSP430等平均都达不到1MIPS/1MHz

出0入0汤圆

发表于 2005-10-29 11:18:10 | 显示全部楼层
不完全是这样。



1、AVR没有采用C8051F120那么深的流水线(只有1级,而C8051F120有7级),因此设计速度和实际执行速度之间不会因为流水冻结造成那么显著的下降;

2、AVR大多数指令执行周期是1条指令/周期,C8051F120平均指令执行是1-2条指令/周期,彼此间差距还是明显的。



究其原因,C8051F120继承了51指令集,为了让这个CISC体系能跑得更快,C8051F120想了不少办法,也取得了一些成效。但是由于CISC本身的限制,这些成效与付出的努力之间很不成比例。



因此,现在的高速计算机无一例外是RISC的,CISC体系的继续存在,只是为了能继续利用以前积累下来的大量软件。Intel就是个例子,它靠兼容性生存下来并发展,但是现在被历史包袱拖累了,最近CPU速度提升已经没有以前那么快了,CISC单纯靠提高主频、扩大片规模提升处理能力的发展路子已经越来越难走了。
-----此内容被AA55于2005-10-29,11:19:12编辑过

出0入0汤圆

发表于 2005-10-29 12:23:21 | 显示全部楼层
to 11 楼  

难道ARM  DSP没有流水线   ARM  DSP跳转的时候也不是一样

出0入0汤圆

发表于 2005-10-29 12:55:28 | 显示全部楼层
你仔细看了datasheet吗?应用最广泛的ARM7只有3级流水,和7级流水比起来,哪个更容易受到流水冻结的影响?



另外,RISC体系指令结构比较简单划一,采用硬件译码容易实现并且效率高。CISC采用硬件译码比较困难并且要用大量的逻辑单元来实现,这就显著增加了芯片成本,这也是C8051明显比别人贵的一个重要原因。



好好看看datasheet,并且扎实学好计算机体系结构知识,才能分析比较各种MCU,而不是盲目相信宣传资料。

出0入0汤圆

发表于 2005-10-29 13:20:23 | 显示全部楼层
再补充说明一下。



7级流水是个什么概念?在一条指令处于执行阶段时候,流水线中,有7条指令分别处于取指、传送、译码等各个指令处理阶段,从宏观上看,有8条指令同时在执行,理论上能提升速度8倍。



如果是3级流水,理论上能提升速度4倍。



假如这两个处理器都能以1MIPS/MHz的标称处理能力执行代码,在遇到跳转指令而使流水线冻结时候,都要重新从ROM中取指令。



如果是7级流水的处理器,那么流水冻结时候,流水线中7条指令作废,处理器速度将低到原来的1/8,就是0.125MIPS/MHz了;

如果是3级流水的处理器,流水冻结时候,流水线中3条指令作废,处理器速度将低到原来的1/4,就是0.25MIPS/MHz。这时候,3级流水处理器的实际处理速度,是7级流水的2倍。



还有,流水冻结后,重新在流水线钟建立流水队列,7级流水的处理器需要执行8条指令才能恢复1MIPS/MHz的速度,而3级流水的处理器只需要4条指令。在重建流水队列过程中,处理器的处理效率还是比较低的。在重建流水队列过程中,3级流水处理器能很快建立流水,这个过渡过程比较短,因而能迅速恢复处理能力,而流水长的处理器就差一些,这个也影响实际的处理速度。



另一方面是软件的。如果软件频繁使用了比较、跳转指令(比如执行一个很短的for循环语句),那么流水将被频繁冻结,长流水线的优势就被严重抵消掉了。



一个只有1级流水就能达到1MIPS/MHz的处理器的实际处理能力,比依靠7级流水达到1MIPS/MHz的处理器,是高还是低?

出0入0汤圆

发表于 2005-10-29 13:57:49 | 显示全部楼层
“如果是7级流水的处理器,那么流水冻结时候,流水线中7条指令作废,处理器速度将低到原来的1/8,就是0.125MIPS/MHz了;”



是否意味着转移指令需要>=8CLK?而我刚刚看了C8051F120的数据手册,转移指令包括返回指令在2-5CLK之间,而且也没看到7级流水线的字样



“AVR没有采用C8051F120那么深的流水线(只有1级,而C8051F120有7级)”



说AVR是1级流水线的话,那ARM7就是2级流水线了,说实话,我没听说过“1级流水线”的说法

出0入0汤圆

发表于 2005-10-29 15:13:12 | 显示全部楼层
还是有人没仔细看datasheet。



关于AVR1级流水的描述,请看看Mega128中文手册的第7页中关于内核说明的部分。您不知道的,不等于世界上就不存在。







另外,关于流水如何冻结、如何重新建立,要理解计算机体系结构中,流水线是怎样操作的。一个转移指令,是使用2-5个时钟周期。但是,转移到新地址以后呢?那流水线的内容就自动全是填满的了?那还叫“流水”吗?流水类以一个移位寄存器,要一步一步填满的,当流水线填满后,才能实现类似的并行操作。不要混淆转移指令执行时间和流水冻结、重建的概念。

出0入0汤圆

发表于 2005-10-29 15:32:12 | 显示全部楼层
AVR的“预取-执行”叫作1级流水线,那么ARM的“预取-译码-执行”是否可以叫作2级流水线?



转移指令使用2-5个时钟周期,那么填充流水线的时间算谁的?当然是这个2-5个时钟周期包含了填充流水线的时间,否则标明转移指令使用2-5个时钟周期还有啥意义?

出0入0汤圆

发表于 2005-10-29 15:45:41 | 显示全部楼层
我想说的是既然大家说ARM7是3级流水线,就不能说AVR是1级流水线,关于AVR到底是几级流水线其实无所谓

出0入0汤圆

发表于 2005-10-29 15:53:40 | 显示全部楼层
您没有理解指令执行过程和流水线操作过程。



关于流水线操作



我说过:流水线是一个类似于移位寄存器的操作过程。



比如一个2级的流水线,当第一条指令在执行时候,流水中第二条指令在译码;而同时,第三条指令在取指,这就相当于3条指令同时在执行、加速了处理速度。



但是,你一个新的PC地址刚建立,指令队列是空的,流水线中只有一条指令,那CPU在第一个时钟周期只能取第一条指令,然后第二个时钟周期对第一条指令进行译码,同时取第二条指令。注意:在这个两个周期内没有有效的指令在被执行;



在第三个时钟周期,对第一条指令执行、译码第二条指令,同时取第三条指令。以后过程就简单了,流水线是填充满的,每个时钟周期都有指令在执行、有指令在译码、有指令在取指,CPU的处理能力就充分发挥了。



所以,被冻结的流水如果重新建立,前几个周期(看流水的深度而定),是没有被执行的指令的,这时候CPU的处理能力比较低。



关于跳转需要的周期



无条件跳转过程是这样的:译码跳转指令1个周期,然后把跳转地址装入PC(同时自动清除流水线队列,因为流水线队列中预取、译码的指令没有用了)再1个周期。如果是长跳转或者绝对地址跳转,因为8位CPU每次只能处理一个字节,所以可能还需要更多的时钟周期来执行跳转,最后开始从新的地址开始执行代码。



如果是条件跳转,还需要加上条件判断周期,这样在无条件跳转基础上还要增加1-2个周期,这就是为什么说跳转指令需要2-5个周期。这个时间,纯粹是用于处理跳转的,建立、填充流水队列,还需要执行前面的另外过程。



算了,您还是去温习温习计算机体系结构课程吧。

出0入0汤圆

发表于 2005-10-29 16:19:27 | 显示全部楼层
我真的怀疑你的理解力有问题



你真的认为CYGNAL公司会RZ到在转移指令后再等上七八个CLK来填充流水线?并且在数据手册上标明转移指令使用2-5个时钟周期,而不说明需要再等待七八个CLK?



算了,不想对你多说了,你慢慢理解吧

出0入0汤圆

发表于 2005-10-29 16:36:09 | 显示全部楼层
精辟,呵呵

我搞控制的,这些东西可不是太懂

出0入0汤圆

发表于 2005-10-29 18:00:41 | 显示全部楼层
不明白为什么Atmel把AVR称为1级流水线。

像ARM7那样,取指、译码、执行都称为3级流水线。

ARM9多了数据访存、回写,称为5级流水线。

C8051流水线有7级那么多?没听过。C8051的流水线与AVR、ARM等RISC结构的芯片是不同的,它是在指令执行时采用流水线,例如它的乘法累加器是3级流水线,相关的指令实际上是要3个周期来执行。跳转指令并不影响这些流水线。但如果下一条乘加指令需要用到前一条乘加指令的结果的话,CPU就会停下来等待。

出0入0汤圆

发表于 2005-10-29 18:09:06 | 显示全部楼层
您懂就是懂,不懂就是不懂,如果我在技术上说的不对,您尽可以指出,我虚心学习。



为什么说这些没有水准的话呢?什么“理解力有问题”,不是一个踏踏实实搞技术的人应该说的,这个与论坛风气不符。不管你水平是不是比我高,首先您的说法、做法就令人遗憾。



放下这些争执说技术:



流水线最头痛的,就是跳转指令的执行,还真的需要若干个clk来填充流水线。为了避免这个问题急剧降低系统性能,计算机专家想了很多办法。比如:



指令预测,把跳转方向预测后,从最可能跳转的地址预先取指;



乱序执行,在跳转前先尽可能执行一些不互相关联的指令、先获得以后用得上的中间结果,以避免跳转带来的性能下降。



并行执行,把串行的指令并列执行(当然要耗费更多的芯片资源),以加快系统运转等等。



这些技术,在主流cpu中已经运用并取得了一定效果(比如P4),但是,这些重量级的措施运用在单片机上,首先芯片面积和功耗就承受不了,就如同飞机发动机功率强劲,但是不能装在小汽车上一样,尽管都是发动机。



兄弟,技术问题不怕争论。怕的是,把技术问题转化成私人恩怨问题,那就与论坛的初衷背道而驰了。好自为之。

出0入0汤圆

发表于 2005-10-29 18:18:20 | 显示全部楼层
楼上的在哪里看到C8051有7级流水线?不太可能吧。

出0入0汤圆

发表于 2005-10-29 18:23:22 | 显示全部楼层
流水线的指令预测确实是个问题

PC的CPU(x86/AMD)里面的cache也跟这个有关,还有个指令预测的硬件

指令预测的命中率是很重要的,一但没有命中,需要存储器里面重新装载程序/数据。

而外部的SDRAM速度很慢(DDR333,RAMBUS800MHz CPU主频3GHz),不得已在CPU里面集成了跟CPU主频一样的高速一级cache,(以前主频不高时,cache是放在主板上),甚至有2级cache。

P4跟赛扬的区别主要是chache的容量,cache很占硅片空间,成品率低,价格也差了一倍.



AVR的流水线可能叫二级流水线更合适------好像说 大了一倍,其实就是两倍(瞎猜的)

出0入0汤圆

发表于 2005-10-29 18:23:57 | 显示全部楼层
C8051F的DATASHEET上没有说,只含糊地提到“流水线指令结构”(为什么不能大大方方地说自己有几级流水线呢?奇怪。AVR和ARM都是公开宣布的)



我是在另外一个非正式场合得到的这个数据,这个数据为什么要保密呢?

出0入0汤圆

发表于 2005-10-29 21:16:42 | 显示全部楼层
支持AA55多发表高见.

出0入0汤圆

发表于 2005-10-29 21:39:46 | 显示全部楼层
to AA55:

如果你觉得我伤害到了你,那我向你道歉,对不起了!



不过有些话我不吐不快,还得说清楚

我在17楼跟帖是怀疑你所说的“C8051F120是7级流水线”和不同意你所说的“AVR是1级流水线,ARM是3级流水线”,而并没有对你所说的“流水线理论”提出任何的疑问,并且也相信是对的,因为我更本对计算机体系结构是门外汉,而在后面你在洋洋洒洒的说“流水线理论”时是否了解别人(包括我)的问题的确切含义了?我觉得你没有或者不屑于去了解,从头到尾你都是以一种高高在上的口吻在“教导”人,至少我是强烈的感觉到了,难道你一点都没觉得,或者你是已经习以为常,还是一种与生俱来的优越感?可能我说的那句话确实不应该,但你是否也应该好好的反省一下?



正如你说的“踏踏实实搞技术”,我也正是基于搞技术的人应该严谨和实事求是,向你提出我的疑问和你的疏漏,丝毫没有贬低你的任何意思



对于第一个问题,在我看了C8051F120的datasheet后,我很怀疑你说的“C8051F120是7级流水线”或者他们采取了一种与你所说的不同的流水线技术,因为如你所说的“跳转指令需要2-5个周期。这个时间,纯粹是用于处理跳转的,建立、填充流水队列,还需要执行前面的另外过程”,C8051F120的datasheet上不可能标明转移指令使用2-5个时钟周期,而不说明还需要再等待“建立、填充流水队列”的时间,难道能瞒过全球的用户?说出来谁都不信。这么简单的因果关系,而你偏偏还是要纠缠在“流水线理论”上,其实和C8051F120的流水线实现毫不相干,况且你也不知道C8051F120的流水线实现。



对于第二个问题,我确实没注意到ATMEL说他们的AVR是1级流水线,但我知道AVR是“取指、执行”两个步骤,而ARM7是“取指、译码、执行”三个步骤,大家(包括你)都公认ARM7是3级流水线,那怎么又说AVR是“1级流水线”?对于ATMEL这么说可以理解,毕竟ATMEL和ARM是两个不同的公司,他们可能有不同的理解,但对于同一个人说这种自相矛盾的话就不应该了。就是在21楼你还在说“比如一个2级的流水线,当第一条指令在执行时候,流水中第二条指令在译码;而同时,第三条指令在取指,这就相当于3条指令同时在执行、加速了处理速度。”,在你口口声声说“还是有人没仔细看datasheet”的同时让人怀疑你是否看过ARM7的datasheet。



希望大家能够心平气和的讨论技术问题

出0入0汤圆

发表于 2005-10-29 22:16:47 | 显示全部楼层
您不了解计算机体系结构的理论,也就罢了。



不了解的理论,怎么能那么武断地认为别人也不了解。而且默认别人也和您一样不了解,认为别人是“理解力有问题”呢?您都不理解的问题,怎么能认为别人“理解力有问题”?不是荒诞嘛!



自己都不理解的问题,却对别人的阐述加以指责。如果您提出技术上反驳的意见我可以讨论,您却没有拿出任何反驳的证据,反是贴出个人身攻击句子,您的态度是不是应该反省?

出0入0汤圆

 楼主| 发表于 2005-10-29 22:30:11 | 显示全部楼层
强烈支持AA55,AA55分析的很实在,在上面提到的那个网站里测试结果,仔细看看就会明白各个处理器在不同的硬件,指令架构上所产生的不同结果.所以认同AA55的分析.

出0入0汤圆

发表于 2005-10-29 22:40:32 | 显示全部楼层
还回来说流水线技术。



流水线的预取指和译码等步骤都是基于现有条指令的分析。没有现在的指令,就不知道后面该如何取指、特别是CISC体系的计算机。所以,当一个顺序执行的代码序列在执行时候,很容易建立一个流水队列。



但是一旦发生跳转、特别是条件跳转时候,跳到哪里就不知道了,所以流水就被打乱了(CPU不知道该跳转到哪里,怎么预取指呢),这时流水就不能执行了,被称为流水冻结。



哪个CPU厂商也不能逾越这个鸿沟,即使采用分支预测、乱序执行等技术,也只能降低跳转对流水的影响而不能消除它的影响。INTEL也就是尽力改善P4流水而不能消除跳转的影响,C8051F120一种单片机,能做到比几亿个晶体管的CPU更高明吗?最起码,它就不能承担那复杂的开销和功耗。



所以,说C8051F不可能会受流水影响,只是出于臆测,而不是基于对技术的理解。没有足够的技术基础,讨论什么呢?

出0入0汤圆

 楼主| 发表于 2005-10-29 22:59:27 | 显示全部楼层
同意!!!

出0入0汤圆

发表于 2005-10-29 23:01:09 | 显示全部楼层
仔细看了一下AA55的回帖,关于流水线原理的解释说的很有道理

出0入0汤圆

发表于 2005-10-29 23:05:27 | 显示全部楼层
拜托大人您仔细看一遍

我的意思再明白不过了:

1:如果C8051F120的数据手册是正确的,那么不可能用7级流水线实现,或者

2:C8051F120的数据手册是正确的,确实是用7级流水线实现的,但使用了特殊的方法实现,否则

3:C8051F120的数据手册是在骗人(每个分支指令后需要额外的时钟周期“建立、填充流水队列”)



我更本不需要反驳的证据,一看就明白。

你非要坚持是7级流水线,谁都不知道,无所谓。

可是你说“跳转指令需要2-5个周期。这个时间,纯粹是用于处理跳转的,建立、填充流水队列,还需要执行前面的另外过程。”,鬼才信!



另外加送四字“不可理喻”!



恕不奉陪!

出0入0汤圆

发表于 2005-10-29 23:06:51 | 显示全部楼层
我觉得C8051的流水线与ARM等RISC结构的流水线是不同的。从Datasheet上看,根本没有说明C8051有预取指的流水线,而有的只是MAC的流水线(学DSP的?),也就是原先一些要N个周期才能执行完的指令(主要是加减乘法),现在有了流水线,1个周期就搞定了。所以,跳转语句不会影响MAC流水线。但是,假如后面的指令需要用到前面指令的结果时,如果前面的指令还在“流水”之中,那么CPU就会停下来等待。



至于RISC结构的流水线,即使遇到跳转指令,也不是所有级别的流水线都受影响的。例如ARM9中“取指、译码、执行、数据访存、回写”5级流水线中,假如发生了跳转且分支预测失效,那么CPU会重新取指,然后影响到后面的译码和执行,但是后面的数据访存和回写还是不能丢弃的,因为那是前面执行完的指令的需要。何况,并不是所有指令都需要数据访存和回写。因此,对ARM9的5级流水线来说,发生流水线重新填充时,一般只延迟3个周期而不是AA55认为的5个周期。换一种情况,假如ARM9在执行过程中发生了“互锁”,那么CPU就会受数据访存和回写流水线的影响而延迟执行1-2个周期,但这时前面的取指、译码还是可以继续的。

出0入0汤圆

发表于 2005-10-29 23:11:50 | 显示全部楼层
还在嘴硬。算了,您的贴子以后在我这里自动过滤了。



因为您根本就没有在讨论技术(到现在也没说出一个道理。这段按时间,现去恶补计算机体系结构知识都够了),您就是想争个面子,我在头几个贴子就看出来了。何必呢,面子大于真知灼见?



没有知识支撑的面子,就是不堪一戳的薄纸一张。

出0入0汤圆

发表于 2005-10-29 23:22:41 | 显示全部楼层
小俊:



我认为,流水线填充也完全不是您认为的3个周期。



就您举的5级流水线例子来说,流水线要持续把回写数据等执行完,是不错的。



当一个新的不连续地址pc到来时候,流水线中回写还在执行,不过新的指令还在取指阶段,即使回写操作执行完毕,这5个过程还要老老实实再执行一遍。因为,即使到了指令执行阶段,但执行结果的数据还在cache内、没有回写到内存,就不等于执行完毕。所以那些操作,还是不能避免的。当然,有些指令不涉及内存操作的例外,这个涉及到指令集和体系结构的设计问题。

出0入0汤圆

发表于 2005-10-29 23:55:48 | 显示全部楼层
补充:C80F120D的MAC采用的流水,也不是一个周期能搞定的,C8051F120的DATASHEET明白写着,MAC16*16乘法需要2个周期。



写过FPGA代码的人都知道,无论怎么优化代码,任意数的硬件乘法器都不能做到一个周期实现的。除非用查找表来实现,但是,那将会非常大的一个查找表,实现起来代价是非常昂贵的。

出0入0汤圆

发表于 2005-10-30 00:11:03 | 显示全部楼层
没错。



我的意思是说,并不是所有指令都有数据访存和回写流水线(实际上用到这两条流水线的指令并不占多数)。



刚才仔细看了Datasheet,发现C8051真的有预取指,不过不像AVR那样每次只取1条指令,而是每次取4个字节(采用32位总线)。C8051的预取指只是为了让Flash的速度适应CPU的运行速度,因为Flash的速度只有CPU的1/4,这一点跟Philips的ARM很像。而且C8051还有分支目标缓存,用来保存上次分支目标处的4个字节指令,用来对付循环语句很管用,根本不用重新取指,这也和Philips的ARM很相似。以下是Datasheet的原话:



When running linear code (code without any jumps or branches), the prefetch engine alone allows instructions to be executed at full speed. When a code branch occurs, a search is performed for the branch target (destination address) in the cache. If the branch target information is found in the cache (called a “cache hit”), the instruction data is read from the cache and immediately returned to the CIP-51 with no delay in code execution. If the branch target is not found in the cache (called a “cache miss”), the processor

may be stalled for up to four clock cycles while the next set of four instructions is retrieved from FLASH memory. Each time a cache miss occurs, the requested instruction data is written to the cache if allowed by the current cache settings.



当代码是线性执行时或分支目标处的代码位于缓存中时,CPU能全速执行。当缓存未命中时,要花4个周期重新取指。



这样,答案就很明显了。

出0入0汤圆

发表于 2005-10-30 00:21:05 | 显示全部楼层
单周期的乘法真的有哦,例如DSP的,可以单周期运算16×16,还可以并行执行累加。

出0入0汤圆

发表于 2005-10-30 00:28:48 | 显示全部楼层
这才是讨论问题的态度,赞一个。



不过,我还是有不同看法。预取指令是缓解了Flash的问题,但是,8051指令本身就是不规则编码的,如果发生连续取指,如何处理呢?



另外,分支目标缓存也就是缓存了分支两个可能方向的下一个代码,但是,后续的指令也一起缓存了吗?那就成了双流水了。



在真正执行其中一个分支时候,只不过缓解了跳转的代码,但是跳转之后的问题,如何解决呢?定义一个很大的缓存倒是办法,但是那个代价太昂贵了、而且毕竟缓存还是有限的。



还有,分支预取指如果太多,最终会发生指令相关和结构相关方面的冲突,毕竟,Flash不能也做成双份的。



所以我说:C8051F采用了很多措施来提升速度(特别是采用了流水技术),但是,真正运转起来,还远达不到标称的峰值速度。

出0入0汤圆

发表于 2005-10-30 00:37:48 | 显示全部楼层
DSP是以解决信号处理中运算为基础设计的,特别强化了算术和数学指令。不过,这些指令真的是单周期实现的吗?那也是靠流水同时执行运算中不同阶段的任务实现的。



不过,DSP不同于单片机:它执行的代码顺序代码居多,所以流水特别有用。我在学习FPGA设计时候,教程反复说乘法器设计提升性能的方法,后来发现,它这方法适合信号变换和处理,用在控制上不合适:流水常被打断。

出0入0汤圆

发表于 2005-10-30 00:38:09 | 显示全部楼层
兄弟们都辛苦了,先喝杯茶休息休息吧!



从你们的帖子中学到不少东西,至少我已经基本了解流水线这个东西了。AA55兄弟已经解释得很清楚了!Intel为这个东西的确消耗了不少资源和精力的!
-----此内容被Kert于2005-10-30,00:45:35编辑过

出0入0汤圆

发表于 2005-10-30 16:10:39 | 显示全部楼层
从C8051的Datasheet来看,它真的是有两个缓存,每个4字节。一个用于顺序执行时的取指,一个用于分支取指。这个特点与Philips的ARM7很相似。不过Philips ARM7的缓存更大,每个都是128位的,可以预取4条ARM指令或8条Thumb指令。



其实用这种双缓存结构是一种很有效的提高性能的方法。我用过44b0x和LPC21xx两种ARM7,发现采用128位Flash总线和双缓存的LPC21xx的速度比采用指令Cache+SDRAM臃肿结构的44b0x真的快很多。

出0入0汤圆

发表于 2005-10-30 16:44:43 | 显示全部楼层
问题是:8051的指令是不规则的,最短的指令有1字节(NOP),最长的指令有4字节,这个不规则的指令体系,导致流水和缓存效率比较低,因为在CPU设计时候难于预则每个指令后下一条指令到底是什么,所以只能设计一个4字节缓存、效率低下。



即使这条指令命中,也只不过缓解了跳转后下一条指令预取指,但是,再下一条指令呢?还要等待。这个措施能够缓解跳转带来的流水冻结,但是不能消除它的影响。



还有另外的复杂因素。8051体系不同于RISC,指令不规则导致译码困难,多字节指令译码难于在一个周期内完成,很可能要多个周期才能完成,所以,CISC流水线普遍比RISC深。而深的流水线,也只不过是把译码逻辑分散到各个流水周期。您提到的取指-译码-执行逻辑,只适应在RISC上,CISC是很难实现的,它非要拉长流水才能实现。

出0入0汤圆

发表于 2005-10-30 16:57:12 | 显示全部楼层
指令长度的问题,Datasheet上已经明确说明了:运行周期至少等于指令长度。原因很简单,CPU平均每周期只能从Flash取一个字节。不过这个等待已经算入了指令运行周期了,例如,ADD一个立即数比ADD一个寄存器要多一个周期。



C8051译码流水线有多少?Datasheet好像没写。

出0入0汤圆

发表于 2005-10-30 17:01:38 | 显示全部楼层
用最常见的桌面系统比较:



苹果G4使用的RISC CPU流水线是7级,32位处理器;同等的32位CISC CPU P4的流水线是20级(另一个增强版本是31级)。



明显地,CISC的流水线比RICS要深,以弥补指令集和体系结构的不足,但是就是这样,大家也知道,在同等主频下,G4的处理能力比P4强、即便是P4采用了更深的流水线。

出0入0汤圆

发表于 2005-10-30 17:09:22 | 显示全部楼层
对1-4个字节组成的指令系统,每次从Flash取一个字节,然后要译码、执行,还要保持1MIPS/MHz的处理能力,那么流水线应该多深?最坏情况下,最少1个取指周期、4个译码周期、1个执行周期,再加上回写吧,没有7个流水级能做到吗?



我反复说过了:越深的流水在发生跳转时候,性能下降越明显。这是C8051F避而不谈的

出0入0汤圆

发表于 2005-10-30 17:15:20 | 显示全部楼层
我个人和Cygnal 公司没有任何利害关系,我只不过是从技术角度分析C8051F120到底能达到多大的处理能力。



我们工程师讲的是实事求是,而不能相信商人的商业宣传;更不能以这种商业噱头为准,去评估自己设计的系统的技术性能。那样,不但损害了用户的利益、最终也砸了自己的饭碗。

出0入0汤圆

发表于 2005-10-30 18:07:20 | 显示全部楼层
支持AA55!!!!

都是高手中的老手.

出0入0汤圆

发表于 2005-10-30 22:10:10 | 显示全部楼层
各位高手打了这么多字,为我们上了一课,谢谢!

出0入0汤圆

发表于 2008-3-7 09:24:03 | 显示全部楼层
AA55是计算机体系结构的高手啊,支持

出0入0汤圆

发表于 2008-3-7 10:22:52 | 显示全部楼层
不错,不错,呵呵,AVR好样的

出0入0汤圆

发表于 2008-3-7 10:25:06 | 显示全部楼层
AA55现在是不是都不来了,最近没有看到过他的高见呀。

出0入0汤圆

发表于 2008-3-7 12:33:23 | 显示全部楼层
网页打不开了

出0入0汤圆

发表于 2008-3-7 14:09:12 | 显示全部楼层
哎,看到这些东西,感到我真的很菜!!!
不过今天感到很幸运,因为看到了这些东西!
哈哈!
今天没白活!

出0入0汤圆

发表于 2008-3-7 14:35:13 | 显示全部楼层
AA55能否推荐一本计算机体系结构的书给我等恶补一下?

出0入0汤圆

发表于 2008-3-10 22:51:01 | 显示全部楼层
这帖要顶

出0入0汤圆

发表于 2008-3-17 10:29:51 | 显示全部楼层

出0入0汤圆

发表于 2008-4-11 15:39:59 | 显示全部楼层
顶贴,为了更多的朋友有机会看到这样的精贴。

AA55发表的论述真的让我学到了不少,至少让我一个人去看这些知识可能不会专心去看,或者看了也不能理解到看AA55的贴的这种程度,谢谢AA55,很赞同您的态度。

qwernet 小俊也让我佩服,初一看贴,理解起来好像没什么难的,感觉自己也可以说出这些话来,但想一下,真要自己回贴谈谈,都不知从哪开始,更别想说到点上,呵呵。真希望多看到您们这种类似的论述,让大家也沾沾光,学习学习。

出0入0汤圆

发表于 2008-4-11 17:10:08 | 显示全部楼层
这个帖子应该收藏起来,普及基础知识的绝佳之做!!

出0入0汤圆

发表于 2008-4-22 20:33:16 | 显示全部楼层
看过了,标记……

出0入147汤圆

发表于 2008-4-22 21:56:41 | 显示全部楼层
学习了,应该把后面AA55和小俊的对话提取出来做个酷帖~~~呵呵

出0入0汤圆

发表于 2008-4-22 23:01:32 | 显示全部楼层
差点让C8051给蒙了,呵呵
不过,话说回来,软件能够兼容也是优势之一,大概也是卖点之一吧!
失败在商业运作上,价格不够亲近人。

出0入0汤圆

发表于 2010-10-6 21:29:21 | 显示全部楼层
好好学习!

出0入0汤圆

发表于 2010-10-15 14:44:50 | 显示全部楼层
高手啊

出0入0汤圆

发表于 2010-10-15 16:17:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-15 18:20:13 | 显示全部楼层
感觉aa 和 za 都没说到点子上去:
16-bit Switch Case 运算指标
CPU类型           MIPS        Cycles   Real-time(µs)   Code size(Bytes)  
8051             100.0          120        1.2            326
ATmega            20.0          144        7.2            388
首先看上面的数据,我只留下51和avr的数据。大家看看,我把51的MIPS除以五,就合avr一样是20mips,此时程序运行时间Real-time(µs)应该为1.2*5=6.0 少于 avr的7.2。也就是说,同样的MIPS下,7级流水线结构的51进行select case这种分支跳转指令的运行效率 要比1级流水线的avr要高。关于这个问题,不知道aa55同志如何解释呢?
---------------------------------------------------------
先要去开会了,开完会看看今晚或者明天给出我的想法。

出0入0汤圆

发表于 2010-10-16 07:49:17 | 显示全部楼层
....刚发现,05年的旧帖的。。。当事人在不在都成问题。。。算了。。不浪费口水了

出0入0汤圆

发表于 2010-10-16 09:18:10 | 显示全部楼层
都是高手啊

出350入8汤圆

发表于 2010-10-16 11:16:02 | 显示全部楼层
mark

出0入10汤圆

发表于 2010-10-16 13:24:10 | 显示全部楼层
老贴也要顶

出0入0汤圆

发表于 2010-11-1 14:28:48 | 显示全部楼层
来扫灰尘的

出0入0汤圆

发表于 2010-11-2 14:48:54 | 显示全部楼层
好好看看这种帖子,长经验

出0入0汤圆

发表于 2010-11-2 17:53:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-2 19:36:17 | 显示全部楼层
学习了,谢谢AA55

出0入0汤圆

发表于 2010-11-2 19:57:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-7 15:51:48 | 显示全部楼层
mark 一个。
看了这个贴有个感受
每个人做的技术层面不同,进而学习的程度、想问题的深度也就不同了。

今天上了一课,我这个菜鸟更有干劲了。

出0入0汤圆

发表于 2010-11-8 00:39:57 | 显示全部楼层
这个好~要学习~

出0入0汤圆

发表于 2010-11-8 02:06:05 | 显示全部楼层
收藏了

出0入0汤圆

发表于 2010-11-8 11:32:02 | 显示全部楼层
收藏

出0入0汤圆

发表于 2010-11-8 11:53:35 | 显示全部楼层
如果看过英飞凌的16位或者32位单片机,就对这个结果就没啥疑问了。
1:
100MIPS的51是否能做:
肯定能做,只要芯片厂觉得这样做值得(MCU的成本问题)。
FLASH的速度是MCU速度的瓶颈之一,只要FLASH预取的够多,FLASH就不是瓶颈。
比如51最多3字节指令,如果MCU一次预取8字节甚至32字节指令出来,FLASH就不是瓶颈。当然,代价是芯片设计的复杂度(最后归结为成本)。
至于CPU时钟频率,现在的工艺做到200MHz都完全可以。
并且,改进的51,执行一条指令,4CLK都可以(DALLAS的51),其他增强型的51,也均不是以12时钟周期作为1指令周期的。
2:
流水线问题:
流水线深度,考虑到RAM回写的时间,也不一定越深越好。
一般指令,从预读RAM到回写RAM,均需要时间。当MIPS超过20MHz时,RAM的速度也就成了限制。
所以,流水线也需要预等待被处理的数据预读,以及处理完后的数据回写。
另外,好的分支预测单元,可以预先判定出跳转方向,以及预取出相应的指令进入流水线等待。
3:
AVR的问题:
AVR没有上诉的分支预测单元,所以也会造成流水线无效丢失。
AVR的主要问题在于,RAM需要读/写(读均总共需要2指令2周期,回读也是一样2指令2周期),造成大量的CPU运行时间与代码空间浪费!!!
而51最大问题是,因为其CISC结构,所以基本都不做流水线。但是DATA/SFR均能直接操作,无需预读与回写。
4:
芯片可靠性问题:
AVR与C8051均。。。。。。。。。。。。。。。。。。。。。。。。。。。

出0入0汤圆

发表于 2010-11-8 13:58:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-8 15:55:01 | 显示全部楼层
深度帖

谢谢AA55的讲解,也要谢谢67楼挖出来

出0入0汤圆

发表于 2011-10-19 19:50:11 | 显示全部楼层
学习中

出0入0汤圆

发表于 2011-10-20 21:01:23 | 显示全部楼层
回复【24楼】qwernet  小俊
不明白为什么atmel把avr称为1级流水线。
像arm7那样,取指、译码、执行都称为3级流水线。
arm9多了数据访存、回写,称为5级流水线。
c8051流水线有7级那么多?没听过。c8051的流水线与avr、arm等risc结构的芯片是不同的,它是在指令执行时采用流水线,例如它的乘法累加器是3级流水线,相关的指令实际上是要3个周期来执行。跳转指令并不影响这些流水线。但如果下一条乘加指令需要用到前一条乘加指令的结果的话,cpu就会停下来等待。
-----------------------------------------------------------------------

这个和软件编写习惯有关。可以在中间插一些其他的语句来避开流水线的互锁。

出0入0汤圆

发表于 2011-10-21 08:18:55 | 显示全部楼层
mark!!!谢谢楼主分享!!!!

出0入0汤圆

发表于 2011-10-21 09:44:00 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-11-8 22:19:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-8 23:49:38 | 显示全部楼层
好有深度

出0入0汤圆

发表于 2011-11-10 14:10:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-20 13:07:47 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-11-20 13:51:42 | 显示全部楼层
好贴!

出0入0汤圆

发表于 2011-12-5 20:32:07 | 显示全部楼层
回复【3楼】testcode
-----------------------------------------------------------------------

其实都差不多,就看开发成本和难度了!

出0入0汤圆

发表于 2011-12-6 17:05:20 | 显示全部楼层
想想各大高手05年就在这儿聊得“有声有色”了,要是我那时候就看到了,我想我的见识可能要多长几番~赞……
虽然那个测试性能的链接已经无效了,但是大家讨论的精髓还依然存留在ourdev,继续发扬光大,感谢Armok……

出0入0汤圆

发表于 2012-2-14 11:36:24 | 显示全部楼层
我也扫扫 灰尘

出0入0汤圆

发表于 2012-2-21 11:19:36 | 显示全部楼层
长见识啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 09:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表