91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

星星科技指導(dǎo)員 ? 來源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Mohammed Billoo ? 2022-07-04 10:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Python嵌入式應(yīng)用程序開發(fā)中變得越來越普遍,特別是對于在網(wǎng)絡(luò)邊緣運(yùn)行的機(jī)器學(xué)習(xí)框架。但是,這種高級通用編程語言抽象出代碼中的許多細(xì)節(jié),這些細(xì)節(jié)可能會(huì)以開發(fā)人員可能不知道的方式影響實(shí)現(xiàn)的性能。

讓我們舉一個(gè)明顯的例子:計(jì)算 斐波那契數(shù)列。至少有兩種不同的方法可以執(zhí)行此操作,遞歸算法和標(biāo)準(zhǔn)迭代算法,性能水平差異很大。

可以使用稱為 Tracealyzer 的工具評估不同實(shí)現(xiàn)或算法的性能。這是來自 Percepio 的可視化跟蹤診斷工具,可讓嵌入式軟件開發(fā)人員在運(yùn)行時(shí)深入了解代碼,以便更輕松地調(diào)試系統(tǒng)級問題,并幫助他們改進(jìn)軟件的設(shè)計(jì)和性能。

Tracealyzer 可以與傳統(tǒng)調(diào)試器(如開源 Eclipse 工具)并排使用,并通過系統(tǒng)級別的幾個(gè)附加視圖補(bǔ)充詳細(xì)的調(diào)試器視圖。這有助于理解經(jīng)典調(diào)試器不足以解決的實(shí)時(shí)問題。

結(jié)合Linux 操作系統(tǒng)發(fā)行版中的LTTng開源跟蹤包,Tracealyzer 可以展示不同級別的性能。這與處理器無關(guān),并且是所選算法的結(jié)果。

對于評估,斐波那契數(shù)列的每個(gè)實(shí)現(xiàn)都在一個(gè)模塊中執(zhí)行:

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

將標(biāo)準(zhǔn) Python 記錄器替換為名為“my-logger”的記錄器允許 Tracealyzer 在工具的跟蹤視圖中顯示事件。由于 Tracealyzer 在此特定示例中未捕獲任何應(yīng)用程序數(shù)據(jù),因此無需將軟件配置為讀取數(shù)據(jù)值。相反,只需要一個(gè)自定義間隔來標(biāo)記兩個(gè)函數(shù)的進(jìn)入和退出。

雖然在上面的跟蹤視圖中可以看到顯著的性能差異,但 Tracealyzer 還可以提供更具體的性能指標(biāo)。這可以通過轉(zhuǎn)到視圖并單擊間隔和狀態(tài)機(jī)并使用代碼中的 logger.info() 調(diào)用插入并標(biāo)記條目和候選函數(shù)的退出。

pYYBAGLCV6WATkeQAABUEXGg624196.png

區(qū)間圖顯示遞歸算法(首先執(zhí)行)和迭代算法(其次執(zhí)行)之間存在 20 倍的差異。

在此示例中,我們僅使用每種算法計(jì)算 10 個(gè)斐波那契數(shù)。如果沒有 Tracealyzer,可能需要更多的迭代才能獲得一些有意義的見解,但這有兩個(gè)問題。首先,當(dāng)遞歸 Fibonacci 算法運(yùn)行到 1000(甚至 100)時(shí),Python 會(huì)簡單地坐在那里。這將是令人擔(dān)憂的,因?yàn)椴磺宄@種不響應(yīng)是由于實(shí)現(xiàn)中的錯(cuò)誤還是其他原因。在這種情況下,我們可能會(huì)猜到為什么會(huì)發(fā)生這種情況,但是對于更復(fù)雜的問題,需要大量的日志記錄來了解瓶頸在哪里。

其次,如果在嵌入式系統(tǒng)上運(yùn)行多個(gè)應(yīng)用程序,這些其他應(yīng)用程序可能會(huì)破壞目標(biāo)應(yīng)用程序,這也會(huì)增加算法或函數(shù)完成執(zhí)行的時(shí)間。沒有蹤跡,就沒有簡單的方法來確定是否是這種情況。

相反,Python 中的 LTTng 和 Tracealyzer 的結(jié)合突出表明,問題在于所選算法的基本特征。這在開發(fā)更復(fù)雜的算法時(shí)非常寶貴。此示例實(shí)現(xiàn)可作為如何評估未來算法實(shí)現(xiàn)的性能的參考。在單獨(dú)的 Python 模塊中實(shí)現(xiàn)核心功能通常是一種很好的編程習(xí)慣,這也簡化了對特定功能的跟蹤。

