发布信息

性能在消费电子领域的重要性及确定卖点最终性能值的方法

作者:软荐小编      2024-08-15 10:35:41     184

一站式

在消费电子领域,性能的重要性不言而喻,是产品竞争力的核心因素之一。

当一个系统软件工程师整合算法嵌入式系统软件教程,打造一个核心卖点的时候,如何确定这个卖点最终的性能值?

1.1 性能天花板

算法耗时理论上限为:算法计算量÷硬件工作频率=完成算法耗时。但单靠理论推导很难得到这个耗时准确值。一般在纯系统中写一个demo来跑算法,这个值就是当前算法耗时上限。在集成到具体的产品系统版本中时,必然会分配一部分算力去处理其他事情或者增加一些前后处理步骤,这些都会增加耗时。

1.2 性能限制

需要考察目前市场上相同功能竞品(需为同一芯片)的表现,或者相同算法的产品在性能较差的上一代芯片上的表现,作为该功能执行时间的下限。

这样,当算法融入到系统中,时间消耗落在上述性能范围内时,功能就能满足要求了。(理论上越接近性能极限越好,但对工程师的要求会越来越严苛,时间消耗和周期也会越来越长,对销售来说未必就是最优解,这种投入也存在边际效益递减的现象,好的产品经理总能设计出一个性能边界点,对销售来说就是最优解。)

2-拆卸

当一个算法融入到系统中,一个功能完成之后,验证效果之后的下一步应该是拆解和性能捕获。一般这个不管是被动还是主动都是一样的,需要汇报功能所花费的时间(主动),或者被 Bug 驱使去拆解(被动)。

2.1 算法应用环节各模块性能数据分析

嵌入式软件设计入门与进阶_嵌入式系统软件教程_嵌入式软件方法与技术

单一算法

单个算法的集成一般需要统计的时​​间,包括init(准备算法handle不耗时,有些AI算法需要加载模型,耗时)、preprocess(准备算法需要的参数和数据,对于图形的话,如果需要对图形进行裁剪和变换,则耗时)、process(算法处理耗时)、以及整体的时间。

多种算法的组合

班级。

2.2 统计分析方法

如果需要计算平均值,可以在代码中添加静态属性变量来统计。或者在稳定的环境下抓取 trace(用 perfetto 查看)。这个不太准确,有一定的波动,但能更好地反映当前算法运行的更多详细信息。(网上有很多关于如何抓取 trace 的教程。)

3-分析

一般是这里出现了性能问题,通过上面的性能分析,一般可以看看是哪个模块出现了性能问题嵌入式系统软件教程,或者使用性能优化杀手 simpleperf 抓取并生成相应的火焰图,对大平面层相应接口进行分析和优化。(关于 perf 的使用以及火焰图的生成,网上也有很多教程)

4-定律

4.1 流程优化

性能公式:算法计算量÷硬件工作频率=完成算法的时间,但这仅针对单个纯算法而言。系统往往需要整合多种算法的组合才能实现一个功能,所以流程优化在这里非常重要。比如多线程并行执行算法,以优化性能。这里的多线程还需要考虑尽可能将算法放在不同的硬件上,以充分利用硬件;将重复执行的小算法抽取出来,一次执行完,等等。

嵌入式软件设计入门与进阶_嵌入式软件方法与技术_嵌入式系统软件教程

4.2 数据传输优化

尽可能摆脱 memcpy 并使用零拷贝。选择合适的硬件进行数据转换。

4.3 牺牲空间换取时间

预应用过程中所需的缓冲内存、提前加载AI模型等

4.4 代码和算法优化

通过跟踪和火焰图,我们可以找到代码中的冗余,并强制对算法进行纯粹的优化。

4.5 硬件优化

通过Snapdragon profile(高通平台)或者met(MTK平台)观察算法执行过程中硬件频率,有无频率提升或者核心绑定的空间。

可以进一步观察硬件之间数据传输的带宽是否是性能的瓶颈,并进行优化。可以使用相应的系统命令来操纵任务事件的优先级。(嗯,这个目前作者还很难做到。)

以上是我对算法集成性能优化的一些浅见,欢迎大家提出意见和建议。

相关内容 查看全部