uc_c++ 发表于 2012-4-24 14:09:28

也来测试一下dhrystone:lgt8f08a vs atmega48

本帖最后由 uc_c++ 于 2012-4-25 13:35 编辑

由于lgt8f08a与atmega48 ram都很小,
所以dhrystone的数组定义改为8*8(原为50*50),减少ram用量。
(不确定这样修改会不会有其他问题)

=========================================
发现8*8数组已经溢出。
代码里面有句:
Arr_2_Glob = 10;


=========================================

不调用string.h,stdlib.h里面的标准库函数,用代码实现。

IAR EWAVR 6.10 最高速度优化

LGT8F08A@26.0M
1000/55.5/1.757=10.25499DMIPS
10.25499DMIPS/26MHZ=0.3944227DMIPS/MHZ

ATMEGA48@7.3728M                      
1000/248.0/1.757=2.29497DMIPS
2.29497DMIPS/7.3728MHZ=0.3112749DMIPS/MHZ

0.3909/0.30785=1.267
lgt8f08a运行速度是atmega48的1.267倍。#include "iolgt8f0xa.h"

void dhrystone (void);

void lgt_delay_us_8m(unsigned short us)
{
while(us--)
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
}


void main(void)
{
   DDRC&=~(MASK_PORTC0|MASK_PORTC1);    //PC0和PC1为输入
   PORTC &=~(MASK_PORTC0|MASK_PORTC1);    //PC0和PC1禁止上拉
   
   PMCR =    MASK_RC16MEN|MASK_OSCMEN;   //使能外部晶振
   lgt_delay_us_8m(10000);               //延时10ms等待晶振输入稳定
   PMCR =    MASK_RC16MEN|MASK_OSCMEN|MASK_EXTMSEL;   //切换主时钟为外部晶振
   PMCR =    MASK_OSCMEN|MASK_EXTMSEL;   //禁止内部RC

   
   CLKPR |=MASK_CLKPCE;    //置位MASK_CLKPCE,4个周期内修改分频系数
   CLKPR=MASK_CLKPCE;    //1分频
   CLKPR &= ~MASK_CLKPCE;    //清除 MASK_CLKPCE
   
    PORTB = 1<<1;
   DDRB = 1<<1;
   
    while(1)
   {   
      PORTB ^= 1<<1;
      dhrystone();    //55.5ms
   }
}

//LGT8F08A@26M
//1000/55.5/1.757=10.25499DMIPS
//10.25499DMIPS/26MHZ=0.3944227DMIPS/MHZ


#include <ioavr.h>

void dhrystone (void);

void main(void)
{
    PORTB = 0x00;
   DDRB = 1<<2;
   
    while(1)
   {   
      PORTB ^= 1<<2;   
      dhrystone();      //248ms
   }
}

//ATMEGA48@7.3728M                     
//1000/248.0/1.757=2.29497DMIPS
//2.29497DMIPS/7.3728MHZ=0.3112749DMIPS/MHZ
完整工程:

logicgreen 发表于 2012-4-24 14:18:39

请教一下DMIPS与MIPS的关系?

LGT 发表于 2012-4-24 18:16:59

非常赞同楼主如此专业的精神 :)
对于LGT与AVR比较, DMIPS是合适的, 因为两者可以在同一环境下工作。

借此贴, 说明几个问题:
1. 为什么8位MCU用MIPS衡量性能最合适
   8位MCU一般用于控制系统。控制系统的主要功能是流程控制和状态控制。
   控制系统通过I/O外设实现。因此对于控制系统的性能来说, 控制流程指令和控制外设指令
   的执行效率最能体现MCU的效率。因此衡量控制类MCU的性能参数多以整体指令的执行效率为标准(MIPS)

2. 对于不同的处理器构架,DMIPS意味着什么
   DMIPS主要用来衡量处理器整数运算能力,这里不仅仅考虑到处理器的MIPS性能,
   同时也兼顾处理器的存储构架的效率(存储带宽效率)。DMIPS是一个构架的综合指数,
   从编译器的优化性能,到处理器构架的性能都综合在其中。
   因此, DMIPS多用于运算和数据传输密集的32位处理器性能测试。