由于跟蹤開銷幾乎可以忽略不計(jì),跟蹤點(diǎn)可以保留在應(yīng)用程序中,因?yàn)樗谀繕?biāo)嵌入式系統(tǒng)甚至生產(chǎn)中進(jìn)行測試,從而允許 Tracealyzer 工具在生產(chǎn)代碼庫中生成性能指標(biāo)。這對于常規(guī)系統(tǒng)測試非常有用,并且允許使用相同的代碼庫來確保應(yīng)用程序在功能上正確且高性能,而只需進(jìn)行最少的更改。

結(jié)論

使用 Tracealyzer 和 LTTng 捕獲 Python 應(yīng)用程序中的性能指標(biāo)提供了對算法實(shí)現(xiàn)的寶貴分析。

這種方法的最小開銷意味著可以保留代碼的檢測以在目標(biāo)嵌入式系統(tǒng)上使用。這可以對目標(biāo)應(yīng)用程序進(jìn)行更多監(jiān)控,并促進(jìn)對與其他應(yīng)用程序和操作系統(tǒng)交互的分析。例如,可能有另一個(gè)進(jìn)程或線程搶占目標(biāo)應(yīng)用程序并影響性能。Tracealyzer 和 LTTng 的組合可以識別此類異常的原因,這允許開發(fā)人員改進(jìn)實(shí)現(xiàn)以防止進(jìn)一步的問題。

雖然斐波那契數(shù)列的示例實(shí)現(xiàn)相對無害,但它突出了 Python 語言的一個(gè)關(guān)鍵特征,可以為更復(fù)雜實(shí)現(xiàn)的開發(fā)提供信息。

