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

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

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

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

克服多核系統(tǒng)中的并發(fā)錯誤

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

掃碼添加小助手

加入工程師交流群

由于多核架構(gòu)的復(fù)雜性、并行性,并發(fā)性挑戰(zhàn)更加復(fù)雜。新的驗證技術(shù)可以幫助捕捉騙局。。.

多核處理器改變了游戲規(guī)則。我們只需要看看我們的智能手機(jī)就能看到它們卓越的處理能力的影響。在多核之前,處理器性能每年翻一番。隨著半導(dǎo)體技術(shù)的進(jìn)步,芯片上的晶體管數(shù)量從 1990 年的 100 萬個增加到今天的 10 億個以上。隨著小型化的極限越來越近,業(yè)界轉(zhuǎn)向多核設(shè)計以保持性能改進(jìn)的步伐,因此現(xiàn)在四核處理器已司空見慣。通過并行處理器內(nèi)核倍增處理能力的能力可實現(xiàn)非凡的性能。

并發(fā)不是一個新話題,但它在多核平臺中呈現(xiàn)出一個新的維度。軟件開發(fā)人員已經(jīng)習(xí)慣于從單個處理器內(nèi)的任務(wù)調(diào)度和上下文切換的角度來考慮并發(fā)性。然而,對于多個處理器內(nèi)核,真正的并行性開始發(fā)揮作用:每個線程中的指令流在每個內(nèi)核上并行執(zhí)行。線程之間的通信通常使用共享內(nèi)存來實現(xiàn),并且對共享資源的訪問同步通常是復(fù)雜性的最大來源,如果操作不正確,則是導(dǎo)致錯誤的主要原因。

編寫一個正確的并發(fā)程序是出了名的困難,而多核架構(gòu)使它變得更加困難。由于增加了復(fù)雜性,多核平臺加劇了并發(fā)錯誤的影響,使它們特別有害。這些錯誤,包括競爭條件、死鎖、活鎖和資源匱乏,當(dāng)它們出現(xiàn)時很難發(fā)現(xiàn),甚至更難以診斷。在單處理器上無錯誤運行的程序可能會出現(xiàn)潛在錯誤,例如多核系統(tǒng)上的死鎖。并發(fā)錯誤可能會出現(xiàn)異常癥狀,這些癥狀在觸發(fā)它們的初始事件很久之后就會出現(xiàn),并且通常難以重現(xiàn)。因為在測試過程中很難找到這樣的錯誤,多核系統(tǒng)需要一種新的驗證方法,專門解決并發(fā)錯誤。到目前為止,降低這些錯誤風(fēng)險的最有效方法是采用多方面的方法,包括同行代碼審查、測試,最重要的是,高級靜態(tài)分析結(jié)合了復(fù)雜的并發(fā)模型。

編程語言支持

釋放多核系統(tǒng)的全部性能潛力需要先進(jìn)的編程技術(shù)。由于大多數(shù)嵌入式開發(fā)人員對多核編程比較陌生,因此引入并發(fā)錯誤的風(fēng)險非常大。今天,C 和 C++ 仍然是嵌入式系統(tǒng)最流行的編程語言。然而,這些語言的根本弱點之一是它們不是為并發(fā)而設(shè)計的。最新版本 C11 和 C++11 引入了對多線程的標(biāo)準(zhǔn)化支持。添加了三個特性來解決并發(fā)問題:定義多線程程序行為的內(nèi)存模型;可以被并發(fā)線程安全訪問的原子數(shù)據(jù)類型;以及幾個同步原語,例如鎖和條件變量。盡管有這些改進(jìn),

與此同時,Java 越來越受到嵌入式開發(fā)人員的歡迎,如今有 28% 的人使用它,它現(xiàn)在是嵌入式系統(tǒng)第三流行的語言。與 C 和 C++ 相比,Java 始終在編程語言語法、源編譯器和標(biāo)準(zhǔn)庫中內(nèi)置了對多線程的支持。此外,Java 5 添加了 java.util.concurrent 庫,該庫在 Java 6 和 Java 7 中進(jìn)行了擴(kuò)展,為并發(fā)和并行編程提供了廣泛的支持。

許多嵌入式設(shè)計使用 C 或 C++ 和 Java 的組合。例如,Java 在汽車應(yīng)用程序中非常流行,因為它為觸摸屏顯示器或娛樂系統(tǒng)的用戶界面編程提供了一種簡單的方法。此類應(yīng)用程序可能有許多層,其中包含用 C 編寫的安全關(guān)鍵代碼,與運行在用戶界面上的非安全關(guān)鍵 Java 代碼進(jìn)行通信。

靜態(tài)分析工具

