数码之家

 找回密码
 立即注册
搜索
查看: 2386|回复: 16

[Arduino] 运算π值,对比一下

[复制链接]
发表于 2020-4-15 09:23:00 | 显示全部楼层 |阅读模式
本帖最后由 人艰不拆了 于 2020-4-15 21:29 编辑

本来想看看单片机浮点能力的,可是怎么都算不对
就是1-1/3+1/5-1/7+1/9这个算法吧,没记错的话
但是这个也不完全是浮点运算啊!

单片机算到小数点后5位用时8秒
但是算的不太对


用vb写一下,这是直接求π值,单精度浮点和双精度浮点是
不一样的,双精度要精确很多


这是电脑算的,分两个精度,单精度和单片机结果基本一致
,计算有误差,双精度好些,但是再算下去,也会偏离实际值的
看速度,电脑起码比单片机快10倍,而且vb本来就以慢著称





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2020-4-15 09:27:32 | 显示全部楼层
不对,是按下面这个精度比较的,应该是差100倍速度的,上面是更高精度的:mad:
回复 支持 反对

使用道具 举报

发表于 2020-4-15 10:52:51 | 显示全部楼层
贴程序看看?

打赏

参与人数 1家元 +5 收起 理由
人艰不拆了 + 5

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 10:55:13 | 显示全部楼层

极为简单,有空贴一下:loveliness:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 10:56:13 | 显示全部楼层

你要看什么程序,arduino,还是vb呢,这两个估计你都不玩:titter:
回复 支持 反对

使用道具 举报

发表于 2020-4-15 11:19:59 | 显示全部楼层
实际上pi完全可以用简单分数拟合pi=355/113,精度足够了。这个分数算出来是小数,但是可以对分子进行放大比如说10000倍甚至更高,再乘以放大后的半径,就可以得到放大若干倍的周长或者面积。这时候直接做输出就行了,避免浮点运算。
运算变量可以用long int,或者说是uint32,long long int或者是uint64,比浮点快了不知多少。浮点的拆装,尾数对齐,阶码修正,都要花费很多时间。

打赏

参与人数 2家元 +23 收起 理由
人艰不拆了 + 5
2545889167 + 18 是的

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-4-15 11:21:50 | 显示全部楼层
人艰不拆了 发表于 2020-4-15 10:56
你要看什么程序,arduino,还是vb呢,这两个估计你都不玩

都是相通的呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 11:21:52 | 显示全部楼层
la45088d1 发表于 2020-4-15 11:19
实际上pi完全可以用简单分数拟合pi=355/113,精度足够了。这个分数算出来是小数,但是可以对分子进行放大比 ...

我就是要看看浮点速度啊,vb程序加载时就直接给出π值了,完全不用算,这个是算着玩的:loveliness:
回复 支持 反对

使用道具 举报

发表于 2020-4-15 11:25:38 | 显示全部楼层
人艰不拆了 发表于 2020-4-15 11:21
我就是要看看浮点速度啊,vb程序加载时就直接给出π值了,完全不用算,这个是算着玩的 ...

浮点速度不用看,直接看浮点库的代码就行了。
比如说写这样的函数:
float fadd(float X, float Y)
{
    return X+Y;
}
然后看反汇编这个函数调用的固化浮点库函数,看看编译器内的固化浮点计算方法是什么样的就知道大概有多快了。这样你就知道计算浮点加法大概是个什么复杂度。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 11:27:32 | 显示全部楼层
la45088d1 发表于 2020-4-15 11:25
浮点速度不用看,直接看浮点库的代码就行了。
比如说写这样的函数:
float fadd(float X, float Y)

我做这个主要是看看什么影响的我的屏幕显示速度,是代码还是硬件,顺便比较一下各个单片机的运算速度:loveliness:
回复 支持 反对

使用道具 举报

发表于 2020-4-15 11:40:44 | 显示全部楼层
无论是单片机还是电脑都有通用的跑分测试算法,如:
Dhrystone   整数运算
Whetstone  浮点运算
附上我测试的结果:
续:

官方其他芯片:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +20 收起 理由
人艰不拆了 + 20

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 11:43:22 | 显示全部楼层
huaweiwx 发表于 2020-4-15 11:40
无论是单片机还是电脑都有通用的跑分测试算法,如:
Dhrystone   整数运算
Whetstone  浮点运算

这个不错,哈哈:loveliness:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 11:44:48 | 显示全部楼层
huaweiwx 发表于 2020-4-15 11:40
无论是单片机还是电脑都有通用的跑分测试算法,如:
Dhrystone   整数运算
Whetstone  浮点运算

怎么安装到单片机上呢
回复 支持 反对

