色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

利用靜態分析工具構建模型實現多核處理器的高質量軟件

星星科技指導員 ? 來源:嵌入式計算設計 ? 作者:Paul Anderson ? 2022-06-19 07:52 ? 次閱讀

對多核處理器進行編程以利用其強大功能意味著編寫多線程代碼。C 和 C++ 不是為并發而設計的,因此開發人員必須為這些語言使用諸如 pthreads 之類的庫。由于全新類別的編程缺陷帶來的風險,多線程代碼比單線程代碼更難正確處理。

在流氓的并發錯誤庫中,競爭條件是臭名昭著的屢犯者。競爭條件發生在程序檢查資源屬性并假設該屬性沒有更改的情況下執行操作,即使外部參與者已經介入并更改了該屬性。

數據競爭是一種特殊類型的競爭條件,它涉及對多線程程序中內存位置的并發訪問。當有兩個或多個執行線程訪問共享內存位置,至少一個線程正在更改該位置的數據,并且沒有明確的協調訪問機制時,就會出現此缺陷。如果發生數據競爭,它會使程序處于不一致的狀態。

數據競爭的陰險本質

人們普遍認為,一些數據競爭是無害的,可以安全地忽略。不幸的是,這僅在極少數情況下是正確的。最好通過舉例說明原因。

單例模式是一種常見的習慣用法,其中程序維護對單個底層對象的引用,如果已初始化,則布爾變量對其進行編碼。這種模式也稱為延遲初始化。以下代碼是該模式的示例:

if (!initialized) {

object = create();

initialized = true;

}

。。. 目的 。。.

這段代碼完全適合單線程程序,但它不是線程安全的,因為它在名為initialized的變量上存在數據競爭。如果由兩個不同的線程調用,則存在兩個線程幾乎同時觀察到初始化為 false 的風險,并且都將調用create(),從而違反了單例屬性。

為了使這個線程安全,自然的方法是用鎖保護整個if語句。然而,獲取和釋放鎖的成本可能很高,因此程序員試圖通過使用雙重檢查鎖定習慣用法來避免這種成本——在鎖范圍之外進行檢查,在鎖范圍內進行檢查。內部檢查用于確認在獲得鎖后第一個檢查仍然有效:

if (!initialized) {

lock();

if (!initialized) {

object = create();

initialized = true;

}

unlock();

}

。。. 目的 。。.

從表面上看,這看起來就足夠了,實際上,只要保證語句按該順序執行就足夠了。但是,優化編譯器可能會生成實質上切換object = create()和initialized = true順序的代碼。畢竟,這兩個語句之間沒有明確的依賴關系。在這種情況下,如果第二個線程在分配給initialized之后的任何時間進入此代碼,則該線程將在object被初始化之前使用它的值。

優化編譯器是不可思議的野獸。那些優化速度的人會考慮許多深奧的考慮,其中很少有對程序員來說是顯而易見的。他們通常會生成明顯無序的指令,因為這樣做可能會導致更少的高速緩存未命中,或者因為需要更少的指令。

假設因為重新排序在前面的示例中引入了競爭條件,所以認為編譯器有問題是錯誤的。編譯器正在做它被允許做的事情。語言規范對此非常清楚和明確:允許編譯器假設程序中沒有數據競爭。

實際上,規范更廣泛:允許編譯器在存在未定義行為的情況下做任何事情。這有時被開玩笑地稱為著火語義;如果程序具有未定義的行為,該規范允許編譯器將計算機置于火上。除了數據競爭之外,緩沖區溢出、無效地址的取消引用等許多傳統錯誤也構成了未定義的行為。因為編譯器可以自由地做任何事情,而不是燒毀建筑物,他們通常會做明智的事情,即假設未定義的行為永遠不會發生并相應地進行優化。

即使對于并發和編譯器方面的專家來說,這樣做的后果有時也會令人驚訝。很難讓程序員相信看起來完全正確的代碼可以編譯成有嚴重錯誤的代碼。

另一個例子是值得描述的。假設有兩個線程,一個讀取共享變量,另一個寫入共享變量。讓我們假設讀者在寫入者更改之前或之后看到該值并不重要(這不是一種不常見的模式)。如果這些訪問不受鎖保護,那么顯然存在數據競爭。然而,盡管著火規則,大多數程序員會得出結論,這是完全良性的。