3. 对于8位MCU来说, DMIPS意味着什么
   虽然DMIPS不适合于8位处理器, 但是DMIPS对于8位处理器来说,是可以在一定程度上反映
   一种处理器系统的软件/硬件的综合性能。包括编译器效率和处理器效率。

4. 8位MCU与32位MCU的DMIPS差距在哪里
   很明显,对于单发射MCU来说,32位RISC的MIPS系能不见得会超越8位RISC多少, 但32位处理器的
   存储带宽远远高于8位微处理器。 再加上目前32位处理的D/I cache,跳转预测,浮点协处理,指令多发射等等
   这些因此使得32位MCU的DMIPS远远高于8位系统

5. MCS51的DMIPS究竟如何
   这是大家比较感兴趣的。 随着1T51的出现, MCS51的性能比起传统51最多有超过20倍的提升。
   提升之后的1T51, DMIPS之间也有差距, 这里我给出权威的官方数据:
   1T51软核有三个主要提供商,CAST/Evatronix和DCD
   CAST/Evatronix提供的软和是目前国内地下流通最广发的, R8051XC2
   http://www.evatronix.pl/news/press48.html
   官方给出的数据是:
    The overall IP core performance measured in DMIPS/MHz is 0.088 when the core is set to be 80C51 compliant only, and 0.114   with all implemented enhancements.
   也就是0.114DMIPS/MHz, 这个明显要比RISC低一些
   最牛的是DCD的DQ8051CPU : http://dcd.pl/ipcore/195/dq8051cpu/
   但这个国内目前我还没发现有人使用, 它的DMIPS性能已经接近RISC
    参考http://www.microcontrollercentral.com/author.asp?section_id=1760&doc_id=237998
   performance is about 0.25 DMIPS/MHz (it is in fact 26 times higher than original 8051)
   显然比RISC还有差一点。但已经相当不错。

   其实MCS51的性能还有更大的提升空间, 就看有没有公司愿意为此努力了。


纯学术讨论, 没有其他想法。

jackielau 发表于 2012-4-24 18:57:16

非常专业,我刚开始以为LGT要比avr快50%以上呢,看来性能差不多,价格很实惠!!
等待处M16、M32的型号!最好是引脚兼容!
程序都不用动啊!!呵呵

logicgreen 发表于 2012-4-24 20:11:25

其实MIPS高了有什么用呢?我们不要跑那么高。这个问题一定有人问。

打个比方有一个场合不需要跑很高速度,系统1Mhz就行,由于1T 8051效率低于AVR的RISC架构,都跑1Mhz吧,
体现出来的 mW/MIPS 是不一样的,也就是说干一样多的事情所花费的功率有所不一样,RISC要低于CISC!
所以RISC架构的MCU省电有比较大的设计空间,虽然这些也和制造工艺有关。

sufeila 发表于 2012-4-24 20:35:59

8位这个的意义应该不是很重要,,建议出个RAM大点更有意义,实在不行还能用空间换时间

huayuliang 发表于 2012-4-24 21:13:36

哪个版本啊?抽空俺也玩玩。

vivalite 发表于 2012-4-24 21:37:32

因为计算数组改变了(原版应为50X50),所以DMIPS结果不能和其他MCU比了,但同一平台下的AVR和LGT还是可以比较的。
等回去我用楼主的代码给手里的M644做个实验

avr9299 发表于 2012-4-24 21:40:31

logicgreen 发表于 2012-4-24 20:11 static/image/common/back.gif
其实MIPS高了有什么用呢?我们不要跑那么高。这个问题一定有人问。

打个比方有一个场合不需要跑很高速度, ...

有没有汇编语言的头文件呀?最好弄一个,输出端口和其它设备的地址和ATMEGA8的好象不一样

