真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux多核并行編程關(guān)鍵技術(shù)是什么-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“Linux多核并行編程關(guān)鍵技術(shù)是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Linux多核并行編程關(guān)鍵技術(shù)是什么”吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、延邊朝鮮族網(wǎng)站維護(hù)、網(wǎng)站推廣。

多核并行編程的背景

  在摩爾定律失效之前,提升處理器性能通過主頻提升、硬件超線程等技術(shù)就能滿足應(yīng)用需要。隨著主頻提升慢慢接近撞上光速這道墻,摩爾定律開始逐漸失效,多核集成為處理器性能提升的主流手段?,F(xiàn)在市面上已經(jīng)很難看到單核的處理器,就是這一發(fā)展趨勢的佐證。要充分發(fā)揮多核豐富的計(jì)算資源優(yōu)勢,多核下的并行編程就不可避免,Linux kernel就是一典型的多核并行編程場景。但多核下的并行編程卻挑戰(zhàn)多多。

  多核并行編程的挑戰(zhàn)

  目前主流的計(jì)算機(jī)都是馮諾依曼架構(gòu),即共享內(nèi)存的計(jì)算模型,這種過程計(jì)算模型對并行計(jì)算并不友好。下圖是一種典型的計(jì)算機(jī)硬件體系架構(gòu)。

