99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

靜態(tài)分析工具構(gòu)建模型實(shí)現(xiàn)多核處理器的高質(zhì)量

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

掃碼添加小助手

加入工程師交流群

對(duì)多核處理器進(jìn)行編程以利用其強(qiáng)大功能意味著編寫(xiě)多線程代碼。C 和 C++ 不是為并發(fā)而設(shè)計(jì)的,因此開(kāi)發(fā)人員必須為這些語(yǔ)言使用諸如 pthreads 之類的庫(kù)。由于全新類別的編程缺陷帶來(lái)的風(fēng)險(xiǎn),多線程代碼比單線程代碼更難正確處理。

在流氓的并發(fā)錯(cuò)誤庫(kù)中,競(jìng)爭(zhēng)條件是臭名昭著的屢犯者。競(jìng)爭(zhēng)條件發(fā)生在程序檢查資源屬性并假設(shè)該屬性沒(méi)有更改的情況下執(zhí)行操作,即使外部參與者已經(jīng)介入并更改了該屬性。

數(shù)據(jù)競(jìng)爭(zhēng)是一種特殊類型的競(jìng)爭(zhēng)條件,它涉及對(duì)多線程程序中內(nèi)存位置的并發(fā)訪問(wèn)。當(dāng)有兩個(gè)或多個(gè)執(zhí)行線程訪問(wèn)共享內(nèi)存位置,至少一個(gè)線程正在更改該位置的數(shù)據(jù),并且沒(méi)有明確的協(xié)調(diào)訪問(wèn)機(jī)制時(shí),就會(huì)出現(xiàn)此缺陷。如果發(fā)生數(shù)據(jù)競(jìng)爭(zhēng),它會(huì)使程序處于不一致的狀態(tài)。

數(shù)據(jù)競(jìng)爭(zhēng)的陰險(xiǎn)本質(zhì)

人們普遍認(rèn)為,一些數(shù)據(jù)競(jìng)爭(zhēng)是無(wú)害的,可以安全地忽略。不幸的是,這僅在極少數(shù)情況下是正確的。最好通過(guò)舉例說(shuō)明原因。

單例模式是一種常見(jiàn)的習(xí)慣用法,其中程序維護(hù)對(duì)單個(gè)底層對(duì)象的引用,如果已初始化,則布爾變量對(duì)其進(jìn)行編碼。這種模式也稱為延遲初始化。以下代碼是該模式的示例:

if (!initialized) {

object = create();

initialized = true;

}

。.. object 。..

這段代碼完全適合單線程程序,但它不是線程安全的,因?yàn)樗诿麨閕nitialized的變量上存在數(shù)據(jù)競(jìng)爭(zhēng)。如果由兩個(gè)不同的線程調(diào)用,則存在兩個(gè)線程幾乎同時(shí)觀察到初始化為 false 的風(fēng)險(xiǎn),并且都將調(diào)用create(),從而違反了單例屬性。

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

if (!initialized) {

lock();

if (!initialized) {

object = create();

initialized = true;

}

unlock();

}

。.. object 。..

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

優(yōu)化編譯器是不可思議的野獸。那些優(yōu)化速度的人會(huì)考慮許多深?yuàn)W的考慮,其中很少有對(duì)程序員來(lái)說(shuō)是顯而易見(jiàn)的。它們通常會(huì)生成明顯無(wú)序的指令,因?yàn)檫@樣做可能會(huì)導(dǎo)致更少的高速緩存未命中,或者因?yàn)樾枰俚闹噶睢?/p>

假設(shè)因?yàn)橹匦屡判蛟谇懊娴氖纠幸肓烁?jìng)爭(zhēng)條件,所以認(rèn)為編譯器有問(wèn)題是錯(cuò)誤的。編譯器正在做它被允許做的事情。語(yǔ)言規(guī)范對(duì)此非常清楚和明確:允許編譯器假設(shè)程序中沒(méi)有數(shù)據(jù)競(jìng)爭(zhēng)。

