0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Python中评估不同嵌入式算法的性能

星星科技指导员 来源:嵌入式计算设计 作者:Mohammed Billoo 2022-08-16 11:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Python嵌入式应用程序开发中变得越来越普遍,特别是对于在网络边缘运行的机器学习框架。但是,这种高级通用编程语言抽象出代码中的许多细节,这些细节可能会以开发人员可能不知道的方式影响实现的性能。

让我们举一个明显的例子:计算 斐波那契数列。至少有两种不同的方法可以执行此操作,递归算法和标准迭代算法,性能水平差异很大。

可以使用称为 Tracealyzer 的工具评估不同实现或算法的性能。这是来自 Percepio 的可视化跟踪诊断工具,可让嵌入式软件开发人员在运行时深入了解代码,以便更轻松地调试系统级问题,并帮助他们改进软件的设计和性能。

Tracealyzer 可以与传统调试器(如开源 Eclipse 工具)并排使用,并通过系统级别的几个附加视图补充详细的调试器视图。这有助于理解经典调试器不足以解决的实时问题。

结合Linux 操作系统发行版中的LTTng开源跟踪包,Tracealyzer 可以展示不同级别的性能。这与处理器无关,并且是所选算法的结果。

对于评估,斐波那契数列的每个实现都在一个模块中执行:

def recur_fibo(n):

if n 《=1 n:

return n

else:

return(recur_fibo(n-1) + recur_fibo(n-2))

def non_recur_fibo(n):

result = []

a,b = 0,1

while a 《 n:

result.append(a)

a,b = b, a+b

return result

有单独的 Python 源文件调用上面的两个函数:

import lttngust

import logging

import fib

def example():

logging.basicConfig()

logger = logging.getLogger(‘my-logger’)

logger.info(‘Start’)

fib.recur_fibo(10)

logger.info(‘Stop’)

logger.info(‘Start’)

fib.non_recur_fibo(10)

logger.info(‘Stop’)

if __name__ == ‘__main__’:

example()

以下命令捕获 LTTng 中的跟踪,然后可以在 Tracealyzer 中检查:

$》 lttng 创建

$》 lttng 启用事件--kernel sched_switch

$》 lttng 启用事件--python my-logger

$》 lttng 开始

$》 蟒蛇3.py

$》 lttng 停止

$》 lttng 销毁

poYBAGL7CxyAcjlEAARYc1zOOBg220.png

将标准 Python 记录器替换为名为“my-logger”的记录器允许 Tracealyzer 在工具的跟踪视图中显示事件。由于 Tracealyzer 在此特定示例中未捕获任何应用程序数据,因此无需将软件配置为读取数据值。相反,只需要一个自定义间隔来标记两个函数的进入和退出。

虽然在上面的跟踪视图中可以看到显着的性能差异,但 Tracealyzer 还可以提供更具体的性能指标。这可以通过转到视图并单击间隔和状态机来完成,并使用代码中的 logger.info() 调用插入的“开始”和“停止”字符串创建自定义间隔,并标记条目和候选函数的退出。

poYBAGL7CySANLoNAABTmwf87_o515.png

区间图显示递归算法(首先执行)和迭代算法(其次执行)之间存在 20 倍的差异。

在此示例中,我们仅使用每种算法计算 10 个斐波那契数。如果没有 Tracealyzer,可能需要更多的迭代才能获得一些有意义的见解,但这有两个问题。首先,当递归 Fibonacci 算法运行到 1000(甚至 100)时,Python 会简单地坐在那里。这将是令人担忧的,因为不清楚这种不响应是由于实现中的错误还是其他原因。在这种情况下,我们可能会猜到为什么会发生这种情况,但是对于更复杂的问题,需要大量的日志记录来了解瓶颈在哪里。

其次,如果在嵌入式系统上运行多个应用程序,这些其他应用程序可能会破坏目标应用程序,这也会增加算法或函数完成执行的时间。没有踪迹,就没有简单的方法来确定是否是这种情况。

相反,Python 中的 LTTng 和 Tracealyzer 的结合突出表明,问题在于所选算法的基本特征。这在开发更复杂的算法时非常宝贵。此示例实现可作为如何评估未来算法实现的性能的参考。在单独的 Python 模块中实现核心功能通常是一种很好的编程习惯,这也简化了对特定功能的跟踪。

由于跟踪开销几乎可以忽略不计,跟踪点可以保留在应用程序中,因为它在目标嵌入式系统甚至生产中进行测试,从而允许 Tracealyzer 工具在生产代码库中生成性能指标。这对于常规系统测试非常有用,并且允许使用相同的代码库来确保应用程序在功能上正确且高性能,而只需进行最少的更改。

结论

使用 Tracealyzer 和 LTTng 捕获 Python 应用程序中的性能指标提供了对算法实现的宝贵分析。

这种方法的最小开销意味着可以保留代码的检测以在目标嵌入式系统上使用。这可以对目标应用程序进行更多监控,并促进对与其他应用程序和操作系统交互的分析。例如,可能有另一个进程或线程抢占目标应用程序并影响性能。Tracealyzer 和 LTTng 的组合可以识别此类异常的原因,这允许开发人员改进实现以防止进一步的问题。

虽然斐波那契数列的示例实现相对无害,但它突出了 Python 语言的一个关键特征,可以为更复杂实现的开发提供信息。

