一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

關(guān)于自動生成高效的代碼的分析和介紹

MATLAB ? 來源:djl ? 2019-09-11 11:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

代碼生成作為一個普遍存在的成熟技術(shù),已經(jīng)被國內(nèi)外很多知名企業(yè)采用,并將生成的代碼直接部署在產(chǎn)品中。這些客戶普遍反應(yīng),代碼生成的確很大幅度地提高產(chǎn)品開發(fā)的效率,縮短產(chǎn)品開發(fā)周期。

雖然已有很多代碼生成技術(shù)的成功案例,產(chǎn)生的代碼效率仍是新用戶普遍關(guān)心的問題(可能是最關(guān)心的問題)。三位資深的 MathWorks 技術(shù)專家受邀在 2018 MATLAB EXPO 用戶大會上與大家分享代碼生成那些事,通過多個具體實例,詳細(xì)解釋用戶在使用 MATLAB/Simulink 代碼生成技術(shù)中遇到的問題和困惑。

產(chǎn)生出來的代碼效率能行嗎?

首先,好的模型能產(chǎn)生出好的代碼。

根據(jù)很多用戶反饋,在大部分情況下,生成的代碼的運行速度和手寫代碼差不多,使用的資源要比手寫明顯的小。然而,如果直接采用默認(rèn)的選項直接進行代碼生成而不對模型進行任何準(zhǔn)備工作,生成的代碼效率將無法滿足預(yù)期。

產(chǎn)生出來的代碼的效率是和搭建的 Simulink 模型與 MATLAB 代碼直接相關(guān)。這句話不難理解——好的模型能產(chǎn)生出好的代碼。可是什么是好的模型呢?

以 HDL 代碼生成為例:用戶在 Simulink 里很快的搭建好算法模型,確認(rèn)數(shù)值結(jié)果正確就開始產(chǎn)生 HDL 代碼,卻發(fā)現(xiàn)效率并不理想。這是因為在算法模型里沒有任何架構(gòu)的優(yōu)化,也沒有時序的信息(比如節(jié)拍寄存器)。其實只要在模型里正確的地方加入幾個寄存器,產(chǎn)生出來的代碼效率就會提高了。

其次,提高生成代碼的效率還需要利用產(chǎn)品提供的優(yōu)化功能,按照自己的需求設(shè)置優(yōu)化參數(shù)。

默認(rèn)參數(shù)設(shè)置是為了讓大家能夠最快、最容易的產(chǎn)生代碼,而不是適用于所有場景下的最優(yōu)設(shè)置,最優(yōu)的設(shè)計一定是結(jié)合具體的問題的設(shè)置。

例如,有些硬件工程師使用默認(rèn)設(shè)置產(chǎn)生出的 HDL 代碼占用的資源很的要求很高,不能滿足要求。問題關(guān)鍵在于沒有使用 HDL Coder 中提供的優(yōu)化功能,比如資源復(fù)用流處理等。這些功能可以幫用戶找到模型中可復(fù)用的資源,根據(jù)用戶的設(shè)置,自動優(yōu)化使用的資源。

此外,生成代碼的時候不僅要對使用資源進行優(yōu)化,建議用戶使用HDLCoder 對主頻進行優(yōu)化并對代碼定制。要對具體的要求采用不同的優(yōu)化手段,才能產(chǎn)生出最優(yōu)的代碼。

第三,混合使用手寫代碼和自動產(chǎn)生的代碼。

很多用戶有一些誤解,認(rèn)為代碼生成必須全部采用自動的方法,其實,代碼生成手段并沒有這些限制,反而會帶來不必要的負(fù)擔(dān)。

如果在算法中的某個模塊已經(jīng)有很成熟的代碼,用戶可以結(jié)合自動產(chǎn)生的代碼和手寫代碼的好處,通過設(shè)置參數(shù)直接使用指定的已有代碼,提高整體效率。

通過調(diào)整算法模型、正確使用優(yōu)化功能,或適當(dāng)混用手寫和自動產(chǎn)生的代碼來提高總體效率,用戶將體會到基于模型的設(shè)計方法的好處。

推薦閱讀:

老胡專欄 | 說說代碼生成中的數(shù)據(jù)管理

拿正確的模型去生成代碼

代碼生成工具是沒有糾錯功能的,它只能忠實于你的模型去產(chǎn)生代碼。如果模型不經(jīng)過充分驗證,或者說不能確保模型是正確的,那么代碼也就沒法保證正確。在基于模型的設(shè)計開發(fā)流程中,做到“拿正確的模型去生成代碼”,你的流程就比別人強很多了。