事實證明,至少有兩種合理的方式可以編譯這段代碼,讀者會看到錯誤的值。第一種方法很容易解釋:假設該值是一個只能讀取 32 位字的架構上的 64 位數量。那么讀者和作者都需要兩條指令,不幸的交錯可能意味著讀者看到舊值的前 32 位和新值的后 32 位,當它們組合時可能不是舊值也不是新的。

生成錯誤代碼的第二種方式更為微妙。假設讀者做了以下事情,其中??數據競爭在名為global的變量上:

int local = global; // Take a copy of

// the global

if (local == something) {

。..

}

。.. // Some non-trivial code that does

// not change global or local

if (local == something) {

。..

}

在這里,讀者正在制作 racy 變量的本地副本并引用該值兩次。可以合理地期望兩個地方的值相同,但同樣,優化編譯器可以生成未滿足期望的代碼。如果將local分配給一個寄存器,那么它將有一個值用于第一次比較,但如果兩個條件之間的代碼足夠重要,那么該寄存器可能會溢出——換句話說,為了不同的目的而重用。在這種情況下,在第二個條件下,local的值將從全局變量重新加載到寄存器中,此時編寫器可能已將其更改為不同的值。

程序員應該非常懷疑某些數據競爭是可以接受的,并且應該努力從他們的代碼中找到并刪除它們。

發現風險缺陷的技術

在發現并發缺陷時,傳統的動態測試技術可能不夠用。一個通過一百次測試的程序并不能保證下一次通過,即使是相同的輸入和相同的環境。這些錯誤是否出現對時間非常敏感,線程中的操作交錯的順序本質上是不確定的。

用于發現數據競爭的新動態測試技術正在出現。這些技術通過在應用程序執行時監視它們并觀察每個線程持有的鎖以及這些線程正在訪問的內存位置來工作。如果發現異常,則發出診斷。其他工具有助于診斷可能導致故障的數據競爭。一些公司現在提供工具來促進數據競爭的診斷,從而允許重播導致異常的事件。

靜態分析工具也可用于查找數據競爭和其他并發錯誤。動態測試工具會發現針對具有固定輸入集的程序的特定執行出現的缺陷,而靜態分析工具會檢查所有可能的執行和所有可能的輸入。出于性能原因,工具可能會限制進行多少探索,因此可能并不完全詳盡;即便如此,它們可以涵蓋的范圍遠遠超過動態測試所能實現的范圍。靜態分析的優點是不需要測試用例,因為程序從未真正執行過。

相反,這些工具通過創建程序模型然后以各種方式探索模型以發現異常來工作。GrammaTech 的 CodeSonar 通過創建表示每個線程持有的鎖集的模型并通過執行探索執行路徑的程序的符號執行來發現數據競爭。它記錄受鎖保護的變量集,并使用此信息來查找可能導致共享變量在沒有適當同步的情況下使用的交錯。類似的技術可用于發現其他并發缺陷,例如死鎖和鎖管理不善。

一旦發現,數據競爭通常很容易修復,盡管這樣做會導致性能損失。在某些情況下,可能會嘗試使用 C 中的 volatile 關鍵字來糾正數據爭用,但不建議這樣做,因為 volatile 并非旨在解決并發問題,并且在任何情況下都是一個難以理解的構造,經常被錯誤編譯。最新版本的 C 和 C++ 包含并發并支持原子操作。對這些操作的編譯器支持正在慢慢出現,在它變得可用之前,最好的方法是使用鎖。

為了實現多核處理器的高質量軟件,建議對數據競爭采取零容忍政策。使用靜態和動態技術的組合來查找它們,并注意不要過度依賴深奧的編譯器技術來修復它們。這些缺陷是如此危險和不可預測,因此系統地消除它們是確保它們不會造成傷害的唯一安全方法。

審核編輯:郭婷

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

    關注

    68

    文章

    19311

    瀏覽量

    230025
  • C++
    C++
    +關注

    關注

    22

    文章

    2110

    瀏覽量

    73685
  • 編譯器
    +關注

    關注

    1

    文章

    1634

    瀏覽量

    49150