vivalite 发表于 2012-4-24 21:41:23

请问ATMEGA48还是仿真么

uc_c++ 发表于 2012-4-24 21:51:51

vivalite 发表于 2012-4-24 21:41 static/image/common/back.gif
请问ATMEGA48还是仿真么

用示波器实测,7.3728M晶振,每运行1000次248ms。

vivalite 发表于 2012-4-25 06:37:07

回家用楼主的代码测了一下我的ATMEGA644P。

ATMEGA644@18.432MHz   Dhrystone=99.2ms
1000/99.2/1.757=5.73742DMIPS
5.73742DMIPS/18.432MHZ=0.311275DMIPS/MHZ

ATMEGA644@20.000MHz   Dhrystone=91.2ms
1000/91.2/1.757=6.24070DMIPS
6.24070DMIPS/20MHZ=0.312035DMIPS/MHZ

ATMEGA644整数性能和楼主ATMEGA48很一致,均比LGT低。

LGT真棒!

plc_avr 发表于 2012-4-25 07:23:07

"烂骨头"给力!

Excellence 发表于 2012-4-25 08:20:24

jackielau 发表于 2012-4-24 18:57 static/image/common/back.gif
非常专业,我刚开始以为LGT要比avr快50%以上呢,看来性能差不多,价格很实惠!!
等待处M16、M32的型号!最 ...

+1.。。。。。。。。。。。。。。。。。

hsztc 发表于 2012-4-25 11:39:57

其实速度是差不多的

按楼主的测试
LGT8F08A为0.3944227DMIPS/MHZ 但它的最高工作频率只有16MHz
而ATMEGA48为0.3112749DMIPS/MHZ ,它的最高工作频率为20MHz,

所以它们都工作在最高主频下为:
LGT8F08A = 0.3944227*16=6.3108 DMIPS
ATMEGA48= 0.3112749*20=6.2255 DMIPS

要比MIPS AVR是LGT的1.25倍(20/16)
比DMIP    LGT是AVR的1.0137倍(6.3108/6.2255),基本没差别...

LGT 发表于 2012-4-25 11:57:06

本帖最后由 LGT 于 2012-4-25 12:15 编辑

hsztc 发表于 2012-4-25 11:39 static/image/common/back.gif
其实速度是差不多的

按楼主的测试


MIPS的含义是没秒钟执行的指令数, 前提当然是要在相同的频率下去比较。
如果不是这样, AVR跑20MHz, cortex-a8跑0.00001Hz, 那AVR的MIPS性能会比cortex-a8还高

MIPS反映的是指令执行效率, 也就是每条指令执行周期数整体性能, 和时钟本身没多大关系。
AVR和LGT之间比较MIPS其实也不用测试的, 对比每天指令的执行时间就差不多知道了。

恩, 不过我理解楼上比的是MIPS, 我这里说的是MIPS/MHz。
如果算MIPS的话, 20MHz是要比16MHz优秀。

hsztc 发表于 2012-4-25 12:22:30

LGT 发表于 2012-4-25 11:57 static/image/common/back.gif
MIPS的含义是没秒钟执行的指令数, 前提当然是要在相同的频率下去比较。
如果不是这样, AVR跑20MHz, cor ...

如果cortex-a8最快只能跑0.00001Hz的话,那20MHz的AVR确实比它快,比什么都没用.

你比的是相同频率下的,但每种单片机的主频都是不同的.

LGT 发表于 2012-4-25 12:30:05

hsztc 发表于 2012-4-25 12:22 static/image/common/back.gif
如果cortex-a8最快只能跑0.00001Hz的话,那20MHz的AVR确实比它快,比什么都没用.

你比的是相同频率下的 ...

恩, 了解。 我之前是说MIPS/MHz这个参数了。这个参数是表现内核构架的性能。MIPS是芯片实现的性能。

hsztc 发表于 2012-4-25 12:34:27

