正文

基于任務(wù)的程序設(shè)計(jì)(17)

C#并行編程高級(jí)教程 作者:(美)Gastón C.Hillar


1.6.3  并行化任務(wù) 

Visual C# 2010和.NET Framework 4使得將基于任務(wù)的設(shè)計(jì)轉(zhuǎn)換為并行化代碼變得非常簡(jiǎn)單。然而,很重要的一點(diǎn)在于,為了讓并行化的代碼能夠?qū)崿F(xiàn)預(yù)期的目標(biāo),必須對(duì)并行化的代碼進(jìn)行特別的測(cè)試和調(diào)優(yōu)。本書(shū)剩余的部分將講解這些主題。

當(dāng)您對(duì)任務(wù)進(jìn)行并行化時(shí),并行化所引入的開(kāi)銷(xiāo)可能產(chǎn)生較大的影響,因此,可能需要對(duì)多種可替換方案進(jìn)行測(cè)試。如前所述,現(xiàn)代的多核微處理器極其復(fù)雜,在做出最終選擇之前,有必要對(duì)不同的并行化技術(shù)進(jìn)行測(cè)試。事實(shí)上,串行代碼也是如此,但是區(qū)別在于,您已經(jīng)知道foreach循環(huán)比f(wàn)or循環(huán)要慢。在對(duì)任務(wù)進(jìn)行并行化的時(shí)候,根據(jù)決定并行化任務(wù)執(zhí)行的方式的特定參數(shù)的不同,并行化版本的for循環(huán)可能會(huì)產(chǎn)生不同的性能結(jié)果。一旦經(jīng)歷過(guò)這些場(chǎng)景之后,您就能夠在為類似問(wèn)題編寫(xiě)代碼和進(jìn)行相似的任務(wù)設(shè)計(jì)的時(shí)候考慮到這些問(wèn)題。

通常情況下都有必要將多個(gè)任務(wù)連接起來(lái),其中,代碼可以將要完成的工作分解為子任務(wù)、并行地執(zhí)行子任務(wù)、收集結(jié)果,然后重復(fù)很多像這樣的循環(huán)。在決定并行化對(duì)某一個(gè)特定的問(wèn)題來(lái)說(shuō)是否是好的替代方案的時(shí)候,想象要在1000個(gè)內(nèi)核上運(yùn)行,嘗試創(chuàng)建一個(gè)可能的并發(fā)執(zhí)行的示意圖。如果算法中可以完全并行化的部分不能提供預(yù)期的可擴(kuò)展性,那么您還可以讓它們與其他任務(wù)一起并行運(yùn)行。

1.6.4  盡量減少臨界區(qū)

Amdahl法則和Gustafson法則都意識(shí)到,串行工作是并行算法整體性能的敵人。在兩個(gè)并行部分之間需要順序執(zhí)行的串行時(shí)間段稱為臨界區(qū)(critical section)。圖1-16標(biāo)出了用于分析Gustafson法則的一個(gè)示意圖中的4個(gè)臨界區(qū)。


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) www.autoforsalebyowners.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)