chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

關(guān)于自動(dòng)生成高效的代碼的方法分析和分享

MATLAB ? 來(lái)源:djl ? 2019-09-12 11:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

雖然已有很多代碼生成技術(shù)的成功案例,產(chǎn)生的代碼效率仍是新用戶(hù)普遍關(guān)心的問(wèn)題(可能是最關(guān)心的問(wèn)題)。

在 2018 MATLAB EXPO 用戶(hù)大會(huì)上,三位資深的 MathWorks 技術(shù)專(zhuān)家受邀跟大家聊聊代碼生成那些事,通過(guò)多個(gè)具體實(shí)例,詳細(xì)解釋用戶(hù)在使用 MATLAB/Simulink 代碼生成技術(shù)中遇到的問(wèn)題和困惑。

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

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

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

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

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

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

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

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

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

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

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

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

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

拿正確的模型去生成代碼

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

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

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

從是否要運(yùn)行模型來(lái)看,模型驗(yàn)證可以劃分為“靜態(tài)驗(yàn)證”和“動(dòng)態(tài)驗(yàn)證”。

靜態(tài)驗(yàn)證

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

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

動(dòng)態(tài)驗(yàn)證

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

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

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

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

使用 MATLAB 算法自動(dòng)生成代碼

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

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

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

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

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

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

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

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

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

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

關(guān)于自動(dòng)生成高效的代碼的方法分析和分享

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

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

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

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