LGT 发表于 2012-4-25 11:57 static/image/common/back.gif
MIPS的含义是没秒钟执行的指令数, 前提当然是要在相同的频率下去比较。
如果不是这样, AVR跑20MHz, cor ...

"恩, 不过我理解楼上比的是MIPS, 我这里说的是MIPS/MHz。
如果算MIPS的话, 20MHz是要比16MHz优秀。"

你说的应该是平均MIPS,不是MIPS/MHz...
还有上面20HMz,16MHz指的是最高性能时的指令效率,就是都执行单周期的指令时的效率,实际使用很难达到。

LGT的指令是在早期AVR上做的优化,很多指令使用的周期比早期的AVR的少,所以体现在DMPIS有差别。

但由于LGT的主频比AVR低,所以实际上LGT是跟AVR差不多快的。

LGT 发表于 2012-4-25 12:52:24

hsztc 发表于 2012-4-25 12:34 static/image/common/back.gif
"恩, 不过我理解楼上比的是MIPS, 我这里说的是MIPS/MHz。
如果算MIPS的话, 20MHz是要比16MHz优秀。"



无论是算平均MIPS, 还是MIPS/MHz, LGT都是比AVR要高出一些。
16MHz是一个保守值, 并不是LGT的最高运行频率。

不过如楼上所说, 很多应用都不会跑到MCU的最高频率。
如果能以更低的频率做同样多的事, 那才是比较合适的。

AVR的整体性能都是可以保证的, LGT的是需要等待市场检验的。
就像一个踢甲A, 一个踢甲B, 暂时踢不到一块, 要等我们升级啊, 呵呵

等着看我们之后的产品吧, 有惊喜:)

vivalite 发表于 2012-4-25 13:06:00

MIPS是Million Instructions Per Second的简写,翻译成中文是处理器每秒处理多少百万条指令。MIPS无法在不同的处理器架构下比较,拿RISC的MIPS去比CISC的MIPS是意义不大的。
正因为CISC、RISC横向比较的需要诞生了DMIPS,DMIPS是由一系列模拟处理器常见操作的特定代码组成,可以较准确地跨系统结构对处理器进行横向对比。

uc_c++ 发表于 2012-4-25 13:31:22

本帖最后由 uc_c++ 于 2012-4-25 13:33 编辑

发现代码有一句:Arr_2_Glob = 10;

所以改数组改成8*8有问题。

晚上把数组改成9*9,重测。

vivalite 发表于 2012-4-25 21:52:26

uc_c++ 发表于 2012-4-25 00:31 static/image/common/back.gif
发现代码有一句:Arr_2_Glob = 10;

所以改数组改成8*8有问题。


我觉得影响不大吧,我试过和的结果基本上没任何差别。

hsztc 发表于 2012-4-26 01:38:52

LGT 发表于 2012-4-25 12:52 static/image/common/back.gif
无论是算平均MIPS, 还是MIPS/MHz, LGT都是比AVR要高出一些。
16MHz是一个保守值, 并不是LGT的最高运行 ...

"不过如楼上所说, 很多应用都不会跑到MCU的最高频率。"

你理解错了,我说的是当指令都1T时才能达到1MIPS/MHz,实标使用时不可必免会用到多周期指令,所以达不到1MIPS/MHz.

并不是说很多应用跑不到最高频,但这句话也没错。


还有就是手册上标多少频率,实际只能工作到多少,超过了就算超频了。

LGT 发表于 2012-4-26 08:28:06

hsztc 发表于 2012-4-26 01:38 static/image/common/back.gif
"不过如楼上所说, 很多应用都不会跑到MCU的最高频率。"

你理解错了,我说的是当指令都1T时才能达到1MIP ...

同意楼上的所说。 单发射流水线构架的MCU, 都不可能达到1MIPS/MHz,
LGT比AVR更接近1MIPS/MHz

uc_c++ 发表于 2012-5-3 13:35:59

本帖最后由 uc_c++ 于 2012-5-3 13:39 编辑

加入CC25308051单周期核心。