實(shí)際上,規(guī)范更廣泛:允許編譯器在存在未定義行為的情況下做任何事情。這有時(shí)被開(kāi)玩笑地稱為著火語(yǔ)義;如果程序具有未定義的行為,該規(guī)范允許編譯器將計(jì)算機(jī)置于火上。除了數(shù)據(jù)競(jìng)爭(zhēng)之外,緩沖區(qū)溢出、無(wú)效地址的取消引用等許多傳統(tǒng)錯(cuò)誤也構(gòu)成了未定義的行為。因?yàn)榫幾g器可以自由地做任何事情,而不是燒毀建筑物,他們通常會(huì)做明智的事情,即假設(shè)未定義的行為永遠(yuǎn)不會(huì)發(fā)生并相應(yīng)地進(jìn)行優(yōu)化。

即使對(duì)于并發(fā)和編譯器方面的專家來(lái)說(shuō),這樣做的后果有時(shí)也會(huì)令人驚訝。很難讓程序員相信看起來(lái)完全正確的代碼可以編譯成有嚴(yán)重錯(cuò)誤的代碼。

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

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

生成錯(cuò)誤代碼的第二種方式更為微妙。假設(shè)讀者做了以下事情,其中??數(shù)據(jù)競(jìng)爭(zhēng)在名為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 變量的本地副本并引用該值兩次??梢院侠淼仄谕麅蓚€(gè)地方的值相同,但同樣,優(yōu)化編譯器可以生成未滿足期望的代碼。如果將local分配給一個(gè)寄存器,那么它將有一個(gè)值用于第一次比較,但如果兩個(gè)條件之間的代碼足夠重要,那么該寄存器可能會(huì)溢出——換句話說(shuō),為了不同的目的而重用。在這種情況下,在第二個(gè)條件下,local的值將從全局變量重新加載到寄存器中,此時(shí)編寫(xiě)器可能已將其更改為不同的值。

程序員應(yīng)該非常懷疑某些數(shù)據(jù)競(jìng)爭(zhēng)是可以接受的,并且應(yīng)該努力從他們的代碼中找到并刪除它們。

發(fā)現(xiàn)風(fēng)險(xiǎn)缺陷的技術(shù)

在發(fā)現(xiàn)并發(fā)缺陷時(shí),傳統(tǒng)的動(dòng)態(tài)測(cè)試技術(shù)可能不夠用。一個(gè)通過(guò)一百次測(cè)試的程序并不能保證下一次通過(guò),即使是相同的輸入和相同的環(huán)境。這些錯(cuò)誤是否出現(xiàn)對(duì)時(shí)間非常敏感,線程中的操作交錯(cuò)的順序本質(zhì)上是不確定的。

用于發(fā)現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng)的新動(dòng)態(tài)測(cè)試技術(shù)正在出現(xiàn)。這些技術(shù)通過(guò)在應(yīng)用程序執(zhí)行時(shí)監(jiān)視它們并觀察每個(gè)線程持有的鎖以及這些線程正在訪問(wèn)的內(nèi)存位置來(lái)工作。如果發(fā)現(xiàn)異常,則發(fā)出診斷。其他工具有助于診斷可能導(dǎo)致故障的數(shù)據(jù)競(jìng)爭(zhēng)。一些公司現(xiàn)在提供工具來(lái)促進(jìn)數(shù)據(jù)競(jìng)爭(zhēng)的診斷,從而允許重播導(dǎo)致異常的事件。

靜態(tài)分析工具也可用于查找數(shù)據(jù)競(jìng)爭(zhēng)和其他并發(fā)錯(cuò)誤。動(dòng)態(tài)測(cè)試工具會(huì)發(fā)現(xiàn)針對(duì)具有固定輸入集的程序的特定執(zhí)行出現(xiàn)的缺陷,而靜態(tài)分析工具會(huì)檢查所有可能的執(zhí)行和所有可能的輸入。出于性能原因,工具可能會(huì)限制進(jìn)行多少探索,因此可能并不完全詳盡;即便如此,它們可以涵蓋的范圍遠(yuǎn)遠(yuǎn)超過(guò)動(dòng)態(tài)測(cè)試所能實(shí)現(xiàn)的范圍。靜態(tài)分析的優(yōu)點(diǎn)是不需要測(cè)試用例,因?yàn)槌绦驈奈凑嬲龍?zhí)行過(guò)。

