百科问答小站 logo
百科问答小站 font logo



现在单片机比如ESP32一秒内执行多少次代码? 第1页

  

user avatar   zhang-hao-72 网友的相关建议: 
      

你是写的C代码然后二进制编译下载了运行么? 还是python/lua之类脚本? 后者就别考虑一秒多少次了.

现代单片机, 笼统地说, 大部分都是单周期指令的, 51也会号称自己是"1T 8051", 虽然还是有不少需要4-6个周期的指令. AVR和ARM之类RISC指令集里大部分简单指令是单周期的, 如图:

STM8虽然是CISC, 靠流水线也基本实现了单周期, 如图:

有的是8位, 有的是32位, 有的是RISC, 有的是CISC, 怎么比较? 所以80年代有人开发了dhrystone测试程序, 当时DEC公司的VAX计算机主频是1MHz, 每秒能执行1757次dhrystone, 于是把每秒1757次dhrystone定义为1DMIPS. dhrystone基本只考察整数运算性能.

常用的单片机里, 51基本是0.1DMIPS/MHz以下(包括牛皮吹上天的STC), STM8约0.33DMIPS/MHz, AVR约0.5DMIPS/MHz, 乘以主频, 24M的STC51有2DMIPS, 16M的STM8有5DMIPS, 同样16M的AVR有8DMIPS. 和x86 PC相比, 大约是介于286和386之间.

STM32F10x标称1.25DMIPS/MHz, 然而却没有说72MHz主频时能跑到90DMIPS, 为什么? 因为它的FLASH在高频时需要插入等待周期, 性能会稍有下降. 实测72MHz时性能是65DMIPS左右, 大约是高端486到低端Pentium的水平.

STM32F40x加了cache, 解决了这个问题, 因此官方标称168MHz时性能就是168*1.25=210DMIPS, 接近Pentium MMX.

ESP8266实测80MHz时89DMIPS, 大约1.1DMIPS/MHz. 和STM32差不多. ESP32我没测, 如果和ESP8266相同水平, 在240MHz时应该至少有270DMIPS左右.

国产的GD32F350和GD32FFPR标称频率分别是108MHz和168MHz, 实际上都能超频到280MHz左右. 这俩因为把flash完整镜像到ram里运行, 不存在flash等待周期导致性能下降的问题, 因此超频后的性能达到了320DMIPS左右, 相当于当年的中期K6和赛扬300A之类.

GD32VF103则是换成了RISCV内核, 标称1.5DMIPS/MHz, 然而我和几个朋友实测的结果都达到了2DMIPS/MHz左右. 这东西能超频到192MHz, 总性能达到了382DMIPS.

双发射的STM32H750每个周期执行两条指令, 标称2.14DMIPS/MHz, 480M主频, 乘起来是1027DMIPS(官方数据, 非实测.), 已经和Pentium3差不多了.

我手里实测过几十款MCU, 详细数据见github链接:


x86 CPU的dhrystone数据见链接:


user avatar   li-yi-yi-94-2 网友的相关建议: 
      

反对一下240MHz就是2.4亿条的回答。

经历过AMD推土机时代的人都知道处理器性能不能只看频率,有一个叫做IPC的东西(每个时钟周期能执行的指令数),而如果处理器是240MHz就是一秒2.4亿时钟周期,为了对比不同主频和IPC的CPU性能,又有一个叫做MIPS(Million Instructions Per Second)的性能指标(每秒平均可执行的单字节长定点指令数)这就是你想问的东西了。但是很多情况下厂商不会公布处理器的MIPS指标,不过似乎还是能找到esp32的mips的是600MIPS。

另外值得注意的是,在同一架构下,每条指令的执行时间并不是等长的。指令也不是一条执行完才开始执行下一条的,由于处理器流水线的存在可以更好的利用CPU资源:将一条指令的执行过程分为几个子部分,这样流水线上就可以同时存在多条不同执行阶段指令。有些指令比较简单,比如只是单纯的对通用寄存器赋值而不需要读写内存,就会省去流水线上的很多步骤使得执行得会更快,而对于需要内存读写的指令则会慢一些。

你所说的执行速度明显不正常的变化和CPU本身关系应该不大,大概率是io操作导致的,单片机的io主要是通过读写内存映射寄存器来完成的,这种读写行为很可能是占用执行时间的主要原因。




  

相关话题

  单片机为什么能直接烧录程序? 
  8051 6502 avr的好处都有啥? 
  能求教STM32动态内存分配如何解决内存碎片问题吗? 
  mac 能进行单片机(stm32)开发吗? 
  为什么c51编程多用unsigned char/int? 
  请问如何把32个霍尔传感器输入到stm32? 
  如何实现stm32运行sd卡里的程序? 
  寄存器会比用库开发,程序运行更快吗? 
  C语言开发单片机为什么大多数都采用全局变量的形式? 
  8051 6502 avr的好处都有啥? 

前一个讨论
国内有哪些尚未过度开发的景点值得一去?
下一个讨论
2G时代的手机不准有 WiFi 这个规定是怎样被废除的?





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利