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

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

3天内不再提示

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

星星科技指导员 来源:嵌入式计算设计 作者:Mohammed Billoo 2022-07-04 10:59 次阅读

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

There are separate Python source files that call the two functions above:

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()

The following commands capture a trace in LTTng that can then be examined in Tracealyzer:

$》 lttng create

$》 lttng enable-event --kernel sched_switch

$》 lttng enable-event --python my-logger

$》 lttng start

$》 python3 .py

$》 lttng stop

$》 lttng destroy

poYBAGLCV56ANDAHAARarNZx8ew762.png

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

虽然在上面的跟踪视图中可以看到显着的性能差异,但 Tracealyzer 还可以提供更具体的性能指标。这可以通过转到视图并单击间隔和状态机并使用代码中的 logger.info() 调用插入并标记条目和候选函数的退出。

pYYBAGLCV6WATkeQAABUEXGg624196.png

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

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

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

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

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

结论

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

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

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

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

审核编辑:郭婷

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

    关注

    5106

    文章

    19289

    浏览量

    310219
  • python
    +关注

    关注

    56

    文章

    4813

    浏览量

    85316
收藏 人收藏

    评论

    相关推荐

    嵌入式系统的代码优化与压缩技术

    与续航能力。 二、代码优化策略 算法优化:这是最基础且有效的优化方式。图像处理的嵌入式应用,传统算法可能需要大量的计算资源和时间。
    发表于 02-26 15:00

    如何提高嵌入式代码质量?

    的错误和改进点,提高代码的可读性和健壮性。 4. 版本控制:使用版本控制系统如Git,可以追踪代码变更并轻松进行团队协作,确保每个版本都是可控和可重现的。 优化性能和资源利用率 嵌入式系统
    发表于 01-15 10:48

    MPU嵌入式系统的应用

    一、MPU的基本功能 微处理器单元(MPU)是嵌入式系统的大脑,负责执行程序指令、处理数据和控制其他硬件设备。MPU的基本功能包括: 指令执行:MPU能够从存储器读取指令,解码这些指令,并执行
    的头像 发表于 01-08 09:26 334次阅读

    LDO嵌入式系统的应用 常见LDO故障及解决方法

    LDO嵌入式系统的应用 LDO(Low Dropout Regulator,低降压线性稳压器)是一种常用的电源管理集成电路,它在嵌入式系统
    的头像 发表于 12-13 09:08 1386次阅读

    什么是嵌入式人工智能

    嵌入式人工智能是指将人工智能技术应用于嵌入式系统的一种技术。嵌入式系统是嵌入到其他设备或系统
    的头像 发表于 12-11 09:23 557次阅读
    什么是<b class='flag-5'>嵌入式</b>人工智能

    mmc卡在嵌入式系统的使用

    随着科技的发展,嵌入式系统我们的日常生活扮演着越来越重要的角色。从智能手机到家用电器,再到工业控制系统,嵌入式系统无处不在。存储设备作为嵌入式
    的头像 发表于 11-25 09:58 555次阅读

    嵌入式和人工智能究竟是什么关系?

    与人工智能的结合,无疑是科技发展的一场革命。人工智能硬件加速嵌入式系统以其独特的优势和重要性,发挥着不可或缺的作用。通过深度学习和神经网络等
    发表于 11-14 16:39

    什么是嵌入式?一文读懂嵌入式主板

    现代科技浪潮嵌入式技术已成为支撑各种智能设备和系统运行的核心力量。那么,究竟什么是嵌入式嵌入式系统,顾名思义,是将计算机的硬件和软件
    的头像 发表于 10-16 10:14 1983次阅读

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被称为嵌入式系统的核心组件,是一种用于控制和数据处理的计算机硬件,其设计旨在嵌入特定设备执行专门任务。嵌入式主板如同是设备
    的头像 发表于 09-30 10:05 1180次阅读

    嵌入式系统的实时操作系统

    嵌入式RTOS是嵌入式应用程序运行、相互交互和与外界通信的底层软件机制。本节,您将了解嵌入式软件开发人员使用哪些流行RTOS以及它们运行
    的头像 发表于 08-20 11:28 621次阅读

    聚徽-嵌入式工控机性能方面有什么优势

    嵌入式工控机,亦被称为 Box 整机或 Embedded Industrial Computer,是专为工业现场环境打造的紧凑型计算机。与普通工控机相比,嵌入式工控机展现出了独特的优势,尤其商品
    的头像 发表于 08-13 09:25 441次阅读

    机器视觉嵌入式的应用

    机器视觉嵌入式系统的应用是一个广泛而深入的话题,涉及到许多不同的领域和技术。 机器视觉嵌入式系统
    的头像 发表于 07-16 10:30 694次阅读

    深度学习算法嵌入式平台上的部署

    随着人工智能技术的飞速发展,深度学习算法各个领域的应用日益广泛。然而,将深度学习算法部署到资源受限的嵌入式平台上,仍然是一个具有挑战性的任务。本文将从
    的头像 发表于 07-15 10:03 2030次阅读

    嵌入式工控主板智慧医疗诊断设备的应用

    嵌入式工控主板智慧医疗诊断设备的应用广泛且深入,其高集成度、低功耗、高性能等特点使得它成为现代医疗设备不可或缺的一部分。以下是对
    的头像 发表于 07-11 10:51 654次阅读
    <b class='flag-5'>嵌入式</b>工控主板<b class='flag-5'>在</b>智慧医疗诊断设备<b class='flag-5'>中</b>的应用

    嵌入式fpga是什么意思

    嵌入式FPGA是指将FPGA技术集成到嵌入式系统的一种解决方案。嵌入式系统是一种为特定应用而设计的计算机系统,它通常包括处理器、内存、外设接口等组件,并且被
    的头像 发表于 03-15 14:29 1542次阅读