此示例还显示了在设计中使用单独模块的价值。使用跟踪,开发人员可以在扩展到完整的系统实现之前测量和验证这些模块中关键核心功能的性能,而无需大量开销。这有助于证明应用程序在功能上正确且性能良好,且目标环境中的更改最少。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5209

    文章

    20647

    浏览量

    336928
  • python
    +关注

    关注

    58

    文章

    4885

    浏览量

    90301
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何成为一名高薪嵌入式工程师?

    精通指针、内存管理、结构体、位操作等,理解底层硬件交互原理。 C++(可选):面向对象编程嵌入式Linux或复杂系统应用广泛,如驱动开发、中间件设计。 汇编语言:理解处理器架构(如ARM
    发表于 04-09 09:03

    嵌入式春招笔试高频算法题(附解题思路)

    ,却还是笔试翻车—— 要么思路不清晰,要么代码有bug,要么不符合嵌入式场景要求,白白浪费春招机会。 嵌入式春招算法题,核心是“基础+适
    发表于 03-18 10:08

    STM32开发的五大嵌入式系统

    受限的嵌入式环境运行,能够RAM和ROM资源较少的情况下运行,适用于各种嵌入式设备。 3.支持实时性需求:uClinux提供了实时性支持,能够满足对任务响应时间有严格要求的应用场景
    发表于 01-21 10:48

    什么是嵌入式应用开发?

    概述 所谓的嵌入式应用开发就是嵌入式操作系统下进行开发、软硬件综合开发 ‌嵌入式应用开发‌是指在嵌入式操作系统下进行开发,包括系统化设计
    发表于 01-12 16:13

    OPTIGA™ Trust Adapter:嵌入式安全解决方案评估利器

    OPTIGA™ Trust Adapter:嵌入式安全解决方案评估利器 嵌入式系统设计,安全问题一直是工程师们关注的焦点。为了方便对OP
    的头像 发表于 12-19 11:50 462次阅读

    C语言单元测试嵌入式软件开发的作用及专业工具的应用

    语言使用率超过90%。从智能家居温控系统到汽车ECU控制单元,从工业机器人到医疗设备,C语言仍然是嵌入式开发的首选语言。 C语言嵌入式开发的核心优势包括: ‌高效
    发表于 12-18 11:46

    CW32嵌入式软件开发的必备知识

    嵌入式系统中最常用的编程语言,因为它们提供了直接访问硬件的能力,并且代码执行效率高。 了解汇编语言,用于编写底层驱动、中断处理程序以及性能要求极高的代码段。 对其他编程语言如Python、Java等有
    发表于 11-28 07:48

    C语言嵌入式开发的应用

    C 语言汽车电子控制系统开发的主导地位。 2、设备驱动程序 设备驱动程序是嵌入式系统连接硬件和软件的桥梁,它负责实现嵌入式系统与
    发表于 11-21 08:09

    嵌入式与FPGA的区别

    分为算法和控制,而算法的工资会比控制高,因为技术含量比控制高得多,但算法适合高数比较好的人学。 ⭕最后了解下入行门槛? ✅1、嵌入式系统的
    发表于 11-20 07:12

    嵌入式和FPGA的区别

    、光传输) 高性能计算(算法加速) 原型验证(ASIC前期验证) 军事航天(抗辐射、高可靠需求) 未来发展趋势 随着技术的融合,我们看到嵌入式处理器与FPGA结合的SoC器件(如Xilinx
    发表于 11-19 06:55

    嵌入式电力仪表配电系统的应用与选型

    现代配电系统,对电力参数的精确测量、电能计量以及设备运行状态的可靠监控,是保障供电安全、实现能效管理的基础。各类嵌入式电力仪表作为关键测量元件,广泛应用于进线柜、出线柜等场景,为系统运行提供数据
    的头像 发表于 09-26 09:37 742次阅读
    <b class='flag-5'>嵌入式</b>电力仪表<b class='flag-5'>在</b>配电系统<b class='flag-5'>中</b>的应用与选型

    是德示波器MSOX3052T嵌入式系统的应用

    现代电子系统设计嵌入式系统已成为智能设备与物联网的核心。面对日益复杂的硬件架构与软件算法,调试工具的性能直接决定了产品开发周期与最终可
    的头像 发表于 08-27 17:38 794次阅读
    是德示波器MSOX3052T<b class='flag-5'>在</b><b class='flag-5'>嵌入式</b>系统<b class='flag-5'>中</b>的应用

    盘点嵌入式就业所需要的技能有哪些?

    ,把握未来的职业机遇。 1.智能汽车行业: - 熟悉嵌入式编程语言,如C/C++、Python等。 - 掌握嵌入式系统设计与开发流程,了解汽车电子控制系统的基本原理。 - 具备良好的数据结构和
    发表于 08-11 15:43

    Linux嵌入式和单片机嵌入式的区别?

    Linux嵌入式与单片机嵌入式多个方面存在显著的区别,以下是详细的比较和归纳: 一、基本概念 1. Linux嵌入式: 定义:将Linux操作系统运行在
    发表于 06-20 09:46

    嵌入式开发入门指南:从零开始学习嵌入式

    特定功能的计算机系统,广泛应用于智能家居、工业控制、医疗设备、车载系统等领域。 2. 学习嵌入式开发的前置知识熟悉C语言编程掌握基本的数据结构与算法了解数字电路与微控制器原理熟悉Linux操作系统
    发表于 05-15 09:29