多核平臺并發(fā)程序的最大挑戰(zhàn)可能是無法保證能找到所有并發(fā)錯誤。實時執(zhí)行指令的相對順序是多線程程序中缺陷的主要來源。當(dāng)多個線程運行時,它們的指令執(zhí)行的相對順序取決于同時處于活動狀態(tài)的其他線程。如果錯誤是通過編程錯誤引入的,非確定性交錯可能會導(dǎo)致不可預(yù)知的結(jié)果。隨著指令數(shù)量的增加,可能的交錯數(shù)量會大大增加,這種現(xiàn)象稱為組合爆炸。即使是最小的線程也有許多可能的交錯。現(xiàn)實世界的并發(fā)程序具有天文數(shù)字的合法交錯,所以測試每一個交織是不可行的。同樣,不可能使用同行代碼審查或演練來探索每條潛在的執(zhí)行路徑。這是高級靜態(tài)分析工具擅長的地方。

高級靜態(tài)分析工具使用符號執(zhí)行引擎來識別程序中的潛在問題,而無需實際運行程序。它們的工作方式與編譯器非常相似,將源代碼作為輸入,然后對其進(jìn)行解析并將其轉(zhuǎn)換為中間表示 (IR)。編譯器會使用 IR 來生成目標(biāo)代碼,而靜態(tài)分析工具會保留 IR,也稱為模型。檢查器通過遍歷或查詢模型,對代碼進(jìn)行分析以查找常見缺陷、違反策略等,尋找指示缺陷的特定屬性或模式。復(fù)雜的符號執(zhí)行技術(shù)通過控制流圖探索路徑,控制流圖是一種數(shù)據(jù)結(jié)構(gòu),表示語句在程序中執(zhí)行的順序。算法跟蹤程序的抽象狀態(tài),并知道如何使用該狀態(tài)來排除對不可行路徑的考慮。模型的深度決定了工具的有效性。該深度基于內(nèi)置了多少程序行為知識,一次可以考慮多少程序,以及它反映實際程序行為的準(zhǔn)確程度。

許多開發(fā)人員利用流行的開源工具來查找 Java 中的錯誤,包括 FindBugs、PMD 和 CheckStyle。其中最廣泛使用的 FindBugs 使用靜態(tài)分析來識別 Java 程序中數(shù)百種不同類型的潛在錯誤。FindBugs 對 Java 字節(jié)碼(Java 虛擬機(jī)執(zhí)行的指令形式)進(jìn)行操作。PMD 和 CheckStyle 檢查源代碼是否符合編碼標(biāo)準(zhǔn)并檢測不良做法。

這些工具中的每一個都有其優(yōu)勢。一般來說,靜態(tài)分析工具的一個重要優(yōu)勢是它們可以在開發(fā)早期使用,甚至在測試開始之前就可以發(fā)現(xiàn)錯誤??捎糜?Java 的大多數(shù)靜態(tài)分析工具都是通用的,可以捕獲一系列表面問題。

與這些開源工具相比,有一些商業(yè)產(chǎn)品專門用于非常精確地識別 Java、C 或 C++ 中的并發(fā)問題。這些工具包含非常深的模型,使他們能夠發(fā)現(xiàn)其他工具經(jīng)常遺漏的并發(fā)問題。這些高級靜態(tài)分析工具中的一些最有效的工具是基于對軟件并發(fā)行為的前沿學(xué)術(shù)研究。它們通過整個程序過程間分析提供 C 和 C++ 源代碼的高級靜態(tài)分析,通??梢蕴幚矶噙_(dá) 1000 萬行代碼的程序。除了查找競爭條件和死鎖之外,Java 的一種商業(yè)工具還可以識別由于錯誤使用 java.util.concurrent 提供的并發(fā)集合庫而導(dǎo)致的不可預(yù)測的結(jié)果。在協(xié)調(diào)對共享的非并發(fā)集合的訪問時,它會檢測到錯誤的錯誤處理或不正確的同步。此外,它還可以幫助診斷由錯誤的 API 使用、冗余同步和不必要地使用共享可變狀態(tài)引起的性能瓶頸。

由于許多項目將包括 Java 和 C 或 C++,因此團(tuán)隊會發(fā)現(xiàn)在集成開發(fā)環(huán)境 (IDE) 中使用工具更容易、更高效。有一些工具套件可用于嵌入式和托管平臺。商業(yè)版本為程序分析、程序檢查、程序理解和架構(gòu)可視化提供自動化工作流程和強(qiáng)大工具。使用帶有目標(biāo)高級靜態(tài)分析工具的 IDE 使開發(fā)人員能夠發(fā)現(xiàn)現(xiàn)有并發(fā)代碼的基本設(shè)計意圖,并識別新代碼何時偏離該設(shè)計。它在首次引入新的并發(fā)缺陷時提供預(yù)警,并使用尖端技術(shù)幫助開發(fā)人員識別和理解它們。