//CC2530@32MHZ
//360ms 1000LOPS 32MHZ
//1000/360/1.757=1.581DMIPS
//1.581DMIPS/32MHZ=0.0494DMIPS/MHZ#include <iocc2530.h>

void dhrystone(void);
void CLK_RC_TO_XOSC(void);

void main(void)
{
   CLK_RC_TO_XOSC();

   P1DIR |=1<<2;
   
while(1)
{
    P1_2=!P1_2;    //360ms
    dhrystone();
}
}同频下,atmega48是cc2530的6.30倍
LGT是CC2530的7.98倍

logicgreen 发表于 2012-5-3 14:49:48

本帖最后由 logicgreen 于 2012-5-3 14:51 编辑

uc_c++ 发表于 2012-5-3 13:35 static/image/common/back.gif
加入CC25308051单周期核心。

//CC2530@32MHZ


CC2530是哪家的芯片?是1T 的8051核?

uc_c++ 发表于 2012-5-3 14:55:57

本帖最后由 uc_c++ 于 2012-5-3 15:01 编辑

logicgreen 发表于 2012-5-3 14:49 static/image/common/back.gif
CC2530是哪家的芯片?是1T 的8051核?

TI的。
1T 8051核心,32M时钟。
CC2530 RAM用的是XDATA,比IDATA要慢。

STC的1T 8051没试过。

millwood0 发表于 2012-5-3 22:55:30

If you have done enough of those analysis, you will find that the 8051 architecture is very hard to beat, especially prices are factored into the equation.

Most of the difficulties people have with 8051-based mcus are due to their poor support or lack of peripherals.

Goselff 发表于 2012-5-3 23:30:12

MIPS和DMIPS是不同的。MIPS是百万条指令每秒,而DMIPS是Dhrystone MIPS,表示以Dhrystone方法测试得到的MIPS数值,也就是说,按照Dhrystone测试方法测试,每秒钟能跑多少百万条指令。

uc_c++ 发表于 2012-5-4 10:26:17

//EFM32TG@14.0M (内部RC)
//1000/50.5/1.757=11.27033591DMIPS
//11.27033591DMIPS/14MHZ=0.80502399DMIPS/MHZ

logicgreen 发表于 2012-5-4 11:00:49

uc_c++ 发表于 2012-5-4 10:26 static/image/common/back.gif
//EFM32TG@14.0M (内部RC)
//1000/50.5/1.757=11.27033591DMIPS
//11.27033591DMIPS/14MHZ=0.80502399DMIP ...

STM32?还是什么?

vivalite 发表于 2012-5-4 11:58:57

本帖最后由 vivalite 于 2012-5-3 23:00 编辑

找出了一块STC12C5052(宏晶1T的8051),做了一下实验 (26楼源码,9*9数组)

//STC12C5052 @ 18.432MHz
//932ms 1000LOPS 18.432MHZ
//1000/932/1.757=0.613120785DMIPS
//0.613120785DMIPS/18.432MHZ=0.0332639315DMIPS/MHZ

uc_c++ 发表于 2012-5-4 12:02:04

vivalite 发表于 2012-5-4 11:58 static/image/common/back.gif
找出了一块STC12C5052(宏晶1T的8051),做了一下实验

//STC12C5052 @ 18.432MHz


工程能不能上传?
怎么比2530还低??

CC2530            1.581DMIPS/32MHZ=0.0494DMIPS/MHZ:
STC12C5052   0.613120785DMIPS/18.432MHZ=0.0332639315DMIPS/MHZ

vivalite 发表于 2012-5-4 12:02:34

本帖最后由 vivalite 于 2012-5-3 23:08 编辑

logicgreen 发表于 2012-5-3 22:00 static/image/common/back.gif
STM32?还是什么?

好像是Energy Micro的M3

(修改:不是STM32 哈哈)

uc_c++ 发表于 2012-5-4 12:05:01

本帖最后由 uc_c++ 于 2012-5-4 12:10 编辑