但是,什么樣的模型算是正確的模型?能跑出預(yù)期的結(jié)果的模型就一定是“正確的模型”嗎?

正確的模型應(yīng)該是在現(xiàn)有的工具水平下,經(jīng)過充分驗證的模型。由于在產(chǎn)品化中,所有驗證工作最終都會被算到開發(fā)成本里面。所以要應(yīng)該根據(jù)項目的要求,選擇合適的驗證手段。

從是否要運行模型來看,模型驗證可以劃分為“靜態(tài)驗證”和“動態(tài)驗證”。

靜態(tài)驗證

在模型建立之后,首先需要做的是自動化的“靜態(tài)檢查”。建模規(guī)范檢查(比如目前行業(yè)普遍采用的MAAB),是很多公司都在做的事情。除了規(guī)范檢查之外,建議使用 Simulink Design Verifier 檢查是否有數(shù)據(jù)溢出和死邏輯,這兩種錯誤比違反一些建模規(guī)則更嚴(yán)重,可能會導(dǎo)致系統(tǒng)失效。

除了自動化的靜態(tài)檢查之外,“評審”是經(jīng)常被大家忽略的靜態(tài)驗證方式。自動化靜態(tài)驗證和人工靜態(tài)驗證之間的順序很重要,直接關(guān)系到開發(fā)效率問題。在評審之前完成自動化靜態(tài)檢查,可以幫助開發(fā)者發(fā)現(xiàn)問題,提高開發(fā)效率。

動態(tài)驗證

動態(tài),也就是讓模型的功能跑起來。從效率上考慮,建議先做單元測試,再做集成測試。

單元測試應(yīng)該是整個驗證環(huán)節(jié)里工作量最大的環(huán)節(jié),要重點關(guān)注結(jié)構(gòu)覆蓋率問題。具體多少的覆蓋率算是合格,還有不少的爭論。想要達(dá)到比較好的覆蓋率,需要對模型的復(fù)雜度進行控制,復(fù)雜度一定不能太高,否則沒法提升覆蓋率。

集成測試可以一定程度的驗證接口問題、調(diào)度問題、模塊間的需求問題等,是非常有必要的。對于龐大系統(tǒng),集成測試需要分階段進行:先做組件級的集成,再做系統(tǒng)級的集成,讓驗證工作可實現(xiàn)。

完成以上提到的各種驗證,基本上可以認(rèn)為這是正確的模型了。使用驗證過的正確模型配置數(shù)據(jù),才可以生成的成熟的代碼。當(dāng)然,生成的代碼還需要做一個對比測試,驗證代碼和模型之間功能上是否一致,也就是我們常說的 SIL 和 PIL 測試。

使用 MATLAB 算法自動生成代碼

基于模型的設(shè)計流程和自動代碼生成在汽車等行業(yè)基本上已經(jīng)是標(biāo)準(zhǔn)手段,然而在大多使用 MATLAB 語言的通信和數(shù)據(jù)分析領(lǐng)域,代碼生成的接受度還不是那么地高。用戶大多選擇留在 MATLAB 中,享受 MATLAB 語言的彈性。

如何在保持 MATLAB 的條件下,提升代碼生成的效率呢?

用戶普遍關(guān)注以下兩點:

如何充分使用MATLAB算法開發(fā)的"設(shè)計模式"

如何重用已有的 C 或者 C++ 代碼。

MATLAB 算法開發(fā)的“設(shè)計模式”借鑒于軟件的設(shè)計模式這個概念,具體可以理解為一些 MATLAB 的編碼規(guī)則。一個簡單的“設(shè)計模式”用例:要想讓 MATLAB 運行效率夠高,應(yīng)該盡量采用矩陣運算替代 for 循環(huán)。

在代碼生成中也存在很多類似的模式。這些設(shè)計模式能夠針對具體的硬件結(jié)構(gòu),產(chǎn)生出更加有效的代碼,并且提升算法的抽象度。不僅可以提升代碼運行效率,對于長期維護算法代碼也很幫助。

深度學(xué)習(xí)為例:

在 MATLAB R2017b 中發(fā)布的 GPU Coder 可以把通用的 MATLAB 代碼轉(zhuǎn)化為 CUDA C 代碼。

在 GPU Coder 中,我們也總結(jié)了一些能夠提升對 GPU 這種架構(gòu)運行效率的模式。很多人不了解 GPU 架構(gòu),可以把它理解成多核處理器構(gòu)成的集群。例如stencilKernel 這個高階函數(shù)就總結(jié)了一種類似于二維濾波的計算模式。

關(guān)于自動生成高效的代碼的分析和介紹

