国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于自動生成高效的代碼的方法分析和分享

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

掃碼添加小助手

加入工程師交流群

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

雖然已有很多代碼生成技術的成功案例,產生的代碼效率仍是新用戶普遍關心的問題(可能是最關心的問題)。

在 2018 MATLAB EXPO 用戶大會上,三位資深的 MathWorks 技術專家受邀跟大家聊聊代碼生成那些事,通過多個具體實例,詳細解釋用戶在使用 MATLAB/Simulink 代碼生成技術中遇到的問題和困惑。

產生出來的代碼效率能行嗎?

首先,好的模型能產生出好的代碼。

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

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

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

其次,提高生成代碼的效率還需要利用產品提供的優化功能,按照自己的需求設置優化參數。

默認參數設置是為了讓大家能夠最快、最容易的產生代碼,而不是適用于所有場景下的最優設置,最優的設計一定是結合具體的問題的設置。

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

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

第三,混合使用手寫代碼和自動產生的代碼。

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

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

通過調整算法模型、正確使用優化功能,或適當混用手寫和自動產生的代碼來提高總體效率,用戶將體會到基于模型的設計方法的好處。

拿正確的模型去生成代碼

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

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

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

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

靜態驗證

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

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

動態驗證

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

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

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

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

使用 MATLAB 算法自動生成代碼

基于模型的設計流程和自動代碼生成在汽車等行業基本上已經是標準手段,然而在大多使用 MATLAB 語言的通信和數據分析領域,代碼生成的接受度還不是那么地高。用戶大多選擇留在 MATLAB 中,享受 MATLAB 語言的彈性。

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

用戶普遍關注以下兩點:

如何充分使用MATLAB算法開發的"設計模式"

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

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

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

深度學習為例:

在 MATLAB R2017b 中發布的 GPU Coder 可以把通用的 MATLAB 代碼轉化為 CUDA C 代碼。

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

關于自動生成高效的代碼的方法分析和分享

* 高階函數就是那些輸入參數為函數的函數。MATLAB 代碼生成中匯集了很多類似的高階函數,理論上用通用的 MATLAB 代碼都能實現相應的功能。

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

那么如何混用現有的 C 或者 C++ 代碼?

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

對于項目中遺留的 C 代碼,高效的做法是在 MATLAB 中直接調用 C 代碼,通過代碼生成的方法自動產生可以被 MATLAB 調用的 MEX 函數。

double foo(double in1, double in2);

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7335

    瀏覽量

    94754
  • 效率
    +關注

    關注

    0

    文章

    151

    瀏覽量

    20873
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    自動駕駛場景生成方法及優選方案:康謀aiSim 3DGS方案重塑行業標準

    自動駕駛技術飛速發展的當下,仿真測試的重要性愈發凸顯,而 自動駕駛場景生成 作為仿真測試的核心環節,其技術水平直接決定了測試的效率與可靠性。面對傳統場景生成方式的諸多痛點,基于
    的頭像 發表于 02-02 17:39 ?346次閱讀

    代碼ATE測試系統,輕松完成LED電源模塊的自動化測試

    LED 電源研發測試及報告周期從 2 天壓縮至 30 分鐘,通過零代碼搭建實現測試方案靈活調整,內置智能數據分析模塊自動生成圖表,大幅提升研發測試效率與數據價值。 二、客戶背景 客戶
    的頭像 發表于 12-22 19:50 ?301次閱讀
    零<b class='flag-5'>代碼</b>ATE測試系統,輕松完成LED電源模塊的<b class='flag-5'>自動</b>化測試

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

    安全漏洞時,測試人員必須采取一個攻擊者的心態。 諸如模糊測試的技術可能是有用的,但是該技術通常太隨機,無法高度可靠。 靜態分析可以有效地發現代碼注入漏洞。注意到早期生成的靜態分析
    發表于 12-22 12:53

    語法糾錯和testbench的自動生成

    ,回到寫好的Verilog代碼,按住ctrl+shift+p,在彈出的搜索框里輸入testbench。 點擊后會自動將當前模塊的testbench生成在終端框內。 當然,本質上該插件還是通過python來實現的,因此
    發表于 10-27 07:07

    使用Simulink自動生成浮點運算HDL代碼(Part 1)

    引言 想要實現浮點運算功能,如果自己寫Verilog代碼,需要花費較多的時間和精力。好在Simulink HDL Coder工具箱提供了自動代碼生成技術。下圖展示了HDL Coder如
    發表于 10-22 06:48

    HarmonyOSAI編程自然語言代碼生成

    安裝CodeGenie后,在下方對話框內,輸入代碼需求描述,將根據描述智能生成代碼生成內容可一鍵復制或一鍵插入至編輯區當前光標位置。 提問示例 使用ArkTs語言寫一段
    發表于 09-05 16:58

    上海控安:基于模型的測試用例生成

    的測試用例生成(Model-Based Test Case Generation)作為一種新興且高效的測試方法,正逐漸成為解決這一問題的重要手段。 01 引 言 在傳統的軟件測試過程中,測試用例多由人工基于源
    的頭像 發表于 08-28 14:30 ?841次閱讀
    上海控安:基于模型的測試用例<b class='flag-5'>生成</b>

    HarmonyOSAI編程編輯區代碼生成

    CodeGenie提供Inline Edit能力,支持在編輯窗口中通過自然語言進行問答,基于上下文智能生成代碼片段,提升代碼可讀性。 當前有以下兩種方式喚醒Inline Edit對話框: 在
    發表于 08-20 15:24

    汽車軟件團隊必看:基于靜態代碼分析工具Perforce QAC的ISO 26262合規實踐

    ISO 26262合規指南,從ASIL分級到工具落地,手把手教你用靜態代碼分析(Perforce QAC)實現高效合規。
    的頭像 發表于 08-07 17:33 ?1139次閱讀
    汽車軟件團隊必看:基于靜態<b class='flag-5'>代碼</b><b class='flag-5'>分析</b>工具Perforce QAC的ISO 26262合規實踐

    生成式 AI 重塑自動駕駛仿真:4D 場景生成技術的突破與實踐

    生成式AI驅動的4D場景技術正解決傳統方法效率低、覆蓋不足等痛點,如何通過NeRF、3D高斯潑濺等技術實現高保真動態建模?高效生成極端天氣等長尾場景?本文為您系統梳理AI驅動的4D場景
    的頭像 發表于 08-06 11:20 ?5143次閱讀
    <b class='flag-5'>生成</b>式 AI 重塑<b class='flag-5'>自動</b>駕駛仿真:4D 場景<b class='flag-5'>生成</b>技術的突破與實踐

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

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

    設備保養計劃自動生成?這5個功能你必須知道

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

    為什么MotorControl Workbench無法生成代碼

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

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

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

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

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