内存篇之程序内存消耗评价指标

    嵌入式软件除CPU占用率或者说运行速度外,内存方面还有三大量化评价标准,即ROM size, Peak memory occupation和 max stack depth,虽然不属于什么官方标准,但这三点的确综合反映了程序内存占用方面的整体指标。

    rom size既不是指exe文件大小,也不是lib文件大小,而是目标文件中有效二进制段大小。exe和lib文件中都有一些辅助段,如文件头/加载信息/符号表等,这些段在最终进驻系统RAM的过程中一般会被剔除。因此统计模块的ROM size大小要用二进制工具(如gcc中的ar或objdump等toolchain)分析,累加“代码段”+“数据段”等有效的内存占用段,得到最终结果。

ROM size与编译器及其编译选项有一定相关性,同样的代码由不同的编译器编译,最终获得的纯粹二进制代码大小会有一定差别。如C优化篇提到空间换时间的循环展开就是增大ROM size换取速度的提高。

    peak memory occupation是指模块内不断malloc 与free的过程中,动态堆内存消耗的最高点,这个指标代表了模块对内存的需求。注意这是一个动态过程,并不是将代码中所有malloc的内存大小相加的值,可对照理解内存泄漏中的隐式泄漏。

 

    max stack depth是指整个模块运行过程中所进入的最大栈深度。软件运行中不停进出函数,同时也会不停压栈和出栈,在这个动态过程中触及的最大栈内存的深度代表了模块对系统栈段最小容量的要求。在程序由PC移植到嵌入式系统时要特别注意这个指标,往往要消除一些函数内部局部大数组来降低栈深度,满足嵌入式平台的要求。可参见栈溢出。

这几个评价标准在不同应用中各自有不同侧重点,要根据硬件平台特性综合考量。
### YOLO模型中的FLOPs计算及其意义 #### 什么是FLOPs? 浮点运算次数(Floating Point Operations Per Second, FLOPs)是一种衡量计算机程序执行效率的重要指标,在深度学习领域尤其如此。它表示完成一次前向传播过程中所需的浮点操作总数[^1]。对于YOLO系列模型而言,FLOPs可以用来评估模型的复杂度以及其在不同硬件上的运行性能。 #### 如何计算YOLO模型的FLOPs? 通常情况下,可以通过专门设计用于统计神经网络参数和计算量的工具来获取FLOPs数值。例如`thop`库就是一种常用的方法之一,它可以针对PyTorch框架下的各种模型提供详细的分析数据[^2]。具体实现如下: ```python from thop import profile import torch from models.yolo import Model device = 'cuda' if torch.cuda.is_available() else 'cpu' model = Model(cfg='yolov5s.yaml').to(device) input_tensor = torch.randn(1, 3, 640, 640).to(device) flops, params = profile(model, inputs=(input_tensor,)) print(f"FLOPs: {flops / 1e9:.2f}G") ``` 上述代码片段展示了如何利用`thop.profile()`方法快速得到指定输入尺寸下YOLOv5小型版本(即`s`版)所对应的理论峰值计算需求——以十亿次浮点运算为单位表达的结果。 另外值得注意的是,在实际应用当中除了关注总的FLOP外还需要考虑其他因素比如内存访问成本(Memory Access Cost),这是因为即使两个算法具有相同的FLOP数但由于它们之间存在差异化的缓存命中率或者寄存器利用率等原因最终可能导致显著不同的真实世界表现[^3]。 #### FLOPs的意义 - **资源消耗预测**:通过提前估算出目标检测任务所需的大致计算规模可以帮助开发者合理规划部署环境并优化架构选择。 - **性能对比依据**:当多个候选方案具备相近精度水平时,则可借助更低FLOP值作为筛选条件从而挑选更加高效节能的选择项。 - **移动端适配考量**:鉴于嵌入式设备往往受限于有限算力条件下工作因此降低每帧处理过程里涉及过多冗余计算成为提升用户体验的关键环节之一。 尽管如此也应当意识到单纯依赖FLOP并不能全面反映整个系统的整体效能状况因为它忽略了诸如I/O瓶颈等因素的影响所以仅将其视为众多评判标准里的其中一个维度较为合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值