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

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

3天内不再提示

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

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

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

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

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

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

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

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

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 中捕获跟踪,然后可以在跟踪测试器中对其进行检查:

$> lttng create

$> lttng enable-event --kernel sched_switch

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

$> lttng start

$> python3 .py

$> lttng stop

$> lttng destroy

pYYBAGNPW7mAPX8uAAblgiUV8WQ354.png

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

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

62827ea71d36c-05_16_2022+Billoo+%232.png

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

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

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

相反,Python和跟踪测试器中LTTng的组合突出了所选择算法的基本特征才是问题所在。在开发更复杂的算法时,这是非常宝贵的。此示例实现可作为有关如何评估未来算法实现性能的参考。一般来说,在单独的Python模块中实现核心功能是良好的编程实践,这也简化了特定功能的跟踪。

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

结论

使用跟踪测试程序和 LTTng 在 Python 应用程序中捕获性能指标,可以对算法的实现进行宝贵的分析。

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

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

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

审核编辑:郭婷

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

    关注

    5106

    文章

    19295

    浏览量

    310328
  • python
    +关注

    关注

    56

    文章

    4813

    浏览量

    85329
收藏 人收藏

    相关推荐

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

    在当今数字化时代,嵌入式系统广泛应用于各个领域,从智能家居设备到工业控制系统,从汽车电子到可穿戴设备,它们无处不在。而在嵌入式系统开发,代码优化与压缩技术至关重要,直接影响着系统的性能
    发表于 02-26 15:00

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

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

    嵌入式主板的概述与发展

    随着科技的迅猛发展,嵌入式系统在现代电子产品扮演着越来越重要的角色。嵌入式主板作为嵌入式系统的核心组件之一,承担着控制、处理和通讯等多种功能。本文将对
    的头像 发表于 01-13 16:30 461次阅读
    <b class='flag-5'>嵌入式</b>主板的概述与发展

    什么是嵌入式人工智能

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

    mmc卡在嵌入式系统的使用

    。多媒体卡(MultiMediaCard,简称MMC)作为一种小型、高性能、低成本的存储解决方案,被广泛应用于嵌入式系统。 1. MMC卡的工作原理 MMC卡是一种基于闪存技术的存储卡,最初由西门子和东芝共同开发。它遵循SD卡
    的头像 发表于 11-25 09:58 567次阅读

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

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

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

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

    AMD 面向嵌入式系统推出高能效 EPYC 嵌入式 8004 系列

    AMD 凭借其 EPYC™ 嵌入式处理器不断树立行业标准,为网络、存储和工业应用提供卓越的性能、效率、连接与创新。今天,我们正以第四代 AMD EPYC 嵌入式 8004 系列处理器扩展这一
    发表于 10-11 13:58 808次阅读

    【「嵌入式Hypervisor:架构、原理与应用」阅读体验】+第三四章阅读报告

    探索嵌入式Hypervisor的相关技术,包括其在实际应用的案例分析和性能评估等。同时,我也将关注嵌入式Hypervisor技术的最新发展
    发表于 10-09 18:29

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

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

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

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

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

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

    机器视觉在嵌入式的应用

    机器视觉在嵌入式系统的应用是一个广泛而深入的话题,涉及到许多不同的领域和技术。 机器视觉在嵌入式系统的应用 1. 引言 机器视觉是一种模拟人类视觉系统的功能,通过图像采集、处理和分
    的头像 发表于 07-16 10:30 697次阅读

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

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

    嵌入式系统怎么学?

    、C++或者Python。这些语言在嵌入式系统开发中都被广泛应用。 3、微处理器/微控制器架构:学习常见的微处理器和微控制器架构,如ARM、AVR、PIC等,了解其特性和应用场景。 4、嵌入式系统开发
    发表于 07-02 10:10