CPU究竟跑得有多快?
【说在前面的话】
相对人的感官来说CPU跑的太快了——即便是人们常常用来描述时间短暂的“一眨眼功夫”对CPU来说也是及其“漫长”的好几百毫秒了——仔细想想有几个人能在一秒钟内连续眨十次眼睛呢?正因为如此,即便是超级循环里面顺次执行的多个任务,在人类看来也往往是“一瞬间就执行完了”。那么CPU究竟跑的有多快呢?是很快、非常快还是快得不得了?如果我们继续站在人类的视角考虑这个问题,其抽象程度无异于思考“无穷大究竟是多大”。
让我们想象着周围的时间相对你突然都慢了下来,从微处理器的视角重新审视这个世界。
【第一个参考点】
“1MHz就是 1us”
“1MHz就是1us”是一个基准概念,通过修改思考方式,我们就可以利用它快速而有效的解决很多实际问题。作为练习,我们来尝试依次快速的回答以下几个问题:
假设每个时钟脉冲都对应一个指令周期:
已知系统频率是1MHz,请问1us内有几个指令周期?
已知系统频率是12MHz,请问1us内有几个指令周期?
已知系统频率是11.3728MHz,请问1us内有几个指令周期?
已知系统频率是500KHz,请问1us内有几个指令周期?
很显然,如果你试图首先计算出系统周期:
再用1us去相除:
这个过程已经慢了。
让我们来换一种思维模式,既然1MHz对应1us(也就是1us对应一个指令周期),那么12MHz就是1MHz的12倍,1us时间内就有12个指令周期;同理可得,当系统频率分别是11.3728MHz和500KHz(0.5MHz)的时候,1us时间内对应的指令周期数分别是11.3728个和0.5个。
借助这个等效,我们就可以对CPU的处理能力建立更多量化的感官,比如1ms的时间内,CPU能做多少事情呢?由于1ms等于1000us,对1MHz的系统来说,1ms可以完成1000个指令周期,12MHz的系统可以完成12000个指令周期。然而1000和12000这样的数字对于只有十个手指的人类大脑来说还是太抽象了,因此我们更进一步,把指令周期换算成等效的代码尺寸:
由于主流的微控制器其指令集中大多是单周期指令,我们不妨假设所有指令都是单指令周期的,这样1个指令周期就对应一条指令;
假设每条指令都是2个字节大小(16位指令);
这样,1ms时间内1MHz的系统可以运行大约2KB的代码,一个12MHz的系统可以运行24KB的代码,依次类推。
那么2KB是什么概念呢?如果你平时有留意编译后的代码尺寸,2KB大约是一个基础驱动库的尺寸,可以包含一个USART的驱动或者实现电源管理;而24KB几乎是一个小型工程应用的尺寸了。
借助这些非常具体的数字,我们很容易拿它们和中断处理程序进行比较,建立直观的认识——比如:
中断处理程序“执行的是不是足够快”?
“丢中断的风险究竟有多大”等等?
使用中断接收外设数据的时候会不会发生丢失?
可以肯定的是,这种忽略循环和条件分支的评估方法几乎是一个代码的最差情况,也就是说,在1MHz的系统中对于一个1KHz的毫秒中断,中断处理程序越接近2KB,就说明系统越可能“丢中断”。
在这种情况下,除非你通过编译器提供的等效汇编代码仔细的计算过实际的周期数,或者是通过perf_counter这样的工具实际测量过代码的周期消耗——确信时间上处理周期不会大于1ms且这期间不会存在其它中断处理程序,否则你的中断处理程序还是比2KB越小越好。
【一个真实的案例】
在一个72MHz的Cortex-M3/M4系统下,使用中断模式来接收串口数据,波特率为115200的情况下:
最大允许屏蔽中断多长时间?
中断处理程序允许的理论最大安全尺寸是多少?
首先,我们要搞清楚系统的指令大小和指令集的周期数情况。以ARM Cortex M3/M4为例,其指令大部分为单周期指令,支持16位指令和32位指令。为了评估中断处理程序的尺寸上线,我们可以分别以16位指令和32位指令为基础计算出两个结果作为参考范围;
其次,系统频率为72MHz,假设USART没有硬件FIFO,则115200的波特率在典型的“1起始位+1终止位+无校验位+8数据位”的配置下(每个数据帧对应10个bit),实际上对应最大11.52KB/s的数据率——或者说,USART完成中断每秒钟发生 11.52K次。至此,我们可以回答第一个问题,即在这一系统中最大允许屏蔽中断多长时间——1/11.52KHz ≈87us。
也就是说,假设中断屏蔽的时间为87us则中断处理程序的理论最大尺寸范围是(72 * 87 * 2)字节到(72 * 87 * 4)字节,即12.528KB到25.056KB之间。取最小值12KB。
结论,中断处理程序及其调用的子函数,其尺寸总和至少要小于12KB才能确保115200波特率的接收完成中断得到及时的响应。由于未考虑循环、分支以及其它任务的存在,以上结果仅用于粗略的快速评估,实际代码通常应该远小于这一上线值。当实际尺寸接近或者超过13KB时基本可以判定该系统存在无法及时稳定的响应中断的可能——需要对代码进行进一步的具体分析。
(我的天哪!接收1个字节的空隙,居然可以运行13KB代码!!!)
【结语】
“1MHz就是1us”的等效为我们提供了一个基准,建立了关于“CPU跑多快”最直观的感受,同时也为评估代码尺寸、系统可靠性提供了有力的参考。掌握了这个基准,作为一个合格的程序员,不应该仅凭人类的感觉毫无依据评价CPU的处理能力了,“72MHz足够快了吧?”“我已经用了芯片的最高频率”这种话再也不能轻易说了,我们应该定量而不是定性的去看待这类问题。
1.国产替代摸不着门儿?快来回看兆易创新直播课!
2.开源的RISC-V能否成为中国“缺芯”的解药?
3.树莓派Pico:仅4美元的MCU
4.MCU支持AI功能的多种原因~
5.2020年,我学习到的20条软件工程准则~
6.状态机思路在嵌入式开发中的应用~
免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。
CPU究竟跑得有多快?相关推荐
- CPU 可以跑多快?地球到火星的距离告诉你!
来源:码农的荒岛求生 作者:码农的荒岛求生 这张出自Google大神 Jeff Dean的图,展示系统中各种关键操作的时延具体有多少. 需要注意的是这张图上的数据自2012年后就没有再更新过了,统计自 ...
- CPU可以跑多快?地球到火星的距离告诉你!
我们在之前的文章中介绍了一张出自Google大神 Jeff Dean的图,这张图展示系统中各种关键操作的时延具体有多少. 需要注意的是这张图上的数据自2012年后就没有再更新过了,统计自2020年的最 ...
- amd的cpu跑python_Windows下用cpu模式跑通目标检测py-faster-rcnn 的demo.py
关键字:Windows.cpu模式.Python.faster-rcnn.demo.py 声明:原文发表在博客园,未经允许不得转载!!!本篇blog过程已经多名读者实践验证,有人反馈报错TypeErr ...
- 最重要的是跑完,而不是刚开始跑得有多快
到目前为止,你总共在自己本来有兴趣学的事情上对自己说过多少次"唉,我看我没有天分,还是算了吧"的话呢? 这句话通常被用来当作宣告某一段努力完全失败的休止符,也常被用来把某一扇门关上 ...
- i5-8250U 宏碁swift3_i5-8250U:第八代 CPU 的跑分你应该很想知道!
原标题:i5-8250U:第八代 CPU 的跑分你应该很想知道! 目前已经有几款英特尔第八代 CPU 的参数被曝光,无论 i5/i7.桌面端还是移动端,都有核心.线程数的提升.目前第八代的 i5-82 ...
- 计算机处理器的hz越大越好,cpu主频越高运算速度越快吗
你相信电脑cpu主频越高越好吗?可问题是你的电脑配置能不能介绍这要求,可很多人都不明白这其中的知识.为此学习啦小编为大家整理推荐了相关的知识,希望大家喜欢. cpu主频越高运算速度越快的问题解说 台电 ...
- 基于Tusimple数据集在windows cpu上跑通车道线检测算法LSTR
基于Tusimple数据集在windows cpu上跑通车道线检测算法LSTR PS:基于CULane数据集在windows cpu上跑通车道线检测算法LSTR参考: https://blog.csd ...
- 专用神经网络处理器的芯片,cpu可以跑神经网络吗
苹果产品中的"统一内存(unifie?emory)"与以往的"内存怎么样? 这个统一内存就是把内存.GPU的显存和神经网络处理器的缓存放到一起,通过Fabric和CPU/ ...
- 跑分cpu_一款神秘的联发科CPU:跑分达到了622409分
超过10万人正在关注 赶快来关注吧,这里有你想找的热点资讯,这里有你想要的各种资料,还有海量的资源,还在等什么.快来关注,大佬带你开车. 11月30日,安兔兔官方微博曝光了一款神秘的联发科CPU.这款 ...
最新文章
- oracle 中时间类型 date 与 long 互转
- POJ 1742 Coins ( 经典多重部分和问题 DP || 多重背包 )
- springboot开启声明式事务
- CoreAnimation-CAKeyframeAnimation
- Apache CXF实战之二 集成Sping与Web容器
- 6阶子群同构于s3或者z6_顾沛《抽象代数》1.6变换群与置换群习题解答
- ssh登录极路由后台_从浏览器如何进入路由器后台【详细介绍】
- 只愿得一人心白首不分离
- 利用bilibili增强脚本下载B站视频+更多强大功能
- android 接电话 返回后黑屏,安卓手机打电话黑屏原因和解决方法
- Java的运算符-取整,取绝对值,取余数
- 关于数学计算机手抄报简单的,关于简单的数学手抄报图片大全
- 白嫖几十款的微信红包封面
- JAVA面试八股文宝典(黑马学习随笔)-- 基础篇
- 小红书笔记api_小红书笔记怎么写?
- 2026年中国软件定义存储市场容量将接近45.1亿美元
- 3.6.2数据库系统-范式判断:范式分类、第一范式、第二范式、第三范式、BC范式
- 存量时代的竞争法则,从local champion做起
- 挑战感知极限:智能安全感知驱动设计
- python爬取知乎评论_从零开始写Python爬虫 --- 爬虫应用:IT之家热门段子(评论)爬取...