* 高階函數(shù)就是那些輸入?yún)?shù)為函數(shù)的函數(shù)。MATLAB 代碼生成中匯集了很多類似的高階函數(shù),理論上用通用的 MATLAB 代碼都能實現(xiàn)相應(yīng)的功能。

充分使用這些算法模式(或設(shè)計模式),能夠提高算法的抽象程度,同時有利于產(chǎn)生更加高效的代碼。

那么如何混用現(xiàn)有的 C 或者 C++ 代碼?

首先,非常不推薦用戶為了提升效率而手寫 C 代碼生成 MEX 嵌入到 MATLAB 中。這不僅無法實現(xiàn)提速,反而可能比 MATLAB 更慢。另外手寫 MEX 非常繁瑣,并且容易出錯。同時通過 MEX 接口引入的函數(shù)很難應(yīng)用到生成的代碼之中。

對于項目中遺留的 C 代碼,高效的做法是在 MATLAB 中直接調(diào)用 C 代碼,通過代碼生成的方法自動產(chǎn)生可以被 MATLAB 調(diào)用的 MEX 函數(shù)。

double foo(double in1, double in2);

function y =callfoo %#codegen
y = coder.ceval('foo', 10, 20);

上面這段代碼在生成 MEX 函數(shù)的時候,自動會做好調(diào)用包裝的工作,而在 C 代碼生成的時候,自動會直接調(diào)用已有代碼,而不會有任何的額外調(diào)用封裝,一舉兩得。

