![并行計算機的同步與通信_第1頁](http://file4.renrendoc.com/view12/M01/07/1C/wKhkGWYyp4yAUKZOAADPENY3zE4348.jpg)
![并行計算機的同步與通信_第2頁](http://file4.renrendoc.com/view12/M01/07/1C/wKhkGWYyp4yAUKZOAADPENY3zE43482.jpg)
![并行計算機的同步與通信_第3頁](http://file4.renrendoc.com/view12/M01/07/1C/wKhkGWYyp4yAUKZOAADPENY3zE43483.jpg)
![并行計算機的同步與通信_第4頁](http://file4.renrendoc.com/view12/M01/07/1C/wKhkGWYyp4yAUKZOAADPENY3zE43484.jpg)
![并行計算機的同步與通信_第5頁](http://file4.renrendoc.com/view12/M01/07/1C/wKhkGWYyp4yAUKZOAADPENY3zE43485.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第6章并行計算機的同步與
通信
計算機系統(tǒng)結(jié)構(gòu)
胡越明
計算機系
Agenda
■6.1并行計算機系統(tǒng)的通信
■6.2Cache與存儲器數(shù)據(jù)一致性
■6.3并行計算機的同步
■6.4并行計算機程序設(shè)計
上再文囪尤孝
6.1并行計算機系統(tǒng)的通信
■并行計算機對程序的要求
□代碼的可重入
□并行線程之間的競態(tài)現(xiàn)象
■線程之間對共享變量的不同的讀-寫和寫-寫訪問順序?qū)е?/p>
不同的程序執(zhí)行結(jié)果
■源自線程間的數(shù)據(jù)相關(guān)性
■并行計算機的通信方式
□共享存儲器
□互連網(wǎng)絡(luò)的消息傳遞
上再文囪尤孝
I共享存儲器通信
■共享變量
□最簡單的通信方式
□沒有同步功能
■信號(signal)
□一個二進(jìn)制變量
□可以表示條件、狀態(tài)、鎖和其它同步信息
□不能傳遞數(shù)據(jù)內(nèi)容
■信箱
:固定格式的通信結(jié)構(gòu)
□通常包含一個標(biāo)志位
■在發(fā)送方和接收方之間起到同步的作用
□尋址和管理比較簡單,不夠靈活
-消息
□具有靈活格式的通信單位
上再文囪尤孝
I共享存儲器通信
■線程同步
□給線程執(zhí)行順序施加約束的機制
□控制線程執(zhí)行的相對順序
□建立在互斥機制的基礎(chǔ)上
■互斥機制
□使得一次只有一個線程對共享變量進(jìn)行訪問
□以保證每個線程對于共享變量訪問的完整性
■常見的互斥機制
□鎖
□信號量
□臨界區(qū)
上再文囪尤孝
I共享存儲器通信
■鎖
□一種互斥變量
□一次只能被一個線程獲得
■信號量
□通過PV操作在線程間傳遞同步信息
■原子操作
□P操作將一個變量減1
■減后的變量小于0時線程被阻塞
□V操作將一個變量加1
■加后的變量大于或等于0時釋放一個線程
上再文囪尤孝
I共享存儲器通信
■臨界區(qū)
□短小的、不能被中斷的程序段
□進(jìn)入的線程數(shù)量是有限制的
□通常只允許一個線程進(jìn)入臨界區(qū)
□可以采用鎖機制來實現(xiàn)
上再文囪尤孝
I鎖
■兩個基本的原子操作
□Acquire
■原子地等待鎖的狀態(tài)變成打開的狀態(tài)
■將打開的鎖狀態(tài)變成關(guān)閉的狀態(tài)
□這時該線程獲得了鎖
□Release
■原子地將鎖的狀態(tài)從關(guān)閉狀態(tài)變成打開的狀態(tài)
□這時線程釋放了鎖
上再文囪尤孝
鎖的類型
■互斥量
□用PV操作上鎖和解鎖
□有阻塞
□可以加上時間屬性
■遞歸鎖
□可以遞歸地獲得的鎖
□用于遞歸程序
■讀寫鎖
□多讀單寫鎖
■限制寫操作只能由一個線程執(zhí)行
□用于對共享變量的讀寫操作
■自旋鎖
□非阻塞的鎖
□用于多處理機系統(tǒng)和多核系統(tǒng)
上再文囪尤孝
阻塞型鎖機制的問題
■優(yōu)先級的顛倒lorityinversion
□當(dāng)一個低優(yōu)先級的線程占用了一個鎖之后,需要同
一個鎖的高優(yōu)先級線程就只能等待。
■護(hù)航Convoying
□當(dāng)一個線程擁有一個鎖而被切換出去時其他的線程
如果需要同一個鎖的話都不能運行下去
□其他線程都圍著擁有鎖的線程團團轉(zhuǎn)
■死鎖adlock
□鎖的擁有和依賴關(guān)系形成一個環(huán)
上再文囪尤孝
死鎖及其解決
■死鎖的原因
□對資源(鎖)的訪問是獨占的
□線程在已經(jīng)持有一個資源時繼續(xù)請求其他資源
□所有線程都不放棄已經(jīng)持有的資源
□線程對資源的請求形成一個環(huán)
■解決方法
□復(fù)制需要獨占訪問的資源
□按照一定的順序獲取資源
■有序嵌套
□無法獲取其他資源時放棄已持有的資源
□調(diào)用構(gòu)件時避免使用鎖
上再文囪尤孝
信號
■硬件信號
□一種黏滯性的邏輯電平
■一旦被設(shè)置就一直保持不變
■直到被清除
□如訪存完成、cache失效、時鐘信號
□可以表示為一個寄存器變量
■對于信號變量的讀操作清除這個信號
■軟件信號
□表示為共享變量
□如進(jìn)程中止信號
上再文囪尤孝
I互連網(wǎng)絡(luò)的消息傳遞通信方式
■消息
□結(jié)點間通信的基本邏輯單位
□消息頭
■目標(biāo)結(jié)點號、源結(jié)點號、消息類型和消息長度等
□消息體
■通信數(shù)據(jù)
<__________________消自買_________________L________滔自休______>消自昆
?1閂心、°?1口心、卜?in心、汽i
目標(biāo)結(jié)點號序號消息類型消息長度數(shù)據(jù)校驗和
上再文囪尤孝
I互連網(wǎng)絡(luò)的消息傳遞通信方式
■數(shù)據(jù)包?存儲轉(zhuǎn)發(fā)
□數(shù)據(jù)傳輸?shù)奈锢韱挝?store-and-forward
■尋徑信息?電路交換
■序號?circuitswitching
■數(shù)據(jù)內(nèi)容?虛擬切換
■校驗位?virtualcut-through
■協(xié)議號?蟲孔尋徑
■時間戳?wormhole
上再文囪尤孝
I互連網(wǎng)絡(luò)的消息傳遞通信方式
存儲轉(zhuǎn)發(fā)store?and?forward
■問題:延遲大,緩存多
上再文囪尤孝
I互連網(wǎng)絡(luò)的消息傳遞通信方式
電路交換circuitswitching
問題:沖突多,利用率低
上再文囪尤孝
I互連網(wǎng)絡(luò)的消息傳遞通信方式
虛擬切換virtualcut-through
上再文囪尤孝
I互連網(wǎng)絡(luò)的消息傳遞通信方式
蟲孔尋徑wormhole
問題:死鎖和活鎖
I互連網(wǎng)絡(luò)的消息傳遞通信方式
■蟲孔尋徑與存儲轉(zhuǎn)發(fā)的比較
Ni
N2
N4
結(jié)點"
日寸向
序列-(a)存儲轉(zhuǎn)發(fā):
結(jié)點
-寸奇
序列(b)蟲孑L尋徑13I
上再文EH孝
I互連網(wǎng)絡(luò)的消息傳遞通信方式
衡量指標(biāo)
□通信帶寬
□單位時間能夠傳輸?shù)臄?shù)據(jù)量
□取決于處理器的通信處理吞吐率、存儲器的吞吐率和互連網(wǎng)絡(luò)的傳
輸帶寬
■通信延遲
□發(fā)送的時間開銷
□信號傳輸時間
□傳輸持續(xù)時間
□接收方的時間開銷
■通信延遲隱藏能力
□通信時間與計算時間或者其他通信時間的重疊程度
上再文囪尤孝
I例6-2
■1個計算任務(wù)在單個核的計算機上運行的啟動時間為1
秒,運算時間為10秒,數(shù)據(jù)結(jié)果匯總的時間為1秒。
如果將該計算任務(wù)放在多核處理器的計算機上運行,
將運算部分分解成多個線程并行執(zhí)行。
■(D假如任務(wù)的啟動和數(shù)據(jù)匯總操作不能并行執(zhí)行,
運算部分可以進(jìn)行任意的任務(wù)分解,任務(wù)之間的通信
量可以忽略,也不考慮任務(wù)分解后存儲系統(tǒng)對性能的
影響。問在處理器核的數(shù)量分別為2、4、8、16時的
任務(wù)執(zhí)行時間和加速比。
■(2)上述情況下,假如每兩個處理器核之間的通信
時間為0.1秒,每對處理器核的通信串行進(jìn)行,問在
核的數(shù)量分別為2、4、8、16時的任務(wù)執(zhí)行時間和加
I解:(1)
任務(wù)在單個核的計算機上運行時間為12秒;
■在雙核計算機上的運行時間為1+10/2+1=
7秒,加速比為12/7=1.71;
■在4核計算機上的運行時間為1+10/4+1=
4.5秒,加速比為12/4.5=2.67;
■在8核計算機上的運行時間為1+10/8+1=
3.25秒,力口速比為12/3.25=3.69;
■在16核計算機上的運行時間為1+10/16+1
=2.63秒,力口速比為12/2.63=4.56。
上再文囪尤孝
I解:(2)
■任務(wù)在單個核的計算機上沒有通信時間,運行時間為12秒;
■在雙核計算機上的通信時間為1x0.1,運行時間為
1+10/2+1+0.1=7.1秒,加速比為12/7.1=1.69;
■在4核計算機上的通信時間為6x0.1=0.6,運行時間為
1+10/4+1+0.6=5.W,加速比為12/5.1=2.35;
■在8核計算機上的通信時間為28x0.1=2.8,運行時間為
1+10/8+1+2.8=6.05秒,加速比為12/6.05=1.98;
■在16核計算機上的通信時間為120x0.1=12,運行時間為
1+10/16+1+12=14.63秒,力口速比為12/14.63=0.82,即比單核
計算機的計算時間更長。
上再文囪尤孝
I解
5
4.5
4
3.5
3
--無通信開銷
2.5
一有通信開銷
2__________________________■、__________________________________________________
1.5
1____________、y7
0.5
011t1
單核2核4核8核16核
加速比單核2核4核8核16核
無通信開銷11.712.673.694.56
有通信開銷11.692.351.980.82
上再文aa孝
習(xí)題
■6
6.2Cache與存儲器數(shù)據(jù)一致性
?共享存儲器多處理機系統(tǒng)的問題
□訪存沖突與數(shù)據(jù)一致性
□數(shù)據(jù)多個副本之間的相同性
CacheCacheMemorv■r
contentscontentsforcontentsfor
TimeEventforCPUACPUBlocationX
01
1CPUAreadsX11
2CPUBreadsX111
3CPUAstores0intoX010
上再文囪尤孝
數(shù)據(jù)一致性的實現(xiàn)
■軟件方法
□編譯分析
□避免cache共享數(shù)據(jù)
■總線監(jiān)測
□各cache設(shè)置監(jiān)測部件
■MESI協(xié)議
■目錄表法
□全映射
□有限目錄
□鏈?zhǔn)侥夸?/p>
■SCI
上再文囪尤孝
總線監(jiān)測
■所有cache不斷監(jiān)測總線上的每一個地址
□總線使得寫操作變成串行的
□Cache失效時需要確定數(shù)據(jù)塊的位置
■writeinvalidateprotocol
□invalidatesothercopiesonawrite.
■writeupdateorwritebroadcastprotocol
□updateallthecachedcopiesofadataitemwhenitiswritten
上再文aa孝
總線監(jiān)測
■寫無效方式
□多次寫操作時只需一次invalidate
□對于整個cache數(shù)據(jù)塊進(jìn)行
■寫更新方式
□對于數(shù)據(jù)塊中的個別字進(jìn)行
□讀操作的命中率高
□所有寫操作通過總線寫入所以相關(guān)的其他cache中
■寫操作的開銷較大
上再文囪尤孝
總線監(jiān)測
■每個處理器的cache中設(shè)置一個監(jiān)測部件
□監(jiān)測總線上的寫操作
□根據(jù)監(jiān)測的情況改變本地cache塊的狀態(tài)
■無效、修改、獨占、共享
■監(jiān)測條件
□主存中有一個單元被其他處理器所修改
□而這個單元在本地cache中也有一個副本
■對于寫更新方法
□擁有數(shù)據(jù)最新版本的cache需向其他cache提供數(shù)據(jù)塊內(nèi)容
□阻止其他處理器從共享存儲器的讀操作
上再文囪尤孝
MESJ協(xié)議
SHR
RH:讀命中
RMS:讀失效,共享
RME:讀失效,獨占
WH:寫命中
WM:寫失效
SHR:讀時檢測命中
SHW:寫時檢測命中或
旨在修改的讀
①濁行復(fù)制回來
RH
Q無效事務(wù)
十旨在修改的讀WH
J填充cache行
上再文囪尤孝
I例6.3
■設(shè)單總線連接的兩個CPU中采用MESI協(xié)議進(jìn)行一致性操作,初始
時某cache塊都在無效狀態(tài),然后兩個CPU對該存儲塊分別進(jìn)行如
下操作:
■CPUA讀,CPUB讀,CPUA寫,CPUB讀,CPUB寫
■試寫出每次訪問后兩個塊的狀態(tài)變化情況。
事件狀態(tài)A狀態(tài)B說明
初始無效無效(I)數(shù)據(jù)未裝入
CPUA讀獨占無效(I)讀操作cache失效,裝入
CPUB讀共享共享(S)讀操作cache失效,裝入后共享
CPUA寫修改無效(I)寫操作命中
CPUB讀共享共享(S)讀操作失效,裝入
CPUB寫無效修改(M)寫操作命中
I例6.4
■在一個共享L2cache的雙核處理器芯片中,兩
個L1cache通過片內(nèi)總線與L2cache連接,并
采用MESI協(xié)議保持一致性。假設(shè)L1cache各
有4個塊,采用全相聯(lián)地址映像和LRU替換策
略,每個塊的初始狀態(tài)都是無效的。在以下讀
訪問塊地址序列下,試畫出兩個L1cache中塊
的分配情況,并標(biāo)出每個塊的狀態(tài)。
■A核:1,0,6,7,8,0,1
■B核:0,2,1,8,9,2,0
A核塊地址
1067801
1E1E1E1E8S8S8S
A核LIcacheI0S0S0S0S0S0S
II6E6E6E6E1E
III7S7S7S7S
操作裝入裝入裝入裝入替換命中替換
B核塊地址0278920
0E0S0S0S9E9E9E
B核LIcacheI2E2E2E2E2E2E
II7E7S7S7S0S
III8E8S8S8S
操作裝入裝入裝入裝入替換命中替換
上再文囪尤孝
目錄表法
■全映射
□每個快表目錄項包含N個指示位段
■N為系統(tǒng)中處理器的個數(shù)
□指示位段構(gòu)成一個位向量
■0表示相應(yīng)的處理器cache沒有該塊
■1表示有該塊
■有限目錄
□每個快表目錄項包含固定數(shù)量的指示位段
□指示位段的位數(shù)與處理器數(shù)量無關(guān)
■鏈?zhǔn)侥夸?/p>
上再文囪尤孝
I例6?5
■設(shè)4個CPU的并行計算機中采用全映射的目錄表法進(jìn)行一致性操作,
初始時某cache塊都在無效狀態(tài),然后4個CPU對該存儲塊分別進(jìn)
行如下操作:
■CPU0讀,CPU1讀,CPU2讀,CPU1替換,CPUO寫
-試寫出每次訪問后該塊的有效指示位段的變化情況,假設(shè)一致性
操作采用寫無效策略。
事件指示狀態(tài)位段
初始0000
CPU0讀0001
CPU1讀0011
CPU2讀0111
CPU1替換0101
CPUO寫0001
上再文囪尤孝
I例6.6
■在一個由2個CPU構(gòu)成的并行計算機中采用全
映射的目錄表法進(jìn)行一致性操作。假設(shè)各CPU
的cache都只有4個塊,采用全相聯(lián)地址映像和
LRU替換策略,每個塊的初始狀態(tài)都是無效的。
在以下讀訪問塊地址序列下,試畫出兩個L1
cache中塊的分配情況,并標(biāo)出每個塊的指示
狀態(tài)位段。
■CPUA:1,0,6,7,8,0,1
■CPUB:0,2,7,8,9,2,0
I解
CPUA塊地址
1067801
101101101101811811811
CPUAcache00011011011001001011
0000601601601601101
000000711711711701
操作裝入裝入裝入裝入替換命中替換
CPUB塊地址0278920
010011011011910910910
CPUBcache00210210210210210210
0000710711711711011
000000810811811811
操作裝入裝入裝入裝入替換命中替換
上再文aa孝
目錄表法
■鏈?zhǔn)侥夸?/p>
□將目錄分布到各
個cache頭項中間項中間項尾項
□每個cache的塊
表中只需存放一
個cache指針
□單鏈或雙鏈
□SCI
上再文囪尤孝
數(shù)據(jù)一致性對cache性能的影響
■影響cache性能的因素
□單個處理器cache失效的數(shù)據(jù)傳輸
□數(shù)據(jù)通信引起的傳輸
■導(dǎo)致invalidations和后繼cache失效
■一致性失效
/處理機數(shù)量
/Cache容量
/塊大小
上再文囪尤孝
數(shù)據(jù)一致性對cache性能的影響
一致性失效
■真共享失效truesharingmisses
□由cache一致性操作的通信引起
□對共享數(shù)據(jù)的第一個寫操作引起invalidation
■偽共享失效fa/sesharingmisses
□由每個cache塊只有一個有效位引起
□一個塊中其他數(shù)據(jù)的寫操作引起cache塊讀操作的
失效
□Cache塊是共享的,但是數(shù)據(jù)字并沒有共享
數(shù)據(jù)一致性對cache性能的影響
■一致性失效的例子
□假定數(shù)據(jù)字x1和x2在同一個數(shù)據(jù)塊中
■數(shù)據(jù)塊在P1和P2之間共享
□假定以下事件序列
TimePlP2
1Writexl
2Readx2
3Writexl
4Wntex2
5Readx2
上再文囪尤孝
I存儲器數(shù)據(jù)的一致性
時間一致性(consistency)
□一個寫操作寫入共享存儲器中的數(shù)值什么時候能夠被讀到
■串行一致性
■弱化一致性
■處理機一致性
■松散一致性
上再文囪尤孝
I存儲器數(shù)據(jù)的一致性
串行一致性sequentialconsistency
■處理機P對于存儲單元x的寫操作之后進(jìn)行的讀操作,其
間如果沒有其它處理機對x進(jìn)行寫訪問,則總是返回由P
寫入的數(shù)值。
■在一個處理機P1對于單元X進(jìn)行寫操作之后,另一處理
機P2對于單元X的讀操作只要兩者足夠分離并且沒有其
它對于X的寫操作發(fā)生,就能夠返回P1寫入的數(shù)值。
■對于同一單元的寫操作是順序進(jìn)行的,即兩個處理機對
于相同單元進(jìn)行的寫操作的順序從任何處理機看都相同。
如果數(shù)值1和2依次寫入一個位置,處理機不可能先讀得
2,再讀得1。
I存儲器數(shù)據(jù)的一致性
■弱化一致性weakconsistency
□程序通過同步操作強調(diào)一致性,使得在這些同步點
上數(shù)據(jù)保持一致,而不要求數(shù)據(jù)隨時都是一致的。
■處理機一致性processorconsistency
□每個處理機發(fā)出的寫操作被其它處理機看到的都保
持原順序,但兩個不同處理機的寫操作順序可被其
他處理機以不同的順序看到。
■松散一致性releaseconsistency
□采用acquir一-r一1一as一同步操作使得數(shù)據(jù)保持一
致,從而減少對硬件一致性處理的要求。
SCI
■scalablecoherenceinterface
□IEEE1596-1992
■支持鏈?zhǔn)侥夸洷矸?/p>
□雙向鏈表
■采用雙向鏈路
■采用虛擬切換傳輸方式
-支持大規(guī)模并行系統(tǒng)
□不要求消息按順序提交
□使用64位固定長度地址的分布式存儲器的尋址方案
■高16位用于尋找結(jié)點
■低48位地址指定結(jié)點內(nèi)的存儲器地址
■采用16位差分ECL信號鏈路
□信號時鐘250MHz
□鏈路的數(shù)據(jù)傳輸帶寬為1GB/S
上再文囪尤孝
習(xí)題
■11
■12
■13
■14
6.3并行計算機的同步
■同步機制
□并行系統(tǒng)中保持各并行程序正確運行的控制機制
□建立在通信機制的基礎(chǔ)上
□需要采用的硬件提供的機制來實現(xiàn)
■硬件原語
上再文囪尤孝
硬件原語
■原子交換atomicexchange
□實現(xiàn)鎖
■測試并設(shè)置test?and?set
□實現(xiàn)鎖
■讀取并力口lfetch?and?inc「ement
□實現(xiàn)屏障
■讀取并更新test?and?update
□實現(xiàn)PV操作
上再文囪尤孝
原子交換
■將一個寄存器的數(shù)值與一個存儲器中的數(shù)值進(jìn)
行交換
■難以在并行機中實現(xiàn)
■要求存儲器讀寫操作在一條不可中斷的指令中完成
■硬件不能在讀寫操作之間響應(yīng)中斷
AB
上再文囪尤孝
原子交換
■解決方案
□用兩條指令實現(xiàn)
■鏈接裝載loadlinked
■條件存儲storeconditional
□返回一個數(shù)值
□表示其存儲操作是否成功
■兩條指令按順序執(zhí)行
□如果鏈接裝載指令指定的存儲單元在對應(yīng)的條件存儲指令執(zhí)
行之間被改變,則存儲指令執(zhí)行時失敗。
□如果處理機在這兩條指令之間進(jìn)行了上下文交換,則該條件
存儲指令也將失敗。
上再文囪尤孝
原子交換
原子交換的實現(xiàn)exchR4,0(R1)
try:movR3,R4;mov一一xchang一valu一fromR4toR3
11R2,0(RI);loadlinked
scR3,0(RI);storeconditional
b一qzR3,try;branchstorefail一s
movR4,R2;putloadvalueinR4
宏指令
上再文aa孝
讀隼并加1
try:11R2,0(R1);loadlinked
addiR2,R2,#1;incr一m一nt
scR2,0(RI);stor一conditional
beqzR2,try;branchstor一fails
R2
|+1
R2B
上再文aa孝
I派生原語
轉(zhuǎn)鎖spinlock
處理機用循環(huán)方法試圖得到的鎖
■沒有cache一致性機制時
liR2,#1;loadimmediate
lockit:一xchR2,0(RI);atomic一xchang一
bnezR2,lockit;alr一adylocked?
■有cache一致性機制時
lockit:IwR2Z0(RI);loadoflock
bnezR2,lockit;notavailabl一一spin
liR2,#1;loadlockedvalu一
exchR2,0(RI);swap
bn一zR2,lockit;branchiflockwasn*t0
上再文囪尤孝
I派生原語
采用鏈接裝載/條件存儲實現(xiàn)轉(zhuǎn)鎖
lockit:11R2,0(RI);loadlinked
bn一zR2,lockit;notavailabl一一spin
liR2,#1;lockedvalue
scR2,0(RI);store
b一qzR2,lockit;branchifstorefailes
上再文aa孝
I派生原語
■屏障同步
□強制所有的線程等待
■直到所有的線程都到達(dá)屏障時釋放所有的線程
■用一個計數(shù)器對到達(dá)的線程計數(shù)(Ga加凹階段)
■用一個信號釋放所有的線程(re/ease階段)
□用兩個自旋鎖實現(xiàn)
■一個用于保護(hù)計數(shù)器
■一個用于鎖住線程
I派生原語
屏障同步的實現(xiàn)
lock(count一rlock);/*ensureupdat一atomic
*/
if(count==0)r一1一as一=0;*firstarrivalr一s一tr一1一as一
*/
count=count+1;*countarrivals*/
unlock(counterlock);/*工一1一as一lock*/
if(count==total){/*allarrived*/
count=0;/*r一s一tcount一工*/
工一1一as一=1;*r一1一as一proc一ss一s*/
)
一Is一{*mor一tocom一*/
spin(r一1一as一==1);/*waitforarrivals*
)
上再文aa孝
I派生原語
■問題
□屏障可能循環(huán)使用
□從屏障離開的線程可能再次進(jìn)入屏障
□一個線程可能在另一個線程離開屏障之前又進(jìn)入屏
障
■代碼的bug
I派生原語
■解決方案
□對離開的線程計數(shù)
■不允許線程在其他線程都離開上一個屏障之前又進(jìn)入屏障
□從而又初始化屏障
□傳感反相屏障
-使用線程局部變量
□初始化為1
□交替地等待1和o
release-------------------------1?--------------------為/夭3rH孝
I派生原語
■屏障同步的實現(xiàn)
□傳感反相屏障
local_sense=!Iocal_sense;/*togglelocal_sense*/
lock(counterlock);/*ensureupdateatomic*/
count=count+1;/*countarrivals*/
if(count==total){/*allarrived*/
count=0;/*resetcounter*/
release=local_sense;/*releaseprocesses*/
}"
unlock(counterlock);/*unlock*/
spin(release==local_sense);/*waitforsignal*/
第一個到達(dá)屏障的線程并不改變release的值上再文囪尤孝
同步操作的性務(wù)邑問題
■Contentionforthelock
□Z⑵+1)=n2+2n
-鎖變量訪問的串行化
□大大增加完成同步操作的時間
■解決方案
□增量資源
■或分解資源
■如散列表的分割
□指數(shù)退避exponentialbackoff
■訪問等待時間以指數(shù)增加
■防止活鎖
□隊列鎖
■鎖變量釋放時通知下一個線程
□組合樹
■樹中每個結(jié)點組合k個線程的同步
■將對一個變量的競爭按樹形結(jié)構(gòu)分散
上再文囪尤孝
同步操作的性務(wù)邑問題
■指數(shù)等待
ADDUIR3,R0,#l;R3=initialdelay
lockit:LLR2,O(R1);loadlinked
BNEZR2,lockit;notavailable-spin
DADDUIR2,R2,#1;getlockedvalue
SCR2,O(R1);storeconditional
BNEZR2,gotit;branchifstoresucceeds
DSLLR3,R3,#1;increasedelaybyfactorof2
PAUSER3;delaysbyvalueinR3
Jlockit
gotit:usedataprotectedbylock
同步操作的性務(wù)邑問題
■組合樹
structnode{/*anodeinthecombiningtree*/
intcounterlock;/*lockforthisnode*/
intcount;/*counterforthisnode*/
intparent;/*parentinthetree=0..P-1exceptforroot*/
);
structnodetree[0..P-1];/*thetreeofnodes*/
intlocal_sense;/*privateperprocessor*/
intrelease;/*globalreleaseflag*/
上再文aa孝
同步操作的性務(wù)邑問題
■組合樹
/*functiontoimplementbarrier*/
barrier(intmynode,intlocal_sense){
lock(tree[mynode].counterlock);/*protectcount*/
tree[mynode].count=tree[mynode].count+1;
/*incrementcount*/
if(tree[mynode].count==k){/*allarrivedatmynode*/
if(tree[mynode].parent>=0){
barrier(tree[mynode].parent);/*recursivecall*/
}else{
release=local_sense;
);~
tree[mynode].count=0;/*resetforthenexttime*/
unlock(tree[mynode].counterlock);/*unlock*/
spin(release==local_sense);/*wait*/
);一
/*codeexecutedbyaprocessortojoinbarrier*/
local_sense=!Iocal_sense;
barrier(mynode);
上再文aa孝
I事務(wù)存儲器
■同步機制的硬件解決方案
□非互鎖的機制
□使得系統(tǒng)能夠并行地執(zhí)行原子操作
■事務(wù)
□鎖的作用范圍
□每個事務(wù)由一個線程推測性地執(zhí)行而不請求鎖
□沒有遇到?jīng)_突時提交
■否則事務(wù)將放棄(abort)
■進(jìn)行卷回(rollback)并重新開始
□事務(wù)沒有成功提交之前不會對其它線程產(chǎn)生作用
上再文囪尤孝
I事務(wù)存儲器
■事務(wù)
□由線程中的一組指令構(gòu)成
□串行性
■從其他線程看來不會有不同的執(zhí)行順序
□原子性
■整體提交或者整體放棄
■提交之前對其它線程看不到
上再文囪尤孝
同步與多線程
多線程的程序的問題
■數(shù)據(jù)競爭
□由各線程對共享數(shù)據(jù)讀-寫訪問和寫-寫訪問順序的不確定性
弓起
■同步
□同步機制會帶來的開銷
■線程停頓
□一個鎖條解開使等待這個鎖的線程停頓
■死鎖
□線程的無限期的停頓現(xiàn)象
■偽共享
□①程之間的非真正的數(shù)據(jù)共享而引起的相關(guān)性
上再文囪尤孝
多線程的程序的問題
■數(shù)據(jù)競爭
□數(shù)據(jù)相關(guān)性險象
□以下兩個if語句的表達(dá)式可能都為真嗎?
Pl:A=0;P2:B=0;
A=1;B=1;
LI:if(B==0)L2:if(A==0)..
上再文aa孝
多線程的程序的問題
數(shù)據(jù)競爭之二
線程1線程2
原始代碼t=X;U=X;
X=t+1;x=u+2;
并行情況1t=x;//xis0
u=X;
x=u+2;//xis2
x=t+1;//xis1
并行情況2u=x//xis0
t=X;
x=t+1;//xis1
x=u+2//xis2
并行情況3t=x;//xis0
x=t+1;//xis1
U=X;
x=u+2;//xis3
多線程的程序的問題
■數(shù)據(jù)競爭之三
■if(list->next==NULL)■if(list->next==NULL)
■insert(list->next,nodel)■insert(list->next,node2)
上再文aa孝
數(shù)據(jù)競爭的解決
■變量局部化
□將變量改為線程局部的
□如將全局和分解為部分和
■用臨界區(qū)控制共享變量的訪問
□通過鎖、信號量等實現(xiàn)
□每個共享數(shù)據(jù)用一把鎖
■互斥機制
上再文囪尤孝
同步與多線程
■并行線程與臨界區(qū)I
□訪問共享數(shù)據(jù)的程序段
□在某段時間內(nèi)僅允許一定數(shù)目的線程訪問I",,
的一段代碼I
□大多數(shù)情況下一次只有一個線程能夠進(jìn)入同一個n
臨界區(qū)?
□可采用互斥機制實現(xiàn)?
上再文囪尤孝
同步與多線程
-并行線程與屏障
習(xí)題
■16
■18
■20
■21
■22
6.5并行計算機程序的軟件支持
并行程序的概念
□任務(wù)劃分
□將一個任務(wù)劃分成多個并行子任務(wù)
□使得處理器負(fù)載平衡
-數(shù)據(jù)劃分
□將數(shù)據(jù)對象劃分成多個并行子集
□提高訪存的效率以及cache的命中率
-數(shù)據(jù)流劃分
□根據(jù)數(shù)據(jù)處理的過程劃分
□一個子任務(wù)的輸出是另一個子任務(wù)的輸入
?劃分的目標(biāo)
?負(fù)載平衡
?降低調(diào)度開銷、通信開銷和同步開銷
上再文囪尤孝
并行程序的概念
■任務(wù)task
□應(yīng)用級的計算單位
■單任務(wù)線程
□為每個任務(wù)動態(tài)創(chuàng)建和終止
□創(chuàng)建和終止開銷問題
□大量線程時的開銷
■線程池
□預(yù)先創(chuàng)建的固定數(shù)量的線程
■與處理器數(shù)量匹配
□可完成多個任務(wù)
■應(yīng)用程序中動態(tài)任務(wù)分配和調(diào)度
■線程中任意時刻只能運行一個纖程
上再文囪尤孝
并行程序的概念
■線程化的優(yōu)點
□創(chuàng)建速度較進(jìn)程快
□資源利用率高
□便于數(shù)據(jù)共享
■線程化的缺點
□增加程序設(shè)計的復(fù)雜性
□程序調(diào)試較難
■數(shù)據(jù)競爭、同步、死鎖
上再文囪尤孝
多線程的執(zhí)行
■硬件多線程
□每個線程運行在不同邏輯處理器上
□優(yōu)先級相同
□硬件的通信開銷
□真正的并行執(zhí)行
■軟件多線程
□運行在同一個邏輯處理器上
□OS動態(tài)改變優(yōu)先級
□共享本地存儲器
■通信開銷小
■互斥容易解決
上再文囪尤孝
共享存儲器系統(tǒng)程序設(shè)計例子
8個處理機,單總線連接
sum[Pn]=0;
for(i=8000*Pn;i<8000*(Pn+1);i=i+l)
sum[Pn]=sum[Pn]+A[i];/*sumtheassign一dar一as
half=8;/*8processorsinsingl一-busMIMD
do{
synch();/*waitforcompletionofpartialsums
half=half/2;/*dividinglin一ontwosums
if(Pn<half)sum[Pn]=sum[Pn]+sum[half+Pn];
}while(half〉l);/*一xitwithfinalsuminsum[0]
其中synch()函數(shù)是一個屏障同步函數(shù)。
上再文囪尤孝
分布消息傳遞型系統(tǒng)程序例子
■假設(shè)64個處理機,各處理機具有不同的地址空間。
■sum=O;
■for(i=0;i<1000;i=i+l)/*loopov一r一acharray*
■sum=sum+Al[i];/*sumth一localarrays*
■limit=64;
■half=64;/*64processorsinthisMIMD*
■do{
half=half/2;/*s一ndvs.r一c一iv一dividingline*
■if(Pn>=half&&Pn<limit)s一nd(Pn%ha1f,sum);
■if(Pn<half)sum=sum+r一c一iv一();
■limit=half;/*upp一rlimitofs一nd一rs*
■}whil一(half〉l);/*一xitwithfinalsum*
上再文aa孝
I任務(wù)劃分
■對數(shù)據(jù)進(jìn)行劃分
□使得不同的子任務(wù)對不同的數(shù)據(jù)子集進(jìn)行處理
■對計算過程中的步驟進(jìn)行
□使得每個線程具有不同的程序代碼
■任務(wù)分解的一般方法
□根據(jù)數(shù)據(jù)運算流程圖進(jìn)行
上再文囪尤孝
I例6-8
■對于數(shù)組運算
E=A*(B+C*D);
■其中,A、B、C和D都是具有〃個元素的數(shù)組,
試畫出其數(shù)據(jù)流程圖,指出兩種子任務(wù)劃分方
式。
上再文囪尤孝
I解
■橫向劃分
■縱向劃分
Cn
4
上再文囪尤孝
實現(xiàn)并行程序設(shè)計的方法
■庫函數(shù)
□在串行程序的標(biāo)準(zhǔn)庫的基礎(chǔ)上增加支持并行操作的函數(shù)
□如MPI的消息傳遞庫和POSIX的Pthread多線程庫
□容易實現(xiàn)(不需要改變編譯程序)
□程序中的并行性沒有經(jīng)過編譯程序的檢查、分析、優(yōu)化
■新的語言構(gòu)造
□程序設(shè)計語言中增加新的構(gòu)造語句
□如Fortran90中增力口了向量運算語句
□編譯程序可以進(jìn)行并行性檢查和優(yōu)化
□增加了編譯程序的復(fù)雜性。
■編譯指導(dǎo)
□在原有的語言中增加表達(dá)并行運算的編譯指導(dǎo)語句
□并行編譯程序跟據(jù)指導(dǎo)語句將代碼轉(zhuǎn)換成在并行代碼
□如OpenMP
□介于上述兩種方法之間
上再文囪尤孝
I線程操作函數(shù)
■線程的創(chuàng)建和消除
□分叉和匯集(fork-join)機制
■線程的啟動和終止
■線程同步機制的建立和刪除
■線程通信機制的建立和刪除
□如MPI
上再文囪尤孝
多線程并行程序設(shè)計方法
■將獨立的循環(huán)程序變成多線程
□并行執(zhí)行的線程可能改變相對執(zhí)行的進(jìn)度或順序
□要求
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 時尚產(chǎn)業(yè)辦公空間裝修協(xié)議
- 游泳池裝修終止合同
- 化妝品店內(nèi)部裝修合同細(xì)則
- 海上夜游航線乘客協(xié)議
- 智能園區(qū)砂石運輸服務(wù)合同
- 潤滑油國內(nèi)運輸協(xié)議
- 2025年度安防設(shè)備展覽會專業(yè)展臺搭建合同
- 醫(yī)療器械配送服務(wù)合同
- 物業(yè)小區(qū)翻新服務(wù)方案
- 外架工勞務(wù)合同范例
- (康德一診)重慶市2025屆高三高三第一次聯(lián)合診斷檢測 英語試卷(含答案詳解)
- 2025年福建泉州文旅集團招聘24人高頻重點提升(共500題)附帶答案詳解
- 建筑行業(yè)砂石物資運輸方案
- 腫瘤全程管理
- 融資報告范文模板
- 桃李面包盈利能力探析案例11000字
- GB/Z 30966.71-2024風(fēng)能發(fā)電系統(tǒng)風(fēng)力發(fā)電場監(jiān)控系統(tǒng)通信第71部分:配置描述語言
- 污泥處置合作合同模板
- 腦梗死的護(hù)理查房
- 2025高考數(shù)學(xué)專項復(fù)習(xí):概率與統(tǒng)計的綜合應(yīng)用(十八大題型)含答案
- 2024-2030年中國紫蘇市場深度局勢分析及未來5發(fā)展趨勢報告
評論
0/150
提交評論