Linux多核并行編程關(guān)鍵技術(shù)是什么

  這種架構(gòu)中,有如下設(shè)計(jì)特點(diǎn):

  ·多個CPU核改善處理器的計(jì)算處理能力;

  ·多級cache改善CPU訪問主存的效率;

  ·各個CPU都有本地內(nèi)存(NUMA(非一致性內(nèi)存訪問)),進(jìn)一步改善CPU訪問主存的效率;

  ·store buffer模塊改善cache write由于應(yīng)答延遲而造成的寫停頓問題;

  ·invalidate queue模塊改善使無效應(yīng)答的時(shí)延,把使無效命令放入queue后就立即發(fā)送應(yīng)答;

  外設(shè)DMA支持直接訪問主存,改善CPU使用效率;

  這些硬件體系設(shè)計(jì)特點(diǎn)也引入很多問題,大的問題就是cache一致性問題和亂序執(zhí)行問題。

  cache一致性問題由cache一致性協(xié)議MESI解決,MESI由硬件保證,對軟件來說是透明的。MESI協(xié)議保證所有CPU對單個cache line中單個變量修改的順序保持一致,但不保證不同變量的修改在所有CPU上看到的是相同順序。這就造成了亂序。不僅如此,亂序的原因還有很多:

  ·store buffer引起的延遲處理,會造成亂序;

  ·invalidate queue引起的延遲處理,會造成亂序;

  ·編譯優(yōu)化,會造成亂序;

  ·分支預(yù)測、多流水線等CPU硬件優(yōu)化技術(shù),會造成亂序;

  ·外設(shè)DMA,會造成數(shù)據(jù)亂序;

  這種情況造成,就連簡單的++運(yùn)算操作的原子性都無法保證。這些問題必須采用多核并行編程新的技術(shù)手段來解決。

  多核并行編程關(guān)鍵技術(shù)

  鎖技術(shù)

  Linux kernel提供了多種鎖機(jī)制,如自旋鎖、信號量、互斥量、讀寫鎖、順序鎖等。各種鎖的簡單比較如下,具體實(shí)現(xiàn)和使用細(xì)節(jié)這里就不展開了,可以參考《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》等書的相關(guān)章節(jié)。

  ·自旋鎖,不休眠,無進(jìn)程上下文切換開銷,可以用在中斷上下文和臨界區(qū)小的場合;

  ·信號量,會休眠,支持同時(shí)多個并發(fā)體進(jìn)入臨界區(qū),可以用在可能休眠或者長的臨界區(qū)的場合;

  ·互斥量,類似與信號量,但只支持同時(shí)只有一個并發(fā)體進(jìn)入臨界區(qū);

  ·讀寫鎖,支持讀并發(fā),寫寫/讀寫間互斥,讀會延遲寫,對讀友好,適用讀側(cè)重場合;

  ·順序鎖,支持讀并發(fā),寫寫/讀寫間互斥,寫會延遲讀,對寫友好,適用寫側(cè)重場合;

  鎖技術(shù)雖然能有效地提供并行執(zhí)行下的競態(tài)保護(hù),但鎖的并行可擴(kuò)展性很差,無法充分發(fā)揮多核的性能優(yōu)勢。鎖的粒度太粗會限制擴(kuò)展性,粒度太細(xì)會導(dǎo)致巨大的系統(tǒng)開銷,而且設(shè)計(jì)難度大,容易造成死鎖。除了并發(fā)可擴(kuò)展性差和死鎖外,鎖還會引入很多其他問題,如鎖驚群、活鎖、饑餓、不公平鎖、優(yōu)先級反轉(zhuǎn)等。不過也有一些技術(shù)手段或指導(dǎo)原則能解決或減輕這些問題的風(fēng)險(xiǎn)。

  ·按統(tǒng)一的順序使用鎖(鎖的層次),解決死鎖問題;

  ·指數(shù)后退,解決活鎖/饑餓問題;

  ·范圍鎖(樹狀鎖),解決鎖驚群問題;

  ·優(yōu)先級繼承,解決優(yōu)先級反轉(zhuǎn)問題 ;

  原子技術(shù)

  原子技術(shù)主要是解決cache不一致性和亂序執(zhí)行對原子訪問的破壞問題。主要的原子原語有:

  ACCESS_ONECE():只限制編譯器對內(nèi)存訪問的優(yōu)化;

  barrier():只限制編譯器的亂序優(yōu)化;

  smb_wmb():寫內(nèi)存屏障,刷新store buffer,同時(shí)限制編譯器和CPU的亂序優(yōu)化;

  smb_rmb():讀內(nèi)存屏障,刷新invalidate queue,同時(shí)限制編譯器和CPU的亂序優(yōu)化;

  smb_mb():讀寫內(nèi)存屏障,同時(shí)刷新store buffer和invalidate queue,同時(shí)限制編譯器和CPU的亂序優(yōu)化;

  atomic_inc()/atomic_read()等:整型原子操作;

  多提一句的是,atomic_inc()原語為了保證原子性,需要對cache進(jìn)行刷新,而緩存行在多核體系下傳播相當(dāng)耗時(shí),其多核下的并行可擴(kuò)展性差。

  無鎖技術(shù)

  上一小節(jié)中所提到的原子技術(shù),是無鎖技術(shù)中的一種,除此之外,無鎖技術(shù)還包括RCU、Hazard pointer等。值得一提的是,這些無鎖技術(shù)都基于內(nèi)存屏障實(shí)現(xiàn)的。

  Hazard pointer主要用于對象的生命周期管理,類似引用計(jì)數(shù),但比引用計(jì)數(shù)有更好的并行可擴(kuò)展性;

  RCU適用的場景很多,其可以替代:讀寫鎖、引用計(jì)數(shù)、垃圾回收器、等待事物結(jié)束等,而且有更好的并行擴(kuò)展性。但RCU也有一些不適用的場景,如寫側(cè)重;臨界區(qū)長;臨界區(qū)內(nèi)休眠等場景。

  不過,所有的無鎖原語也只能解決讀端的并行可擴(kuò)展性問題,寫端的并行可擴(kuò)展性只能通過數(shù)據(jù)分割技術(shù)來解決。

  數(shù)據(jù)分割技術(shù)

  分割數(shù)據(jù)結(jié)構(gòu),減少共享數(shù)據(jù),是解決并行可擴(kuò)展性的根本辦法。對分割友好(即并行友好)的數(shù)據(jù)結(jié)構(gòu)有:

  ·數(shù)組

  ·哈希表

  ·基樹(Radix Tree)/稀疏數(shù)組

  ·跳躍列表(skip list)

  使用這些便于分割的數(shù)據(jù)結(jié)構(gòu),有利于我們通過數(shù)據(jù)分割來改善并行可擴(kuò)展性。

  除了使用合適的數(shù)據(jù)結(jié)構(gòu)外,合理的分割指導(dǎo)規(guī)則也很重要:

  ·讀寫分割:以讀為主的數(shù)據(jù)與以寫為主的數(shù)據(jù)分開;

  ·路徑分割:按獨(dú)立的代碼執(zhí)行路徑來分割數(shù)據(jù);

  ·專項(xiàng)分割:把經(jīng)常更新的數(shù)據(jù)綁定到指定的CPU/線程中;

  ·所有權(quán)分割:按CPU/線程個數(shù)對數(shù)據(jù)結(jié)構(gòu)進(jìn)行分割,把數(shù)據(jù)分割到per-cpu/per-thread中;

  4種分割規(guī)則中,所有權(quán)分割是分割最徹底的。

到此,相信大家對“Linux多核并行編程關(guān)鍵技術(shù)是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站欄目:Linux多核并行編程關(guān)鍵技術(shù)是什么-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://weahome.cn/article/ddggji.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部