同理,在 Simulink 中,最簡單便捷的方式是在 Stateflow 中直接調(diào)用手工 C 代碼,讓 Simulink 自行完成編譯鏈接的工作,同時方便算法調(diào)整和更改。在 MATLAB 和 Simulink 中混合已有代碼的方法很多,建議用戶選擇靈活性夠高,同時還能兼顧開發(fā)效率和執(zhí)行的方法實現(xiàn)。

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

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70715
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5561

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    手動添加cubeMX的軟件自動生成代碼后,編譯出現(xiàn)’rtthread.elf’:No Such File 的錯誤怎么解決?

    手動添加cubeMX的軟件自動生成代碼后,編譯出現(xiàn)’rtthread.elf’:No Such File 的錯誤。
    發(fā)表于 06-12 07:46

    使用 QWQ:32B 模型搭配 VSCode 的 Cline 插件實現(xiàn)自動代碼編程!

    。結(jié)合 Visual Studio Code(VSCode)的 Cline 插件,開發(fā)者可以實現(xiàn)高效自動代碼編程。本文將詳細(xì)介紹如何配置和使用 QWQ:32B 模型與 Cline
    的頭像 發(fā)表于 03-21 18:12 ?589次閱讀
    使用 QWQ:32B 模型搭配 VSCode 的 Cline 插件實現(xiàn)<b class='flag-5'>自動</b>化<b class='flag-5'>代碼</b>編程!

    設(shè)備保養(yǎng)計劃自動生成?這5個功能你必須知道

    在工業(yè)4.0的浪潮下,設(shè)備管理正經(jīng)歷深刻變革,借助智能系統(tǒng)實現(xiàn)設(shè)備保養(yǎng)計劃自動化生成高效執(zhí)行,助力企業(yè)降本增效。系統(tǒng)通過多維數(shù)據(jù)分析,精準(zhǔn)適配每臺設(shè)備,實現(xiàn)資源合理配置,避免停機損失。同時,
    的頭像 發(fā)表于 03-20 11:24 ?330次閱讀
    設(shè)備保養(yǎng)計劃<b class='flag-5'>自動</b><b class='flag-5'>生成</b>?這5個功能你必須知道

    為什么MotorControl Workbench無法生成代碼?

    我使用MotorControl Workbench5.4.4生成單電機驅(qū)動代碼,使用正交編碼器精度1024,檢查引腳沒問題后,進入生成頁面,識別到STM32CubeMX版本為6.12.1,選擇編譯器為Keil5,Pack包選項選
    發(fā)表于 03-14 06:28

    【JVM開發(fā)者必看】IntelliJ IDEA代碼分析實踐指南:實時糾錯、冗余檢測、自動修復(fù)等

    【IntelliJ IDEA中的代碼分析技巧】靜態(tài)代碼分析是指在不實際運行代碼的情況下掃描代碼
    的頭像 發(fā)表于 03-13 10:34 ?448次閱讀
    【JVM開發(fā)者必看】IntelliJ IDEA<b class='flag-5'>代碼</b><b class='flag-5'>分析</b>實踐指南:實時糾錯、冗余檢測、<b class='flag-5'>自動</b>修復(fù)等

    cubemx生成HAL庫+FreeRTOS,當(dāng)編寫程序時卻代碼無法自動提示怎么解決?

    各位佬,請問一下,我用的是cubemx生成HAL庫+FreeRTOS,編譯時并沒有錯誤,但當(dāng)我編寫程序時卻代碼無法自動提示(我設(shè)置好了),并且連uint8_t這種變量也不會變成藍(lán)色,當(dāng)我查看工程文件
    發(fā)表于 03-12 08:21

    自動化巨頭布局生成式AI,先瞄準(zhǔn)PLC編程?

    ? ? ? 確實,自動化巨頭正在積極布局生成式AI,并首先將目光瞄準(zhǔn)了PLC(可編程邏輯控制器)編程。以下是對這一趨勢的詳細(xì)分析: ? ? ? 一、自動化巨頭布局
    的頭像 發(fā)表于 01-21 17:24 ?529次閱讀

    Cirium發(fā)布業(yè)界首款生成式AI準(zhǔn)點率助手

    領(lǐng)域邁出了重要的一步。 作為Cirium計劃推出的若干生成式AI助手中的首個產(chǎn)品,OTP Awards AI旨在為用戶提供更加精準(zhǔn)、高效的準(zhǔn)點率評估分析。該助手利用先進的生成式AI技術(shù)
    的頭像 發(fā)表于 01-16 14:27 ?506次閱讀

    STM32CubeMX生成代碼,是怎樣的HAL架構(gòu)?

    需要注意,CubeMX只是一個初始化工具,它只是幫你完成了HAL庫外設(shè)和時鐘的初始化,具體程序的編寫還需要查閱HAL庫的說明,使用相關(guān)函數(shù)實現(xiàn)你想實現(xiàn)的功能。CubeMX生成代碼包含了豐富的注釋
    的頭像 發(fā)表于 01-01 21:01 ?808次閱讀
    STM32CubeMX<b class='flag-5'>生成</b>的<b class='flag-5'>代碼</b>,是怎樣的HAL架構(gòu)?

    自動零件分析儀的原理和應(yīng)用

    自動零件分析儀,特別是針對金屬等材料的全自動在線材料分析儀,其原理和應(yīng)用在工業(yè)生產(chǎn)中具有重要意義。以下是關(guān)于
    發(fā)表于 12-23 15:22

    SRIO介紹及xilinx的vivado 2017.4中生成srio例程代碼解釋

    1. 概述 本文是用于記錄srio的學(xué)習(xí)情況,以及一些對xilinx的vivado 2017.4中生成srio例程代碼的解釋。 2. 參考文件 《pg007_srio_gen2》 3. SRIO協(xié)議
    的頭像 發(fā)表于 12-10 16:24 ?2816次閱讀
    SRIO<b class='flag-5'>介紹</b>及xilinx的vivado 2017.4中<b class='flag-5'>生成</b>srio例程<b class='flag-5'>代碼</b>解釋

    探索設(shè)計稿自動生成Flutter代碼的技術(shù)方案

    的工具和方法,最后嘗試大模型生成flutter代碼在項目中的實踐。 一、美團的探索 美團在2021年3月25日發(fā)表了一篇關(guān)于設(shè)計稿自動生成
    的頭像 發(fā)表于 11-08 10:09 ?1699次閱讀
    探索設(shè)計稿<b class='flag-5'>自動</b><b class='flag-5'>生成</b>Flutter<b class='flag-5'>代碼</b>的技術(shù)方案

    如何自動生成verilog代碼

    介紹幾種自動生成verilog代碼的方法。
    的頭像 發(fā)表于 11-05 11:45 ?1029次閱讀
    如何<b class='flag-5'>自動</b><b class='flag-5'>生成</b>verilog<b class='flag-5'>代碼</b>

    代碼解析工具與自動化流程圖生成解決方案

    ? 摘要:CasePlayer2是一款強大的源代碼解析工具,專門設(shè)計用于分析ANSI C、C、C++以及匯編語言源代碼,并自動化地生成流程圖
    的頭像 發(fā)表于 10-10 13:40 ?992次閱讀

    關(guān)于Makefile自動生成-autotools的使用

    的Makefile并非日常任務(wù),但遇見需要構(gòu)建大型軟件項目時,利用工具自動生成Makefile就顯得尤為關(guān)鍵。接下來,我們將重點介紹一款自動化構(gòu)建工具——Autoto
    的頭像 發(fā)表于 07-25 15:50 ?1824次閱讀
    <b class='flag-5'>關(guān)于</b>Makefile<b class='flag-5'>自動</b><b class='flag-5'>生成</b>-autotools的使用