亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        多核并行計算中鎖機制的影響研究

        2021-01-30 05:30:38徐永新
        電子技術與軟件工程 2020年22期
        關鍵詞:機制

        徐永新

        (華為技術有限公司 江蘇省南京市 210012)

        隨著摩爾定律的逐漸失效,CPU 往多核、眾核方向發(fā)展,單一CPU 上集成的核數(shù)越來越多。隨著核數(shù)增加,鎖對性能的影響也越來越顯著。根據(jù)阿姆達爾定律,多核并行計算的效率受限于流程中的串行處理部分,串行部分越大,則加速比提升的越慢。因此,學術界及工業(yè)界都在千方百計減少多核多線程場景下串行執(zhí)行流程的處理時間,其中鎖是一種比較典型的串行執(zhí)行場景。鎖的存在將導致多線程的執(zhí)行性能降低。

        在某些對事件響應有較高實時性要求的場合,鎖的存在也會影響線程對特定事件的響應時間。某線程在嘗試獲取鎖的過程中,存在時間不確定性,可能需要較短或者較長時間才能獲取到鎖,這種執(zhí)行時間的不確定,將導致線程對具體業(yè)務時延的不確定。

        1 鎖的種類

        在多核并行計算場景中,處于不同核上的多線程嘗試訪問一個公共資源的時候,往往需要加鎖操作。根據(jù)業(yè)務線程訪問共享資源的不同特征,需要合理選擇不同的鎖機制來配合完成業(yè)務的特定功能。

        1.1 自旋鎖

        自旋鎖是一種獲取不到資源時在原地忙等,以期獲取到共享資源的鎖機制。

        一個線程想要獲取被自旋鎖保護的共享資源的時候,必須先得到鎖,使用完共享資源的時候,必須釋放鎖。在獲取鎖的時候,如果該共享資源沒有被任何其他線程占有,則直接獲取該鎖;反之,如果該資源已被其他線程占有,則申請者會在原地自旋等待,即忙等,不斷循環(huán)檢測該鎖是否可以被獲取。忙等狀態(tài),CPU 一直處于空轉而不休眠,浪費了CPU 資源。

        自旋鎖的優(yōu)點是不會導致調用線程的休眠,沒有線程切換的開銷。自旋鎖適合于持有鎖的時間特別短的場合。如果鎖的粒度較小,其他線程忙等的時間也較短,對CPU 的浪費可以控制在一個較小的范圍內。

        1.2 互斥鎖

        互斥鎖的功能和自旋鎖類似,不同之處在于互斥鎖獲取不到共享資源的時候,線程不會在原地等待,而會處于休眠阻塞狀態(tài)。

        使用互斥鎖獲取不到共享資源的線程會被阻塞,此時將發(fā)生上下文切換,操作系統(tǒng)會調度其他線程來運行,從而不會浪費該核的處理時間。當共享資源被釋放的時候,操作系統(tǒng)又會重新調度等待在該共享資源的線程來運行。

        互斥鎖的優(yōu)點是等鎖階段不會導致CPU 空轉,缺點是會有上下文切換的開銷,所以互斥鎖適用于持有鎖時間相對較長的場合。

        1.3 讀寫鎖

        讀寫鎖把對共享資源的訪問,分成了讀者和寫者,讀者只會對共享資源進行讀操作,而寫者只會對共享資源做寫操作。

        讀寫鎖相對于自旋鎖來說,能提高并發(fā)讀的效率,因為讀寫鎖允許多個讀者同時進行訪問。在任意一個時刻,只允許一個寫者進行寫操作,而這個寫者在獲取鎖之前,必須等其他的所有讀者或者寫者釋放鎖。

        讀寫鎖適合于讀多寫少的場合,這種情況下,多個讀者并發(fā)訪問能提升多核的并發(fā)性能。

        1.4 順序鎖

        順序鎖是對讀寫鎖的一種改進,允許寫操作更高的優(yōu)先級,即使有讀者正在進行讀操作,也允許寫者同時進行寫操作。這樣的好處是寫者不用等待,可以更快的做數(shù)據(jù)的更新。

        為了保證讀者寫者數(shù)據(jù)的一致性,讀者需要在讀取操作的前后分別讀取一次順序計數(shù)器,如果兩次讀取該計數(shù)器的值都是一樣的,說明期間沒有發(fā)生寫操作,讀到的數(shù)據(jù)是有效的。反之,說明讀到的數(shù)據(jù)是無效的,因為寫者已經(jīng)改寫了順序計數(shù)器,需要讀者重新讀取一次。

        順序鎖適用于需要寫者及時更新數(shù)據(jù)的場合,且寫者不能頻繁更新數(shù)據(jù)。

        1.5 基于CAS的免鎖

        CAS(或Compare And Swap)是CPU 所支持的一種原子操作,其本質上是一種樂觀鎖,線程每次都假設沒有沖突,直接去操作某個值,提交新的值時再檢測有沒有沖突,如果沒有沖突就提交成功,如果有沖突就失敗重新嘗試,直到嘗試成功為止。

        CAS 操作可以有效減少多線程并行執(zhí)行情況下鎖的粒度。CAS操作包含三個操作數(shù):內存位置、預期原值、新值。比如隊列的入隊操作,要改變隊頭指針head 的值,使用CAS 操作的偽碼如下:

        如果隊頭head 的內存地址里面的值和current 值相等,說明沒有其他線程來改動該值,將內存里面的值換成新的值;反之,不相等則說明已經(jīng)被其他線程改過了,需要重新從隊頭取值并重新嘗試。這個判斷和新值的替換是一個不可分割的原子操作。

        CAS 操作完全不受操作系統(tǒng)行為的影響,所以該機制可以很好解決死鎖,餓死,優(yōu)先級反轉等問題。

        圖1:基于悲觀鎖機制的實驗方案

        圖2:基于CAS 機制的實驗方案

        圖3:基于無鎖機制的實驗方案

        2 鎖機制的對比實驗

        為了對比幾種典型鎖機制對多核并發(fā)計算性能的影響,筆者設計了一組實驗,在多核多線程場景下,分別采用不同的鎖機制訪問公共資源,測量相應的性能數(shù)據(jù)。

        在實驗中,公共資源是一個環(huán)形隊列,該隊列的每一個元素都指向一個固定大小的緩沖區(qū),該緩沖區(qū)存放待處理的數(shù)據(jù)。每個核上綁定一個線程,該線程需要從環(huán)形隊列的隊頭取出緩沖區(qū)的數(shù)據(jù)進行處理,并將處理完畢之后的緩沖區(qū)放回環(huán)形隊列的尾部。

        2.1 基于悲觀鎖的方案

        悲觀鎖是一種持有保守態(tài)度的鎖,每次操作都會對臨界區(qū)做上鎖操作,而得不到鎖的線程就會處于等待狀態(tài)直到它得到鎖。在線程越多的情況下,發(fā)生鎖競爭的可能性也越大。

        圖4:一秒鐘內入隊出隊次數(shù)統(tǒng)計

        在該實驗方案中,多個線程綁定在不同的核上,每個核都使用自旋鎖來競爭公共的環(huán)形隊列。入隊出隊操作都要加鎖操作。其示意圖如圖1所示。

        2.2 基于CAS操作的方案

        基于CAS 操作的實驗方案中,多個線程并發(fā)執(zhí)行出隊操作時,同時嘗試修改head 值,操作成功的線程獲得了隊頭元素,失敗的線程則重新嘗試。入隊操作也是采用一樣的方式并發(fā)修改tail 值。其示意圖如圖2所示。

        2.3 基于無鎖的方案

        無論采用悲觀鎖還是樂觀鎖,多個線程并發(fā)操作時,都會存在沖突的情況。作為對比,在基于無鎖機制的方案中,每個線程都獨立擁有一個環(huán)形隊列。這樣,每個線程都能完全并行的執(zhí)行入隊出隊操作,線程之間不存在鎖沖突。其示意圖如圖3所示。

        3 實驗數(shù)據(jù)

        筆者在AMD Ryzen 5 4600H CPU 上構建了多線程測試程序,每個線程綁定一個核,測試程序中使用延時模仿業(yè)務流程處理。其主流程偽碼如下:

        針對自旋悲觀鎖實現(xiàn),基于CAS 操作的實現(xiàn),以及基于無鎖機制的實現(xiàn),分別使用1~6 個線程測出了一組對比數(shù)據(jù)。

        3.1 性能比較數(shù)據(jù)

        測試程序在一秒鐘時間內入隊出隊次數(shù)統(tǒng)計如圖4所示。

        由圖4 中可見,隨著核數(shù)的增加,悲觀鎖機制入隊出隊次數(shù)逐漸增加,后由于沖突的增大,其性能反而降低。CAS 機制的入隊出隊性能也經(jīng)歷了從低到高再到低的過程。無鎖機制隨著核數(shù)增加,其性能基本呈現(xiàn)線性增長。

        3.2 耗時比較數(shù)據(jù)

        測試程序統(tǒng)計了在一秒鐘時間內,入隊操作操作消耗的平均cycle 數(shù),其結果如圖5所示。

        由圖5 中可見,隨著核數(shù)的增加,基于悲觀鎖的機制消耗的平均cycle 數(shù)逐漸增加?;贑AS 的機制消耗的平均cycle 數(shù)也逐漸增加,不過比悲觀鎖要好。而無鎖的機制隨著核數(shù)增加,其消耗的cycle 數(shù)基本保持穩(wěn)定。

        4 結語

        從實驗數(shù)據(jù)可以看出,無鎖機制性能表現(xiàn)最好,悲觀鎖的性能表現(xiàn)最差,而基于CAS 的樂觀鎖表現(xiàn)居中。因此,為了減少鎖對性能影響,實際業(yè)務中一般存在下面幾種鎖優(yōu)化手段:

        (1)減少鎖的粒度;

        (2)合理選擇鎖的類型;

        (3)盡量選擇免鎖或無鎖算法。

        鎖的存在對并行程序性能有較大的影響,只有根據(jù)具體的場合,合理選擇相應類型的鎖機制,才能把對性能的影響降低到最低。

        猜你喜歡
        機制
        構建“不敢腐、不能腐、不想腐”機制的思考
        自制力是一種很好的篩選機制
        文苑(2018年21期)2018-11-09 01:23:06
        “三項機制”為追趕超越蓄力
        當代陜西(2018年9期)2018-08-29 01:21:00
        丹鳳“四個強化”從嚴落實“三項機制”
        當代陜西(2017年12期)2018-01-19 01:42:33
        保留和突破:TPP協(xié)定ISDS機制中的平衡
        定向培養(yǎng) 還需完善安置機制
        破除舊機制要分步推進
        氫氣對缺血再灌注損傷保護的可能機制
        注重機制的相互配合
        打基礎 抓機制 顯成效
        中國火炬(2014年4期)2014-07-24 14:22:19
        亚洲日韩精品A∨片无码加勒比| 曰本女人与公拘交酡| 亚洲精品中字在线观看| 亚洲av综合一区二区在线观看| 午夜性色一区二区三区不卡视频 | 内地老熟女老少配视频| 久久久久亚洲av无码尤物| 乱子伦av无码中文字幕| 国产毛片一区二区三区| 一区二区三区日韩蜜桃| 大地资源在线影视播放| 日本老熟欧美老熟妇| 91精品国产综合久久青草| av免费网站在线免费观看| 91国产精品自拍在线观看| 成年女人a毛片免费视频| 无码中文字幕在线DVD| 国产毛片一区二区日韩| 变态另类人妖一区二区三区 | 国产精品成人亚洲一区| 精品国产午夜理论片不卡| 免费现黄频在线观看国产| 亚洲a∨好看av高清在线观看| 日韩少妇人妻精品中文字幕| 亚洲性无码一区二区三区| 亚洲天堂99| 极品少妇一区二区三区四区| 国产成人久久精品一区二区三区| 国产综合无码一区二区色蜜蜜| 免费看欧美日韩一区二区三区| 亚洲香蕉av一区二区蜜桃| 久久精品亚州中文字幕| 久久久久国产一区二区| 久久精品性无码一区二区爱爱| 国产在线一区二区三区不卡| 老鲁夜夜老鲁| 亚洲成av人片在线观看无码| 国产高潮精品久久AV无码| 高清国产精品一区二区| 丰满熟妇人妻av无码区| 亚洲成成品网站源码中国有限公司|