相反,這些工具通過(guò)創(chuàng)建程序模型然后以各種方式探索模型以發(fā)現(xiàn)異常來(lái)工作。GrammaTech 的 CodeSonar 通過(guò)創(chuàng)建表示每個(gè)線程持有的鎖集的模型并通過(guò)執(zhí)行探索執(zhí)行路徑的程序的符號(hào)執(zhí)行來(lái)發(fā)現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng)。它記錄受鎖保護(hù)的變量集,并使用此信息來(lái)查找可能導(dǎo)致共享變量在沒(méi)有適當(dāng)同步的情況下使用的交錯(cuò)。類似的技術(shù)可用于發(fā)現(xiàn)其他并發(fā)缺陷,例如死鎖和鎖管理不善。

一旦發(fā)現(xiàn),數(shù)據(jù)競(jìng)爭(zhēng)通常很容易修復(fù),盡管這樣做會(huì)導(dǎo)致性能損失。在某些情況下,可能會(huì)嘗試使用 C 中的 volatile 關(guān)鍵字來(lái)糾正數(shù)據(jù)爭(zhēng)用,但不建議這樣做,因?yàn)?volatile 并非旨在解決并發(fā)問(wèn)題,并且在任何情況下都是一個(gè)難以理解的構(gòu)造,經(jīng)常被錯(cuò)誤編譯。最新版本的 C 和 C++ 包含并發(fā)并支持原子操作。對(duì)這些操作的編譯器支持正在慢慢出現(xiàn),在它變得可用之前,最好的方法是使用鎖。

為了實(shí)現(xiàn)多核處理器的高質(zhì)量軟件,建議對(duì)數(shù)據(jù)競(jìng)爭(zhēng)采取零容忍政策。使用靜態(tài)和動(dòng)態(tài)技術(shù)的組合來(lái)查找它們,并注意不要過(guò)度依賴深?yuàn)W的編譯器技術(shù)來(lái)修復(fù)它們。這些缺陷是如此危險(xiǎn)和不可預(yù)測(cè),因此系統(tǒng)地消除它們是確保它們不會(huì)造成傷害的唯一安全方法。