vivalite 发表于 2012-5-4 12:02 static/image/common/back.gif
好像是Energy Micro的STM32

Energy Micro的Cortex-M3

vivalite 发表于 2012-5-4 12:06:59

本帖最后由 vivalite 于 2012-5-4 01:41 编辑

uc_c++ 发表于 2012-5-3 23:02 static/image/common/back.gif
工程能不能上传?
怎么比2530还低??



没有IAR C51,用Keil uV4.10编译的

ljt80158015 发表于 2012-5-4 12:10:51

linux系统

-----------------------------------------------------------------
CPU:ATMEL9200180M主频
$./AT9200dhry-my
-I- 51835 Dhrystone per second
-I- 51819 Dhrystone per second
-I- 51798 Dhrystone per second
-I- 51895 Dhrystone per second
-I- 52059 Dhrystone per second
-I- 52068 Dhrystone per second
-I- 51934 Dhrystone per second
-I- 52020 Dhrystone per second
-I- 52091 Dhrystone per second
-I- 51993 Dhrystone per second

-----------------------------------------------------------------
CPU:S3C2440400M主频
# ./AT9200dhry
-I- 33684 Dhrystone per second
-I- 165011 Dhrystone per second
-I- 165011 Dhrystone per second
-I- 165928 Dhrystone per second
-I- 165928 Dhrystone per second
-I- 165451 Dhrystone per second
-I- 165451 Dhrystone per second
-I- 166049 Dhrystone per second
-I- 166049 Dhrystone per second
-I- 164484 Dhrystone per second
-I- 164484 Dhrystone per second
-I- 166052 Dhrystone per second
-I- 166052 Dhrystone per second
-I- 165491 Dhrystone per second
-I- 165491 Dhrystone per second
-I- 165751 Dhrystone per second
-I- 165751 Dhrystone per second
-I- 165641 Dhrystone per second
-I- 165641 Dhrystone per second
-I- 165681 Dhrystone per second

xiaobenyi 发表于 2012-5-4 13:07:12

同一个指令集,MIPS不同,充分说明了LGT不是抄袭的!

vivalite 发表于 2012-5-4 14:30:36

本帖最后由 vivalite 于 2012-5-4 01:35 编辑

来一个打酱油的Cortex M4。IAR 6.3 自带的STM3240G开发板演示模板,最高速度优化,带库

数组
//STM32F407IGH6 @ 168MHz (PLL from 25MHz 外部)
//4.36ms 1000LOPS 168MHZ
//1000/4.36/1.757=130.539441DMIPS
//130.539441DMIPS/168MHZ=0.777020483DMIPS/MHZ

数组
//STM32F407IGH6 @ 168MHz (PLL from 25MHz 外部)
//4.66ms 1000LOPS 168MHZ
//1000/4.66/1.757=122.135615DMIPS
//122.135615DMIPS/168MHZ=0.726997705DMIPS/MHZ

数组
//STM32F407IGH6 @ 168MHz (PLL from 25MHz 外部)
//4.38ms 1000LOPS 168MHZ
//1000/4.38/1.757=129.943371DMIPS
//129.943371DMIPS/168MHZ=0.773472445DMIPS/MHZ

单片机玩C++ 发表于 2012-5-4 17:39:59

用IAR编译,CM3貌似达不到传说中的1.25DMIPS/MHz

ilovepp 发表于 2013-4-9 20:52:19

MDK4.70 使用自带库的strcpy 数组
//STM32F407IGH6 @ 168MHz (PLL from 8MHz 外部)
//3ms 1000LOPS 168MHZ
//1000/3/1.757=189.7DMIPS
//189.71DMIPS/168MHZ=1.13DMIPS/MHZ

guolh_bj 发表于 2013-12-10 16:14:16

哪位高手给个 R8051XC2 练练~~~
guolh@163.com
页: [1]
查看完整版本: 也来测试一下dhrystone:lgt8f08a vs atmega48