使用道具 举报

发表于 2020-4-15 11:52:05 | 显示全部楼层
人艰不拆了 发表于 2020-4-15 11:44
怎么安装到单片机上呢

看我的共享:
https://github.com/huaweiwx/STM3 ... l_boards/Benchmarks

这是通用的,和硬件无关,因此测试 avr/arm/等任一款芯片;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 15:01:40 | 显示全部楼层
huaweiwx 发表于 2020-4-15 11:52
看我的共享:
https://github.com/huaweiwx/STM32GENERIC/tree/master/STM32/libraries/BoardExamples/ex ...

具体怎么衡量指标的呢,通过什么方法啊,没看懂:titter:,哈哈
回复 支持 反对

使用道具 举报

发表于 2020-4-15 22:22:47 | 显示全部楼层
本帖最后由 huaweiwx 于 2020-4-16 01:01 编辑
人艰不拆了 发表于 2020-4-15 15:01
具体怎么衡量指标的呢,通过什么方法啊,没看懂,哈哈

关于 whetstone 有篇文章专门介绍:
https://wenku.baidu.com/view/a858c14ce518964bcf847cb9.html
Dhrystone   百度下,也能看到相关的介绍:
https://wenku.baidu.com/view/6c4 ... ?sxts=1586960628216

按ST官方介绍 STM32F1 可以达到 1.25 DMIPS:




而根据我上述测试结果:F103 72M 只有 : 43.05  / 72    = 0.56  MIPS/Mhz (官宣 :1.25  0 wait )
                                   F429 180M 系列   126.27 / 180 = 0.70   MIPS/Mhz (官宣 :210/168  = 1.25)
F7/H7 是真的强大,      H743 400M          611.26 / 400 = 1.53   MIPS/Mhz (官宣 :1327/480 =2.76)

结果和官宣有差异可能是:1 编译器不同,2 优化等级差异,3 对 F4以上芯片,堆栈和变量我均没有使用内部更快的CCRAM;4 官宣说是运行在 0 等待内存的结果,但我初始化flash是按手册建议的等待周期设置的,没做降低主频使flash 0或高主频强制flash 0 等待这样的条件进行测试,有点好奇下次抽空看看是否可以提高些;

上述除主频的结果就可以理解成单位时钟执行的综合指令数,这个指令是根据常用应用各指令使用的频度设计出的Dhrystone测试;大致反映了我们常规的应用下芯片的执行性能;


说句题外话,   M7内核 的H7/F7 各项指标均全面超越了arm9 的NUVOTON  NUC970;


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2020-4-16 00:24:41 | 显示全部楼层
huaweiwx 发表于 2020-4-15 22:22
关于 whetstone 有篇文章专门介绍:
https://wenku.baidu.com/view/a858c14ce518964bcf847cb9.html
Dhryst ...

在我上面的共享中还有个也是常用测试代码 CoreMark,我补充了一部分测试结果(红色部分)比较如下:
# CoreMark - CPU Performance Benchmark

Measures the number for times per second your processor can perform a
variety of common tasks: linked list management, matrix multiply, and
executing state machines.

| Board                     | CoreMark |
| ------------------------- | :------: |
| Teensy 4.0                | 2313.57  |
| Nucleo-H743ZI M7(400MHz)  | 1251.49  |
| Nucleo-F767ZI M7(218MHz)  |  649.20  |
| Adafruit Metro M4 (200MHz overclock, 'dragons' optimization) | 536.35   |
| Adafruit Metro M4 (180MHz overclock, faster optimizations) | 458.19   |
| Teensy 3.6                | 440.72   |
| Sparkfun ESP32 Thing      | 351.33   |
| Adafruit HUZZAH 32        | 351.35   |
| Nuvoton M481 (192MHz)     | 290.17   |
| Teensy 3.5                | 265.50   |
| Teensy 3.2 (96MHz overclock, faster optimizations)            | 218.26   |
| Adafruit Metro M4 (120MHz, smaller code) | 214.85   |
| STM32F407(168MHz)         | 183.72   |
| SAM4S_XPLAINED(120MHz)    | 129.89   |
| Nucleo-F401RE(84MHz)         | 120.11   |
| GD32F207(120MHz)          | 103.21   |
| STM32F103(72MHz)          | 102.49   |
| Teensy 3.2 (72MHz)        | 168.62   |
| Teensy 3.2 (72MHz, smaller code)            | 126.76   |
| Arduino Due               | 94.95    |
| Arduino Zero              | 56.86    |
| Arduino Nano Every        | 8.20     |
| Arduino Mega              | 7.03     |

(larger numbers are better)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-12 04:56 , Processed in 0.234000 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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