淺談并行編程中任務(wù)分解模式

ID:31004628

大小:105.50 KB

頁數(shù):6頁

時間:2019-01-05

淺談并行編程中任務(wù)分解模式_第1頁
淺談并行編程中任務(wù)分解模式_第2頁
淺談并行編程中任務(wù)分解模式_第3頁
淺談并行編程中任務(wù)分解模式_第4頁
淺談并行編程中任務(wù)分解模式_第5頁
資源描述:

《淺談并行編程中任務(wù)分解模式》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、淺談并行編程中的任務(wù)分解模式并行編程使用線程來使得多個操作能夠同時運行。并行編程主要包括應(yīng)用程序中線程設(shè)計,開發(fā)和部署以及線程間相互協(xié)調(diào)和各自的操作。在下文中我們將討論怎樣分割適合線程化大小的編程任務(wù)來多任務(wù)化一個應(yīng)用程序。1.設(shè)計線程?????不熟悉并行編程的開發(fā)者通常對例如面向?qū)ο蟮膫鹘y(tǒng)的編程模式感到非常適應(yīng)。在傳統(tǒng)的編程模式下,程序以預(yù)先定義的起點開始運行,譬如main函數(shù),然后接連地做完一系列任務(wù)。如果程序依賴用戶交互,主要的工作代碼通常被封裝在一個處理用戶事件的循環(huán)里。?????從一個約定事件開始,譬如點擊按鈕,程序運行一段已經(jīng)制定的順序行為,最終以等待用戶下個動

2、作結(jié)束。?????當(dāng)設(shè)計這樣的程序時,程序員喜歡一個相對簡單的編程模式因為在任意一段給定的時間內(nèi)只有一個事件發(fā)生。如果程序任務(wù)必須按某種方式順序運行,程序員必須在這些事件上特意安排順序。在這個過程的任一時刻,程序運行一步接著下一步,最終基于預(yù)先確定的參數(shù)到達(dá)一個預(yù)見的結(jié)果。?????從這種線性的模式到并行編程模式,程序設(shè)計者必須重新思考程序的過程流。相比順序執(zhí)行序列限制,程序員應(yīng)該識別出那些能被并行化的行為。?????要這樣做,他們必須把程序看作一組相互間有依賴關(guān)系的任務(wù)。把程序分解成一些獨立的任務(wù)并識別這些任務(wù)間的依賴性。這個過程被稱為分解。?????一個問題有許多分解方

3、式:按任務(wù),數(shù)據(jù),或者按數(shù)據(jù)流。下面的表總結(jié)了這些分解的形式。您將很快看到,這些不同分解形式對應(yīng)了不同的編程行為。表1主要的分解形式總結(jié)分解類型設(shè)計評論任務(wù)不同的行為分配給不同的線程通常在GUI應(yīng)用數(shù)據(jù)多個線程對不同的數(shù)據(jù)集執(zhí)行同樣的操作通常在音頻處理,做圖和科學(xué)編程數(shù)據(jù)流一個線程的輸出是第二個線程的輸入需要特別關(guān)注消除開始和結(jié)束的延遲2.任務(wù)分解6?????按功能分解一個程序被稱為任務(wù)分解。這是一種實現(xiàn)并行執(zhí)行最簡單的方式。使用這種方法,每個任務(wù)被按目錄分類。?????如果它們中的兩個能同時運行,它們會被程序員按此調(diào)度。以這種方式并行運行任務(wù)通常需要對每個函數(shù)做小量修改來

4、避免沖突,并指出這些任務(wù)已經(jīng)不再連續(xù)。?????以園藝工作舉例,任務(wù)分解會建議園丁按工作本身的屬性分配任務(wù):如果兩個園丁到達(dá)一個客戶家,一個修剪草坪,另一個鏟除雜草。修剪草坪和鏟除雜草是兩個被分開的功能。?????要完成這兩個功能,園丁們需要確保他們之間相互協(xié)調(diào),這樣鏟除雜草的園丁就不會坐在待修剪草坪的中間。?????舉個編程的例子,一個任務(wù)分解的典型案例是文字處理軟件,譬如微軟的Word。當(dāng)用戶打開一個很長的文檔的時候,他(她)能夠馬上開始輸入文字。當(dāng)用戶輸入文字時,文檔分頁在后臺發(fā)生,于是他(她)能夠很容易地看到狀態(tài)欄中頁數(shù)的增加。?????文檔輸入和分頁是兩個獨立的任

5、務(wù),程序員按功能將它們分開來并行運行。如果程序員沒有這樣設(shè)計,用戶將不得不在能夠輸入任何文字之前等待整個文檔被分頁。有些朋友可能回憶起這種現(xiàn)象在早期的個人電腦文字處理器中非常常見。1.數(shù)據(jù)分解?????數(shù)據(jù)分解,也被認(rèn)為是數(shù)據(jù)級并行,將任務(wù)按它們處理的數(shù)據(jù)進(jìn)行分解,而不是按照任務(wù)本身的性質(zhì)。使用數(shù)據(jù)分解的程序通常有許多線程在執(zhí)行同樣的任務(wù),只是處理的數(shù)據(jù)項不同。?????舉個例子,假設(shè)在一個大的電子數(shù)據(jù)表里計算值。相比一個線程執(zhí)行所有的計算,數(shù)據(jù)分解會建議有兩個線程,每個執(zhí)行一半的計算量,或者n個線程執(zhí)行1/n的工作量。?????如果園丁應(yīng)用數(shù)據(jù)分解來分解他們的任務(wù),他們兩

6、個會同時修剪一半的草坪,然后兩個人分別鏟除一半的雜草。在計算領(lǐng)域,決定哪一種分解形式更高效取決于系統(tǒng)的限制。?????舉例說,如果需要修剪草坪的地塊非常小以至于沒必要有兩個人來修剪草坪,修剪草坪這個任務(wù)最好只被分配給一個園丁做,那么任務(wù)分解在這一步是最好的選擇。數(shù)據(jù)分解或許適用于其它的任務(wù)序列,譬如當(dāng)修剪草坪完成后,兩個園丁并行地來鏟除雜草。?????隨著處理器核心數(shù)目的增加,數(shù)據(jù)分解使得任務(wù)處理規(guī)模增加。這允許在同樣的時間內(nèi)做更多的工作。?????舉園丁的例子,假設(shè)有另外兩個園丁加入了工作。相比分配所有四個園丁到一個地塊工作,我們不如分配兩個新的園丁去另一個地塊,非常有效

7、地增加我們總的任務(wù)處理量。6?????假設(shè)兩位新園丁和兩位老園丁能夠做同樣多的工作,兩個地塊的大小也是一樣的,我們已經(jīng)在同樣的時間內(nèi)把工作量翻倍了。1.數(shù)據(jù)流分解?????許多時候,當(dāng)分解一個問題時,關(guān)鍵不是任務(wù)應(yīng)該做什么事情,而是數(shù)據(jù)在不同任務(wù)中怎樣傳遞。在這些情況下,數(shù)據(jù)流分解將問題按數(shù)據(jù)在任務(wù)中傳遞的方式來分解。?????生產(chǎn)者/消費者問題是數(shù)據(jù)流影響程序并行執(zhí)行能力的著名例子。這里,一個生產(chǎn)者任務(wù)的輸出,成為另一個消費者的輸入。兩個任務(wù)被不同的線程執(zhí)行,直到生產(chǎn)者完成他的部分工作,消費者不能開始工作。???

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。
关闭