聲明:本文內(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)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19884

    瀏覽量

    235018
  • 嵌入式
    +關(guān)注

    關(guān)注

    5149

    文章

    19655

    瀏覽量

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

    關(guān)注

    22

    文章

    2119

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    新能源變革之路,要建在“高質(zhì)量”的路基上

    高質(zhì)量”是能源革命的前提與基座
    的頭像 發(fā)表于 06-24 11:42 ?1671次閱讀
    新能源變革之路,要建在“<b class='flag-5'>高質(zhì)量</b>”的路基上

    MBSE工具+架構(gòu)建模:從效率提升到質(zhì)量賦能

    MBSE解決方案,以架構(gòu)建模為紐帶,工具鏈集成為支撐,幫助客戶有效應(yīng)對(duì)汽車(chē)電子系統(tǒng)日益增長(zhǎng)的復(fù)雜性挑戰(zhàn)。通過(guò)打破信息孤島、實(shí)現(xiàn)變更協(xié)同、提升工具鏈流暢度,加速開(kāi)發(fā)進(jìn)程、降低返工成本、提
    的頭像 發(fā)表于 06-20 10:57 ?169次閱讀
    MBSE<b class='flag-5'>工具</b>+架<b class='flag-5'>構(gòu)建模</b>:從效率提升到<b class='flag-5'>質(zhì)量</b>賦能

    您的模型診斷專家MI:助力把好模型質(zhì)量關(guān)

    Model Inspector是一款專門(mén)針對(duì)汽車(chē)、航空、軌交等行業(yè)的靜態(tài)模型檢查工具,可以對(duì)模型進(jìn)行自動(dòng)化、批量化建模規(guī)范和復(fù)雜度量的檢查,
    的頭像 發(fā)表于 06-11 16:57 ?865次閱讀
    您的<b class='flag-5'>模型</b>診斷專家MI:助力把好<b class='flag-5'>模型</b><b class='flag-5'>質(zhì)量</b>關(guān)

    CADENAS 數(shù)字產(chǎn)品配置輕松實(shí)現(xiàn)Ascendor電梯規(guī)劃

    的客戶提供了符合國(guó)際標(biāo)準(zhǔn)的高質(zhì)量數(shù)據(jù)。電梯制造商的經(jīng)銷商在為客戶提供咨詢和處理訂單時(shí),也因這款工具而得到了大力支持。 數(shù)字產(chǎn)品配置有助于推動(dòng)業(yè)務(wù)擴(kuò)張 對(duì)于 Ascendor 公司
    發(fā)表于 04-28 14:22

    異形拼接處理器可以實(shí)現(xiàn)的效果

    異形拼接處理器可以實(shí)現(xiàn)的效果非常多樣化和創(chuàng)新,以下是對(duì)其可實(shí)現(xiàn)效果的進(jìn)一步補(bǔ)充: 一、創(chuàng)意拼接顯示 1、任意角度拼接:異形拼接處理器支持0~360度任意角度的拼接顯示,使得顯示屏可以以
    的頭像 發(fā)表于 03-21 12:39 ?243次閱讀
    異形拼接<b class='flag-5'>處理器</b>可以<b class='flag-5'>實(shí)現(xiàn)</b>的效果

    電動(dòng)工具EMC測(cè)試整改:邁向高質(zhì)量生產(chǎn)的必由之路

    深圳南柯電子|電動(dòng)工具EMC測(cè)試整改:邁向高質(zhì)量生產(chǎn)的必由之路
    的頭像 發(fā)表于 02-27 09:37 ?398次閱讀
    電動(dòng)<b class='flag-5'>工具</b>EMC測(cè)試整改:邁向<b class='flag-5'>高質(zhì)量</b>生產(chǎn)的必由之路

    廣汽集團(tuán)召開(kāi)高質(zhì)量發(fā)展大會(huì)

    春回大地,萬(wàn)象更新。近兩日廣東省、廣州市聚焦“建設(shè)現(xiàn)代化產(chǎn)業(yè)體系”主題,相繼召開(kāi)“新春第一會(huì)”——高質(zhì)量發(fā)展大會(huì),吹響奮進(jìn)號(hào)角。廣汽集團(tuán)黨委書(shū)記、董事長(zhǎng)馮興亞作為省市重點(diǎn)產(chǎn)業(yè)高質(zhì)量發(fā)展代表參加會(huì)議,與產(chǎn)學(xué)研各界代表共聚一堂,共繪廣東、廣州
    的頭像 發(fā)表于 02-07 10:18 ?594次閱讀

    電動(dòng)工具EMC測(cè)試整改:邁向高質(zhì)量生產(chǎn)的必經(jīng)之路

    深圳南柯電子|電動(dòng)工具EMC測(cè)試整改:邁向高質(zhì)量生產(chǎn)的必經(jīng)之路
    的頭像 發(fā)表于 01-14 14:29 ?509次閱讀
    電動(dòng)<b class='flag-5'>工具</b>EMC測(cè)試整改:邁向<b class='flag-5'>高質(zhì)量</b>生產(chǎn)的必經(jīng)之路

    QorIQ?T1042多核處理器

    QorIQ?T1042多核處理器T1042 QorIQ高級(jí)多核處理器綜合了數(shù)據(jù)網(wǎng)絡(luò)、電信/數(shù)據(jù)通訊、無(wú)線網(wǎng)絡(luò)基礎(chǔ)設(shè)施和國(guó)防軍事/航天工程應(yīng)用所需要的性能卓越數(shù)據(jù)線路加速及網(wǎng)絡(luò)和外圍總線
    發(fā)表于 01-10 08:48

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

    在快速發(fā)展的生成式 AI 領(lǐng)域,結(jié)合不同模型的優(yōu)勢(shì)可以帶來(lái)顯著的成果。通過(guò)利用谷歌的 Gemini 模型來(lái)制作詳細(xì)且富有創(chuàng)意的提示,然后使用 Imagen 3 模型根據(jù)這些提示生成高質(zhì)量
    的頭像 發(fā)表于 01-03 10:38 ?889次閱讀
    借助谷歌Gemini和Imagen<b class='flag-5'>模型</b>生成<b class='flag-5'>高質(zhì)量</b>圖像

    芯導(dǎo)科技榮獲上市公司高質(zhì)量發(fā)展大會(huì)“科技創(chuàng)新獎(jiǎng)”

    ,芯導(dǎo)科技(股票代碼:688230.SH)長(zhǎng)期以來(lái)堅(jiān)持高質(zhì)量發(fā)展,憑借在科技創(chuàng)新、企業(yè)治理、市場(chǎng)表現(xiàn)等方面的綜合指標(biāo),榮獲“科技創(chuàng)新獎(jiǎng)”。 本次大會(huì)以“資本+科創(chuàng)+產(chǎn)業(yè)”的生態(tài)圈構(gòu)建為核心議題,由新華社上海證券報(bào)主辦,吸引了來(lái)自政、
    的頭像 發(fā)表于 12-28 16:26 ?772次閱讀

    中興通訊引領(lǐng)5G-A高質(zhì)量發(fā)展新紀(jì)元

    中國(guó)5G商用5周年之際,以“智聯(lián)未來(lái) 無(wú)限可能”為主題的2024移動(dòng)通信高質(zhì)量發(fā)展論壇在北京舉辦。本屆論壇系統(tǒng)呈現(xiàn)總結(jié)我國(guó)移動(dòng)通信,特別是5G產(chǎn)業(yè)自身高質(zhì)量發(fā)展和引領(lǐng)數(shù)字經(jīng)濟(jì)高質(zhì)量發(fā)展的成果和經(jīng)驗(yàn),展望5G-A、6G協(xié)同創(chuàng)新發(fā)展
    的頭像 發(fā)表于 10-15 10:32 ?1047次閱讀

    中國(guó)算力大會(huì)召開(kāi),業(yè)界首個(gè)算力高質(zhì)量評(píng)估體系發(fā)布

    首次完整地構(gòu)建了人工智能時(shí)代高質(zhì)量算力的理論體系,并探索性提出業(yè)界首個(gè) "五位一體"的高質(zhì)量算力評(píng)估體系。 發(fā)布現(xiàn)場(chǎng) 在當(dāng)前由大模型和AIGC驅(qū)動(dòng)的AI時(shí)代,算力需求暴增,同時(shí)還面臨供
    的頭像 發(fā)表于 09-28 16:50 ?479次閱讀
    中國(guó)算力大會(huì)召開(kāi),業(yè)界首個(gè)算力<b class='flag-5'>高質(zhì)量</b>評(píng)估體系發(fā)布

    知識(shí)分享 | 輕松實(shí)現(xiàn)優(yōu)質(zhì)建模

    知識(shí)分享在知識(shí)分享欄目中,我們會(huì)定期與讀者分享來(lái)自MES模賽思的基于模型的軟件開(kāi)發(fā)相關(guān)Know-How干貨,關(guān)注公眾號(hào),隨時(shí)掌握基于模型的軟件設(shè)計(jì)的技術(shù)知識(shí)。輕松實(shí)現(xiàn)優(yōu)質(zhì)建模前言在基于
    的頭像 發(fā)表于 09-12 08:08 ?721次閱讀
    知識(shí)分享 | 輕松<b class='flag-5'>實(shí)現(xiàn)</b>優(yōu)質(zhì)<b class='flag-5'>建模</b>

    DevOps中的質(zhì)量門(mén)工作原理,以及靜態(tài)代碼分析Klocwork和Perforce Helix QAC在質(zhì)量門(mén)中的實(shí)踐應(yīng)用

    如何使用靜態(tài)代碼分析工具(如Klocwork 和 Helix QAC)實(shí)現(xiàn)質(zhì)量門(mén)。 什么是質(zhì)量門(mén)
    的頭像 發(fā)表于 07-29 15:12 ?874次閱讀