正文

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

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


在對(duì)任務(wù)進(jìn)行并行化時(shí),為了獲得最佳性能,最重要的目標(biāo)之一是要最小化這些臨界區(qū)。大部分情況下,都不可能在兩個(gè)并行部分之間避免運(yùn)行串行代碼,因?yàn)榭傂枰獑?dòng)并行作業(yè)并收集結(jié)果。然而,對(duì)臨界區(qū)的代碼進(jìn)行優(yōu)化,并且移除不必要的臨界區(qū)甚至比并行代碼的正確調(diào)優(yōu)還要重要。

當(dāng)您面對(duì)一個(gè)具有太多臨界區(qū)的執(zhí)行計(jì)劃的時(shí)候,請(qǐng)不要忘記Amdahl法則。如果不能減少這些臨界區(qū),那么可以嘗試找到一些可以與臨界區(qū)并行運(yùn)行的任務(wù)。例如,可以在臨界區(qū)運(yùn)行的時(shí)候并行運(yùn)行一個(gè)任務(wù)預(yù)取數(shù)據(jù)供下一段并行算法使用,這樣可以增強(qiáng)這種方案的整體性能。重要的是要考慮現(xiàn)代多核硬件能夠提供的能力,而不是僅僅考慮只有一個(gè)單獨(dú)的執(zhí)行單元的情況。

1.6.5  理解多核并行程序的設(shè)計(jì)原則

James Reinders在Dr. Dobb’s Journal發(fā)表了一篇名為“Rules for Parallel Programming for Multicore”的文章(www.drdobbs.com/hpc-high-performance-computing/201804248)。他列舉出了8條原則幫助多核程序設(shè)計(jì)的開發(fā)人員。他的原則也適合于創(chuàng)建并行的C#和.NET Framework 4應(yīng)用程序。這8條原則是:

(1) 按照并行的方式思考——這一條原則指的是以并行的思想指導(dǎo)設(shè)計(jì),前面的小節(jié)解釋了這個(gè)內(nèi)容。

(2) 使用抽象編程——您可以充分利用.NET Framework 4中的Task Parallel Library (TPL)所提供的新功能,使您的高層次代碼反映問題本身,而不是復(fù)雜的底層線程管理技術(shù)。第2章介紹了TPL。

(3) 按照任務(wù)(事情)編程,而不是按照線程(CPU內(nèi)核)編程——通過TPL進(jìn)行程序設(shè)計(jì),您可以編寫代碼實(shí)現(xiàn)基于任務(wù)的設(shè)計(jì),而不用關(guān)注底層的線程。

(4) 設(shè)計(jì)的時(shí)候要考慮關(guān)閉并發(fā)的情形——通過TPL編寫的代碼在單核微處理器的計(jì)算機(jī)(只有一個(gè)物理內(nèi)核的計(jì)算機(jī))上也能夠運(yùn)行。

(5) 避免使用鎖——非常重要的一點(diǎn)在于:要充分利用新的類、方法和數(shù)據(jù)結(jié)構(gòu),這些結(jié)構(gòu)在設(shè)計(jì)上避免了復(fù)雜同步機(jī)制的必要性。TPL在很多復(fù)雜的情況下使得避免使用重量級(jí)的鎖更加簡(jiǎn)單,TPL還提供了新的輕量級(jí)的同步機(jī)制。

(6) 利用為幫助并發(fā)而設(shè)計(jì)的工具和庫——Visual Studio 2010提供了新的工具用于調(diào)試、測(cè)試和調(diào)優(yōu)并行代碼。在本書中,您將學(xué)習(xí)到很多這類工具和庫。

(7) 使用可擴(kuò)展的內(nèi)存分配器——TPL在公共語言運(yùn)行時(shí)(Common Language Runtime,CLR)中提供了可擴(kuò)展的內(nèi)存分配器,而且在使用任務(wù)和線程的時(shí)候會(huì)自動(dòng)使用這些內(nèi)存分配器。然而,為了最大限度地利用高速緩存,您必須分析各種不同的分區(qū)情形,盡量避免在每一個(gè)任務(wù)中耗費(fèi)大量的內(nèi)存。

(8) 設(shè)計(jì)的時(shí)候要考慮隨增長(zhǎng)的工作負(fù)載而擴(kuò)展——掌握了并行擴(kuò)展之后,就可以很容易地通過TPL提供的新類考慮Gustafson法則了。如果您的設(shè)計(jì)已經(jīng)準(zhǔn)備好了面對(duì)未來的擴(kuò)展性,那么您編寫的代碼就可以隨著內(nèi)核的增長(zhǎng)而擴(kuò)展了。Windows 7和Windows Server 2008 R2支持最多256個(gè)硬件線程或邏輯處理器,因此,擴(kuò)展空間還是很大的。


上一章目錄下一章

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