正文

基于任務的程序設計(17)

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


1.6.3  并行化任務 

Visual C# 2010和.NET Framework 4使得將基于任務的設計轉換為并行化代碼變得非常簡單。然而,很重要的一點在于,為了讓并行化的代碼能夠實現(xiàn)預期的目標,必須對并行化的代碼進行特別的測試和調優(yōu)。本書剩余的部分將講解這些主題。

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

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

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

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


上一章目錄下一章

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