對(duì)于項(xiàng)目中遺留的 C 代碼,高效的做法是在 MATLAB 中直接調(diào)用 C 代碼,通過(guò)代碼生成的方法自動(dòng)產(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ù)的時(shí)候,自動(dòng)會(huì)做好調(diào)用包裝的工作,而在 C 代碼生成的時(shí)候,自動(dòng)會(huì)直接調(diào)用已有代碼,而不會(huì)有任何的額外調(diào)用封裝,一舉兩得。

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

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

    關(guān)注

    8

    文章

    7325

    瀏覽量

    94334
  • 效率
    +關(guān)注

    關(guān)注

    0

    文章

    151

    瀏覽量

    20823
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4956

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    代碼ATE測(cè)試系統(tǒng),輕松完成LED電源模塊的自動(dòng)化測(cè)試

    LED 電源研發(fā)測(cè)試及報(bào)告周期從 2 天壓縮至 30 分鐘,通過(guò)零代碼搭建實(shí)現(xiàn)測(cè)試方案靈活調(diào)整,內(nèi)置智能數(shù)據(jù)分析模塊自動(dòng)生成圖表,大幅提升研發(fā)測(cè)試效率與數(shù)據(jù)價(jià)值。 二、客戶(hù)背景 客戶(hù)
    的頭像 發(fā)表于 12-22 19:50 ?197次閱讀
    零<b class='flag-5'>代碼</b>ATE測(cè)試系統(tǒng),輕松完成LED電源模塊的<b class='flag-5'>自動(dòng)</b>化測(cè)試

    分析嵌入式軟件代碼的漏洞-代碼注入

    安全漏洞時(shí),測(cè)試人員必須采取一個(gè)攻擊者的心態(tài)。 諸如模糊測(cè)試的技術(shù)可能是有用的,但是該技術(shù)通常太隨機(jī),無(wú)法高度可靠。 靜態(tài)分析可以有效地發(fā)現(xiàn)代碼注入漏洞。注意到早期生成的靜態(tài)分析
    發(fā)表于 12-22 12:53

    語(yǔ)法糾錯(cuò)和testbench的自動(dòng)生成

    ,回到寫(xiě)好的Verilog代碼,按住ctrl+shift+p,在彈出的搜索框里輸入testbench。 點(diǎn)擊后會(huì)自動(dòng)將當(dāng)前模塊的testbench生成在終端框內(nèi)。 當(dāng)然,本質(zhì)上該插件還是通過(guò)python來(lái)實(shí)現(xiàn)的,因此
    發(fā)表于 10-27 07:07

    使用Simulink自動(dòng)生成浮點(diǎn)運(yùn)算HDL代碼(Part 1)

    引言 想要實(shí)現(xiàn)浮點(diǎn)運(yùn)算功能,如果自己寫(xiě)Verilog代碼,需要花費(fèi)較多的時(shí)間和精力。好在Simulink HDL Coder工具箱提供了自動(dòng)代碼生成技術(shù)。下圖展示了HDL Coder如
    發(fā)表于 10-22 06:48

    HarmonyOSAI編程自然語(yǔ)言代碼生成

    安裝CodeGenie后,在下方對(duì)話(huà)框內(nèi),輸入代碼需求描述,將根據(jù)描述智能生成代碼,生成內(nèi)容可一鍵復(fù)制或一鍵插入至編輯區(qū)當(dāng)前光標(biāo)位置。 提問(wèn)示例 使用ArkTs語(yǔ)言寫(xiě)一段
    發(fā)表于 09-05 16:58

    上??匕玻夯谀P偷臏y(cè)試用例生成

    的測(cè)試用例生成(Model-Based Test Case Generation)作為一種新興且高效的測(cè)試方法,正逐漸成為解決這一問(wèn)題的重要手段。 01 引 言 在傳統(tǒng)的軟件測(cè)試過(guò)程中,測(cè)試用例多由人工基于源
    的頭像 發(fā)表于 08-28 14:30 ?686次閱讀
    上??匕玻夯谀P偷臏y(cè)試用例<b class='flag-5'>生成</b>

    HarmonyOSAI編程編輯區(qū)代碼生成

    CodeGenie提供Inline Edit能力,支持在編輯窗口中通過(guò)自然語(yǔ)言進(jìn)行問(wèn)答,基于上下文智能生成代碼片段,提升代碼可讀性。 當(dāng)前有以下兩種方式喚醒Inline Edit對(duì)話(huà)框: 在
    發(fā)表于 08-20 15:24

    汽車(chē)軟件團(tuán)隊(duì)必看:基于靜態(tài)代碼分析工具Perforce QAC的ISO 26262合規(guī)實(shí)踐

    ISO 26262合規(guī)指南,從ASIL分級(jí)到工具落地,手把手教你用靜態(tài)代碼分析(Perforce QAC)實(shí)現(xiàn)高效合規(guī)。
    的頭像 發(fā)表于 08-07 17:33 ?1029次閱讀
    汽車(chē)軟件團(tuán)隊(duì)必看:基于靜態(tài)<b class='flag-5'>代碼</b><b class='flag-5'>分析</b>工具Perforce QAC的ISO 26262合規(guī)實(shí)踐

    生成式 AI 重塑自動(dòng)駕駛仿真:4D 場(chǎng)景生成技術(shù)的突破與實(shí)踐

    生成式AI驅(qū)動(dòng)的4D場(chǎng)景技術(shù)正解決傳統(tǒng)方法效率低、覆蓋不足等痛點(diǎn),如何通過(guò)NeRF、3D高斯?jié)姙R等技術(shù)實(shí)現(xiàn)高保真動(dòng)態(tài)建模?高效生成極端天氣等長(zhǎng)尾場(chǎng)景?本文為您系統(tǒng)梳理AI驅(qū)動(dòng)的4D場(chǎng)景
    的頭像 發(fā)表于 08-06 11:20 ?5042次閱讀
    <b class='flag-5'>生成</b>式 AI 重塑<b class='flag-5'>自動(dòng)</b>駕駛仿真:4D 場(chǎng)景<b class='flag-5'>生成</b>技術(shù)的突破與實(shí)踐

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

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

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

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

    為什么MotorControl Workbench無(wú)法生成代碼?

    我使用MotorControl Workbench5.4.4生成單電機(jī)驅(qū)動(dòng)代碼,使用正交編碼器精度1024,檢查引腳沒(méi)問(wèn)題后,進(jìn)入生成頁(yè)面,識(shí)別到STM32CubeMX版本為6.12.1,選擇編譯器為Keil5,Pack包選項(xiàng)選
    發(fā)表于 03-14 06:28

    【JVM開(kāi)發(fā)者必看】IntelliJ IDEA代碼分析實(shí)踐指南:實(shí)時(shí)糾錯(cuò)、冗余檢測(cè)、自動(dòng)修復(fù)等

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

    cubemx生成HAL庫(kù)+FreeRTOS,當(dāng)編寫(xiě)程序時(shí)卻代碼無(wú)法自動(dòng)提示怎么解決?

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

    STM32CubeMX用于STM32配置和初始化C代碼生成

    電子發(fā)燒友網(wǎng)站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費(fèi)下載
    發(fā)表于 02-26 17:32 ?678次下載