收藏 人收藏

    評論

    相關推薦

    借助谷歌Gemini和Imagen模型生成高質量圖像

    在快速發展的生成式 AI 領域,結合不同模型的優勢可以帶來顯著的成果。通過利用谷歌的 Gemini 模型來制作詳細且富有創意的提示,然后使用 Imagen 3 模型根據這些提示生成
    的頭像 發表于 01-03 10:38 ?134次閱讀
    借助谷歌Gemini和Imagen<b class='flag-5'>模型</b>生成<b class='flag-5'>高質量</b>圖像

    旋智多核處理器助力電機控制應用

    電機控制應用軟件通常需要實時處理,以確保精確控制和快速響應。高性能、多核嵌入式處理器能夠實時處理多項復雜計算,是保持電機控制系統穩定性和準確
    的頭像 發表于 10-24 16:17 ?487次閱讀
    旋智<b class='flag-5'>多核</b>心<b class='flag-5'>處理器</b>助力電機控制應用

    信雅達入選2024年度中國軟件高質量發展前百家企業

    近日,中國軟件行業協會首次發布《中國軟件產業高質量發展報告(2024)》(以下簡稱“報告”),深入分析了我國軟件產業的發展現狀、特點與問題,
    的頭像 發表于 10-22 11:08 ?217次閱讀

    中國算力大會召開,業界首個算力高質量評估體系發布

    首次完整地構建了人工智能時代高質量算力的理論體系,并探索性提出業界首個 "五位一體"的高質量算力評估體系。 發布現場 在當前由大模型和AIGC驅動的AI時代,算力需求暴增,同時還面臨供
    的頭像 發表于 09-28 16:50 ?274次閱讀
    中國算力大會召開,業界首個算力<b class='flag-5'>高質量</b>評估體系發布

    知識分享 | 輕松實現優質建模

    知識分享在知識分享欄目中,我們會定期與讀者分享來自MES模賽思的基于模型軟件開發相關Know-How干貨,關注公眾號,隨時掌握基于模型軟件設計的技術知識。輕松
    的頭像 發表于 09-12 08:08 ?406次閱讀
    知識分享 | 輕松<b class='flag-5'>實現</b>優質<b class='flag-5'>建模</b>

    DevOps中的質量門工作原理,以及靜態代碼分析Klocwork和Perforce Helix QAC在質量門中的實踐應用

    如何使用靜態代碼分析工具(如Klocwork 和 Helix QAC)實現質量門。 什么是質量
    的頭像 發表于 07-29 15:12 ?412次閱讀

    科技創新!國產自主三坐標測量機推動產業高質量發展

    科技創新推動高質量發展,精密幾何測量儀器是核心。中圖三坐標測量機采用創新技術,提升測量精度和穩定性,擁有自主可控軟件,助力產業升級,實現高質量發展。
    的頭像 發表于 07-12 11:32 ?1269次閱讀
    科技創新!國產自主三坐標測量機推動產業<b class='flag-5'>高質量</b>發展

    上位機監控軟件如何提高質量

    上位機監控軟件在工業自動化和智能制造領域中扮演著舉足輕重的角色。它通過實時監控、數據采集、分析處理,幫助企業實現生產過程的優化和自動化。然而,要提高上位機監控
    的頭像 發表于 06-07 09:14 ?389次閱讀

    【直播預告】基于ISO 26262實現高質量的MBD過程

    直播時間:2024年6月12號20:00直播平臺:視頻號、CSDN、B站、抖音下方一鍵預約直播大綱?基于模型軟件開發(MBD)基本原則和優勢模型質量是高效MBD的關鍵設計
    的頭像 發表于 06-06 08:25 ?389次閱讀
    【直播預告】基于ISO 26262<b class='flag-5'>實現</b><b class='flag-5'>高質量</b>的MBD過程

    【大語言模型:原理與工程實踐】大語言模型的預訓練

    和多樣性。高質量數據能確保模型穩定收斂,而數據的多樣性則有助于模型學習廣泛的通用能力,如文本生成、信息抽取、問答和編程等。此外,數據的多樣性對于確保模型在實際應用中具有良好的泛化能力至
    發表于 05-07 17:10

    發改委發布《關于新形勢下配電網高質量發展的指導意見》,CET中電技術如何助力配電網實現高質量發展?

    為推動新形勢下配電網高質量發展,助力構建清潔低碳、安全充裕、經濟高效、供需協同、靈活智能的新型電力系統,國家發展改革委、國家能源局發布《關于新形勢下配電網高質量發展的指導意見》。指導意見中提到“提高
    的頭像 發表于 04-17 08:36 ?1006次閱讀
    發改委發布《關于新形勢下配電網<b class='flag-5'>高質量</b>發展的指導意見》,CET中電技術如何助力配電網<b class='flag-5'>實現</b><b class='flag-5'>高質量</b>發展?

    北斗芯片產業的高質量發展之路

    高質量發展是全面建設社會主義現代化國家的首要任務”,二十大報告中對高質量發展有著明確的論斷和要求。在2023年的全國兩會中還指出,加快實現高水平科技自立自強,是推動高質量發展的必由之
    的頭像 發表于 03-15 14:03 ?400次閱讀
    北斗芯片產業的<b class='flag-5'>高質量</b>發展之路

    鐳雕機:如何利用激光技術實現高質量的產品標記

    鐳雕機是一種利用激光技術實現高質量產品標記的設備。它通過激光束在各種不同的物質表面進行精確的打標,可以產生永久性的標記效果,這些標記不僅精美,而且具有高度的精度和清晰度。以下是鐳雕機如何利用
    的頭像 發表于 03-14 20:10 ?509次閱讀
    鐳雕機:如何<b class='flag-5'>利用</b>激光技術<b class='flag-5'>實現</b><b class='flag-5'>高質量</b>的產品標記

    穩中創新?產業升級?高質量發展 | 聯誠發高質量發展工作推進會議召開

    推動企業高質量發展。聯誠發創始人兼總裁龍平芳、董秘毛強軍等公司領導、員工代表出席了本次大會。 會上,董秘毛強軍首先提到,在當今競爭激烈的市場環境中,公司的高質量發展是企業追求的最終目標。為了實現這一目標,各板塊和各崗
    的頭像 發表于 02-22 11:33 ?475次閱讀
    穩中創新?產業升級?<b class='flag-5'>高質量</b>發展 | 聯誠發<b class='flag-5'>高質量</b>發展工作推進會議召開

    商湯科技與庫醇科技達成合作 為垂域大模型構建高質量大規模的領域微調數據

    數字化轉型,為垂域大模型構建高質量大規模的領域微調數據。 ? 本次合作將基于商湯通用大模型進行二次開發,給模型注入領域知識, 訓練一個專門根
    的頭像 發表于 01-10 09:46 ?718次閱讀
    商湯科技與庫醇科技達成合作 為垂域大<b class='flag-5'>模型</b><b class='flag-5'>構建</b><b class='flag-5'>高質量</b>大規模的領域微調數據
    主站蜘蛛池模板: 国产3级在线观看| 百度影音第四色| 99久久久久亚洲AV无码| 狠很橹快播| 小玲被公扒开腿| 国产精品久久久久影院色| 日日噜噜大屁股熟妇| 成人女人A级毛片免费软件| 内射一区二区精品视频在线观看 | 性色爽爱性色爽爱网站| 福利啪啪吧| 帅哥操美女| 国产全肉乱妇杂乱视频| 午夜影院c绿象| 果冻传媒2021一二三区| 亚洲人视频在线观看| 久久精品男人影院| 2020亚洲 欧美 国产 日韩| 免费高清国产| WRITEAS检查身体| 色噜噜狠狠色综合欧洲| 国产精品自产拍在线观看网站| 小草影院免费| 久久re视频这里精品免费1| 在线欧美精品一区二区三区| 蜜桃AV色欲A片精品一区| 草莓视频cm.888tw| 外国三级片名| 护士美女照片| 69人体阴展网| 色欲AV精品人妻一区二区三区| 国产精品成人自拍| 亚洲无线码一区在线观看| 妹妹我要色| 国产成人mv 在线播放| 亚洲免费无码av线观看| 男女XX00上下抽搐动态图| 疯狂第一次国语| 伊人亚洲AV久久无码精品| 欧美牲交A欧美牲交VDO| 国产精品无码久久av|