此示例還顯示了在設(shè)計(jì)中使用單獨(dú)模塊的價(jià)值。使用跟蹤,開發(fā)人員可以在擴(kuò)展到完整的系統(tǒng)實(shí)現(xiàn)之前測量和驗(yàn)證這些模塊中關(guān)鍵核心功能的性能,而無需大量開銷。這有助于證明應(yīng)用程序在功能上正確且性能良好,且目標(biāo)環(huán)境中的更改最少。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5200

    文章

    20459

    瀏覽量

    334371
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4877

    瀏覽量

    90082
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32開發(fā)的五大嵌入式系統(tǒng)

    受限的嵌入式環(huán)境運(yùn)行,能夠RAM和ROM資源較少的情況下運(yùn)行,適用于各種嵌入式設(shè)備。 3.支持實(shí)時(shí)性需求:uClinux提供了實(shí)時(shí)性支持,能夠滿足對任務(wù)響應(yīng)時(shí)間有嚴(yán)格要求的應(yīng)用場景
    發(fā)表于 01-21 10:48

    什么是嵌入式應(yīng)用開發(fā)?

    概述 所謂的嵌入式應(yīng)用開發(fā)就是嵌入式操作系統(tǒng)下進(jìn)行開發(fā)、軟硬件綜合開發(fā) ?嵌入式應(yīng)用開發(fā)?是指在嵌入式操作系統(tǒng)下進(jìn)行開發(fā),包括系統(tǒng)化設(shè)計(jì)
    發(fā)表于 01-12 16:13

    OPTIGA? Trust Adapter:嵌入式安全解決方案評估利器

    OPTIGA? Trust Adapter:嵌入式安全解決方案評估利器 嵌入式系統(tǒng)設(shè)計(jì),安全問題一直是工程師們關(guān)注的焦點(diǎn)。為了方便對OP
    的頭像 發(fā)表于 12-19 11:50 ?347次閱讀

    C語言單元測試嵌入式軟件開發(fā)的作用及專業(yè)工具的應(yīng)用

    語言使用率超過90%。從智能家居溫控系統(tǒng)到汽車ECU控制單元,從工業(yè)機(jī)器人到醫(yī)療設(shè)備,C語言仍然是嵌入式開發(fā)的首選語言。 C語言嵌入式開發(fā)的核心優(yōu)勢包括: ?高效
    發(fā)表于 12-18 11:46

    CW32嵌入式軟件開發(fā)的必備知識

    嵌入式系統(tǒng)中最常用的編程語言,因?yàn)樗鼈兲峁┝酥苯釉L問硬件的能力,并且代碼執(zhí)行效率高。 了解匯編語言,用于編寫底層驅(qū)動(dòng)、中斷處理程序以及性能要求極高的代碼段。 對其他編程語言如Python、Java等有
    發(fā)表于 11-28 07:48

    C語言嵌入式開發(fā)的應(yīng)用

    C 語言汽車電子控制系統(tǒng)開發(fā)的主導(dǎo)地位。 2、設(shè)備驅(qū)動(dòng)程序 設(shè)備驅(qū)動(dòng)程序是嵌入式系統(tǒng)連接硬件和軟件的橋梁,它負(fù)責(zé)實(shí)現(xiàn)嵌入式系統(tǒng)與
    發(fā)表于 11-21 08:09

    嵌入式與FPGA的區(qū)別

    分為算法和控制,而算法的工資會(huì)比控制高,因?yàn)榧夹g(shù)含量比控制高得多,但算法適合高數(shù)比較好的人學(xué)。 ?最后了解下入行門檻? ?1、嵌入式系統(tǒng)的
    發(fā)表于 11-20 07:12

    嵌入式和FPGA的區(qū)別

    、光傳輸) 高性能計(jì)算(算法加速) 原型驗(yàn)證(ASIC前期驗(yàn)證) 軍事航天(抗輻射、高可靠需求) 未來發(fā)展趨勢 隨著技術(shù)的融合,我們看到嵌入式處理器與FPGA結(jié)合的SoC器件(如Xilinx
    發(fā)表于 11-19 06:55

    嵌入式電力儀表配電系統(tǒng)的應(yīng)用與選型

    現(xiàn)代配電系統(tǒng),對電力參數(shù)的精確測量、電能計(jì)量以及設(shè)備運(yùn)行狀態(tài)的可靠監(jiān)控,是保障供電安全、實(shí)現(xiàn)能效管理的基礎(chǔ)。各類嵌入式電力儀表作為關(guān)鍵測量元件,廣泛應(yīng)用于進(jìn)線柜、出線柜等場景,為系統(tǒng)運(yùn)行提供數(shù)據(jù)
    的頭像 發(fā)表于 09-26 09:37 ?642次閱讀
    <b class='flag-5'>嵌入式</b>電力儀表<b class='flag-5'>在</b>配電系統(tǒng)<b class='flag-5'>中</b>的應(yīng)用與選型

    是德示波器MSOX3052T嵌入式系統(tǒng)的應(yīng)用

    現(xiàn)代電子系統(tǒng)設(shè)計(jì)嵌入式系統(tǒng)已成為智能設(shè)備與物聯(lián)網(wǎng)的核心。面對日益復(fù)雜的硬件架構(gòu)與軟件算法,調(diào)試工具的性能直接決定了產(chǎn)品開發(fā)周期與最終可
    的頭像 發(fā)表于 08-27 17:38 ?684次閱讀
    是德示波器MSOX3052T<b class='flag-5'>在</b><b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>中</b>的應(yīng)用

    盤點(diǎn)嵌入式就業(yè)所需要的技能有哪些?

    ,把握未來的職業(yè)機(jī)遇。 1.智能汽車行業(yè): - 熟悉嵌入式編程語言,如C/C++、Python等。 - 掌握嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)流程,了解汽車電子控制系統(tǒng)的基本原理。 - 具備良好的數(shù)據(jù)結(jié)構(gòu)和
    發(fā)表于 08-11 15:43

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    Linux嵌入式與單片機(jī)嵌入式多個(gè)方面存在顯著的區(qū)別,以下是詳細(xì)的比較和歸納: 一、基本概念 1. Linux嵌入式: 定義:將Linux操作系統(tǒng)運(yùn)行在
    發(fā)表于 06-20 09:46

    嵌入式開發(fā)入門指南:從零開始學(xué)習(xí)嵌入式

    特定功能的計(jì)算機(jī)系統(tǒng),廣泛應(yīng)用于智能家居、工業(yè)控制、醫(yī)療設(shè)備、車載系統(tǒng)等領(lǐng)域。 2. 學(xué)習(xí)嵌入式開發(fā)的前置知識熟悉C語言編程掌握基本的數(shù)據(jù)結(jié)構(gòu)與算法了解數(shù)字電路與微控制器原理熟悉Linux操作系統(tǒng)
    發(fā)表于 05-15 09:29

    Python嵌入式系統(tǒng)的應(yīng)用場景

    你想把你的職業(yè)生涯提升到一個(gè)新的水平?Python嵌入式系統(tǒng)中正在成為一股不可缺少的新力量。盡管傳統(tǒng)上嵌入式開發(fā)更多地依賴于C和C++語言,Pyt
    的頭像 發(fā)表于 03-19 14:10 ?1510次閱讀

    泰克MDO32示波器嵌入式系統(tǒng)調(diào)試的關(guān)鍵技術(shù)分析

    性能的混合域示波器,嵌入式系統(tǒng)調(diào)試中發(fā)揮著關(guān)鍵作用。本文將深入分析泰克MDO32示波器嵌入式系統(tǒng)調(diào)試
    的頭像 發(fā)表于 03-19 13:51 ?913次閱讀
    泰克MDO32示波器<b class='flag-5'>在</b><b class='flag-5'>嵌入式</b>系統(tǒng)調(diào)試<b class='flag-5'>中</b>的關(guān)鍵技術(shù)分析