有效的多核系統(tǒng)設(shè)計

為多核平臺開發(fā)嵌入式應(yīng)用程序需要一種新方法。需要先進(jìn)的編程技術(shù)來利用并行處理內(nèi)核??绮⑿刑幚砥鞯某绦蚓€程交錯創(chuàng)建了天文數(shù)字的潛在執(zhí)行路徑。這使得不可能測試或?qū)彶槊恳粋€可能的場景。靜態(tài)分析提供了唯一可行的方法來探索高度并發(fā)系統(tǒng)中軟件錯誤的所有可能代碼路徑。當(dāng)與其他代碼質(zhì)量實踐(例如代碼審查和集成測試)結(jié)合使用時,高級靜態(tài)分析工具可以顯著降低由于未發(fā)現(xiàn)的并發(fā)錯誤而導(dǎo)致的現(xiàn)場故障風(fēng)險。

審核編輯:郭婷

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

    關(guān)注

    5200

    文章

    20481

    瀏覽量

    334517
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3002

    瀏覽量

    116487
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2124

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    S32K310 MCAL CAN 在初始通電時觸發(fā)錯誤幀怎么解決?

    在使用S32K310的MCAL時,我遇到了一些問題。我在MCAL 創(chuàng)建了兩個控制器一—CAN1和CAN2-一并讓CAN1處于工作狀態(tài) ,每500毫秒發(fā)送一個消息幀。奇怪的是,當(dāng)系統(tǒng)通電或重啟
    發(fā)表于 03-12 07:47

    一文說透了如何實現(xiàn)單片機(jī)的多任務(wù)并發(fā)!

    在嵌入式系統(tǒng)開發(fā),多任務(wù)并發(fā)是非常常見的,對于處理復(fù)雜的應(yīng)用場景、提升系統(tǒng)并發(fā)能力、提高系統(tǒng)
    發(fā)表于 01-06 06:46

    解析Linux的進(jìn)程、線程和協(xié)程

    )協(xié)程切換:協(xié)程之間的切換由程序員手動控制,通常在I/O操作掛起和恢復(fù)協(xié)程。 三、并行和并發(fā) 進(jìn)程并行處理 進(jìn)程并行處理涉及多個獨立進(jìn)程,在多個處理器上同時執(zhí)行。這種方式可以充分利用多核處理器
    發(fā)表于 12-22 11:00

    CRC校驗的本質(zhì)和物理意義

    工業(yè)控制系統(tǒng),Modbus RTU協(xié)議的CRC校驗如同通信網(wǎng)絡(luò)的\"免疫系統(tǒng)\",某石化廠DCS系統(tǒng)曾因CRC計算錯誤導(dǎo)致0.3%的數(shù)據(jù)包
    發(fā)表于 11-13 07:58

    Swift 的并發(fā)系統(tǒng)并行運行多個任務(wù)

    ??前言 Swift 內(nèi)置并發(fā)系統(tǒng)的好處之一是它可以更輕松地并行執(zhí)行多個異步任務(wù),這反過來又可以使我們顯著加快可以分解為單獨部分的操作。 在本文中,讓我們看一下幾種不同的方法,以及這些技術(shù)的每一種
    的頭像 發(fā)表于 11-11 11:33 ?450次閱讀

    工業(yè)物聯(lián)網(wǎng)數(shù)據(jù)臺的高并發(fā)性有什么作用

    工業(yè)物聯(lián)網(wǎng)數(shù)據(jù)臺的高并發(fā)性是保障其在復(fù)雜工業(yè)場景下穩(wěn)定運行的核心能力之一。它的核心作用是確保大量設(shè)備同時接入和數(shù)據(jù)傳輸時,系統(tǒng)依然能高效處理、不卡頓、不丟失數(shù)據(jù),能夠在單位時間內(nèi)高效處理海量設(shè)備
    的頭像 發(fā)表于 10-28 11:28 ?318次閱讀
    工業(yè)物聯(lián)網(wǎng)數(shù)據(jù)<b class='flag-5'>中</b>臺的高<b class='flag-5'>并發(fā)</b>性有什么作用

    Nginx高并發(fā)優(yōu)化方案

    作為一名在生產(chǎn)環(huán)境摸爬滾打多年的運維工程師,我見過太多因為Nginx配置不當(dāng)導(dǎo)致的性能瓶頸。今天分享一套完整的Nginx高并發(fā)優(yōu)化方案,幫助你的系統(tǒng)從10萬QPS突破到百萬級別。
    的頭像 發(fā)表于 08-13 15:51 ?1027次閱讀

    【老法師】多核異構(gòu)處理器M核程序的啟動、編寫和仿真

    有很多研究單片機(jī)的小伙伴在面對多核異構(gòu)處理器時,可能會對多核的啟動流程感到困惑——因為不熟悉GCC編程和GDB調(diào)試,所以也無法確定多核異構(gòu)處理器的程序是否能像單片機(jī)那樣方便地編寫和仿真。本篇
    的頭像 發(fā)表于 08-13 09:05 ?4017次閱讀
    【老法師】<b class='flag-5'>多核</b>異構(gòu)處理器<b class='flag-5'>中</b>M核程序的啟動、編寫和仿真

    電商API常見錯誤排查指南:避免集成陷阱

    ? 在電商平臺開發(fā),API集成是連接系統(tǒng)、實現(xiàn)數(shù)據(jù)交換的核心環(huán)節(jié)。然而,許多開發(fā)者在集成過程中常遇到錯誤,導(dǎo)致項目延遲、數(shù)據(jù)丟失或用戶體驗下降。本文將逐步介紹常見錯誤類型、排查方法以
    的頭像 發(fā)表于 07-11 14:21 ?2084次閱讀
    電商API常見<b class='flag-5'>錯誤</b>排查指南:避免集成陷阱

    第三屆大會回顧第3期 | FFRT并發(fā)框架在OpenHarmony的設(shè)計與實踐

    ,特別是在多核處理器上,可以顯著提高程序的運行速度和整體性能,從而改善用戶體驗。OpenHarmony的FFRT并發(fā)編程模型為開發(fā)者提供了構(gòu)建異步并發(fā)任務(wù)的能力,以更高效地開發(fā)和管理并發(fā)
    的頭像 發(fā)表于 06-21 16:53 ?1293次閱讀
    第三屆大會回顧第3期 | FFRT<b class='flag-5'>并發(fā)</b>框架在OpenHarmony<b class='flag-5'>中</b>的設(shè)計與實踐

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計

    ?** 鴻蒙并發(fā)編程實戰(zhàn)指南:解鎖ArkTS多線程黑科技** 嘿,開發(fā)者朋友們! 今天給大家扒一扒鴻蒙官方文檔里藏著的并發(fā)編程寶藏—— 100+實戰(zhàn)場景解決方案 !從金融理財?shù)接螒蜷_發(fā),從折疊屏適配
    發(fā)表于 06-12 16:19

    原理圖和PCB設(shè)計的常見錯誤

    在電子設(shè)計領(lǐng)域,原理圖和PCB設(shè)計是產(chǎn)品開發(fā)的基石,但設(shè)計過程難免遇到各種問題,若不及時排查可能影響電路板的性能及可靠性,本文將列出原理圖和PCB設(shè)計的常見錯誤,整理成一份實用的速查清單,以供參考。
    的頭像 發(fā)表于 05-15 14:34 ?1234次閱讀

    使用C++的CyAPI編寫的應(yīng)用程序上遇到了問題,求解決

    我在使用 C++ 的 CyAPI 編寫的應(yīng)用程序上遇到了問題。 我將 XferData() 方法與其他所有端點類型一起使用,沒有遇到任何問題。 但是,將其與 Endpoint0 一起使用會引發(fā)錯誤
    發(fā)表于 05-13 06:11

    TurMass? 如何幫助解決 UWB 定位系統(tǒng)大規(guī)模終端標(biāo)簽高并發(fā)通信沖突問題?

    在大容量定位終端數(shù)據(jù)高并發(fā)場景,現(xiàn)有通信技術(shù)因信號沖突、系統(tǒng)容量受限等問題,難以滿足需求。TurMass? 通信技術(shù)通過多信道設(shè)計、時隙劃分、定位與通信一體化等創(chuàng)新方案,有效解決了高并發(fā)
    的頭像 發(fā)表于 03-17 14:38 ?1024次閱讀
    TurMass? 如何幫助解決 UWB 定位<b class='flag-5'>系統(tǒng)</b>大規(guī)模終端標(biāo)簽高<b class='flag-5'>并發(fā)</b>通信沖突問題?

    多板 PCB 組裝中最常見的邏輯錯誤

    許多電子系統(tǒng)和產(chǎn)品并不只使用1個PCB,而是可能包含多個電路板、單個電路板和多個外部模塊,或者通過電纜與外部設(shè)備連接。在多板系統(tǒng),兩個電路板之間可能會出現(xiàn)邏輯錯誤,但如果沒有全面審查
    的頭像 發(fā)表于 03-14 18:15 ?933次閱讀
    多板 PCB 組裝中最常見的邏輯<b class='flag-5'>錯誤</b>