今年12月的SD2.0大會(huì),在“語(yǔ)言與工具”專場(chǎng),我們邀請(qǐng)到多核編程專家周偉明先生,為開發(fā)者們?cè)敿?xì)介紹“多核編程模式”。本刊記者就多核編程的相關(guān)知識(shí)對(duì)周偉明先生做了專訪,下面為采訪內(nèi)容。
CSDN:請(qǐng)問(wèn),您是從什么時(shí)候開始關(guān)注多核編程技術(shù)的?為什么選擇這個(gè)做研究領(lǐng)域?
周偉明:從97年開始,我開始接觸多線程程序方面以及分布式計(jì)算機(jī)環(huán)境(DCE)方面的開發(fā),之后接觸了多處理服務(wù)器方面的軟件開發(fā),并對(duì)它懷有濃厚的興趣。到了2002年后,發(fā)現(xiàn)多核處理器已經(jīng)成為大勢(shì)所趨,因此開始關(guān)注多核編程技術(shù)。
在我的職業(yè)生涯中,發(fā)現(xiàn)大多數(shù)程序員沒(méi)有掌握如何寫好多線程程序的基本技術(shù)。在多處理器的多線程編程中,比以往單核時(shí)代的多線程編程要求高得多,可以說(shuō)多核編程是一門比較新鮮且富于挑戰(zhàn)的技術(shù),同時(shí)它又能產(chǎn)生巨大的社會(huì)價(jià)值,所以選擇它做研究領(lǐng)域。
CSDN:請(qǐng)您談?wù)劊嗪司幊碳夹g(shù)都包括哪些方面?
周偉明:從大的方面講,多核編程技術(shù)主要包括并行計(jì)算、共享資源分布式計(jì)算、任務(wù)分解與調(diào)度、Lock-Free編程等內(nèi)容。其中共享資源分布式計(jì)算、任務(wù)分解與調(diào)度是最重要的內(nèi)容,也是大多數(shù)程序員未接觸過(guò)的內(nèi)容。許多并行算法都可以通過(guò)共享資源分布式計(jì)算、任務(wù)分解與調(diào)度來(lái)實(shí)現(xiàn)。
CSDN:您之前說(shuō)過(guò),“像使用內(nèi)存一樣使用CPU”,能具體闡述下嗎?
周偉明:在多核編程時(shí),很重要的一個(gè)需求就是要做到當(dāng)硬件升級(jí),CPU核數(shù)增加后,程序不用修改,即保證程序隨CPU核數(shù)增長(zhǎng)的擴(kuò)展性。“像使用內(nèi)存一樣使用CPU”主要是針對(duì)計(jì)算量不足情況下的一種處理措施,因?yàn)閯?chuàng)建線程存在開銷,計(jì)算量不足時(shí),創(chuàng)建過(guò)多的線程不僅不能使程序運(yùn)行得更快,甚至?xí)钩绦蜃兟疫€會(huì)增加能源消耗。比如一段和創(chuàng)建一個(gè)線程的計(jì)算量相當(dāng)?shù)挠?jì)算運(yùn)行在8核CPU上,顯然不能使用8個(gè)硬件線程來(lái)運(yùn)行它,只使用一個(gè)硬件線程就足夠了。
CSDN:您認(rèn)為,多核編程模式有什么重要的意義嗎?您選擇這個(gè)作為今年SD大會(huì)的議題,是由于什么考慮?
周偉明:多核編程模式主要是提供一種多核并行與分布式編程的普遍方法,這些思想很容易被普通程序員甚至普通人理解和掌握。有了這些編程模式后,程序員不再需要去學(xué)習(xí)各種復(fù)雜的并行算法,它可以復(fù)用現(xiàn)有的串行算法,輕易地實(shí)現(xiàn)并行和分布式計(jì)算。
之所以把這個(gè)作為今年SD大會(huì)的議題,主要是因?yàn)閭€(gè)人覺(jué)得多核編程模式是多核編程技術(shù)的精華部分,希望能和大家一起分享。
CSDN:很多人認(rèn)為多核編程技術(shù),特別高深,不易學(xué)習(xí),您怎么看待這個(gè)問(wèn)題?
周偉明:也許是有些人把多核編程技術(shù)理解成了并行計(jì)算技術(shù)的緣故,加上近些年學(xué)術(shù)界對(duì)復(fù)雜度高得出奇的Lock-Free編程研究非常熱,致使認(rèn)為它特別高深,學(xué)習(xí)難度高,非要達(dá)到計(jì)算機(jī)博士水準(zhǔn)才能掌握。
實(shí)際上大音希聲、大道至簡(jiǎn),最實(shí)用的多核編程技術(shù)并不是那些復(fù)雜的并行算法和Lock-Free算法。最實(shí)用的多核編程技術(shù)往往只要用到一些最簡(jiǎn)單的串行編程技術(shù),然后使用一定的模式把它并行化。比如多核中的查找算法,僅僅用最簡(jiǎn)單的有序數(shù)組的查找,就可以通過(guò)分布式數(shù)據(jù)結(jié)構(gòu)模式把它并行化。
在多核編程模式中,也沒(méi)有用到任何高深的思想,相反它用到的思想?yún)s是來(lái)自人類社會(huì)中最原始、最普遍、最簡(jiǎn)單的一些東西,如貪婪、自私、偷竊等。這些思想普通人都可以理解,更不用說(shuō)程序員了。
許多復(fù)雜的并行計(jì)算現(xiàn)在都可以通過(guò)新的方法來(lái)實(shí)現(xiàn),在去年的SD大會(huì)上,Intel的市場(chǎng)總裁James Reinders就講過(guò)了用任務(wù)調(diào)度來(lái)實(shí)現(xiàn)并行計(jì)算的通用方法。比如要寫一個(gè)并行排序算法,程序員只要懂得如何寫串行的排序算法,就可以使用任務(wù)調(diào)度方法把它自動(dòng)變成并行算法,并且這種通過(guò)任務(wù)調(diào)度實(shí)現(xiàn)的并行算法比傳統(tǒng)的并行算法性能更好。
值得慶幸的是,將簡(jiǎn)單串行算法并行化的各種模式都可以寫成象標(biāo)準(zhǔn)庫(kù)一樣的東西給程序員使用。Intel公司就提供了一個(gè)開源項(xiàng)目TBB給大家使用。所以對(duì)于普通程序員來(lái)說(shuō),掌握多核編程技術(shù)并不是一件難事,只要有多線程編程基礎(chǔ)的程序員都可以掌握。當(dāng)然,就像C++標(biāo)準(zhǔn)模板庫(kù)STL一樣,掌握其基本原理和使用它對(duì)每個(gè)程序員都不是難事,但是要自己去實(shí)現(xiàn)它并不是每個(gè)程序員能做到的。多核編程技術(shù)也一樣,普通程序員掌握其基本原理和使用它不是難事,當(dāng)然要實(shí)現(xiàn)一個(gè)基礎(chǔ)庫(kù)有一定難度,不是所有的程序員有能力能做到的事。
CSDN:如果有網(wǎng)友想提升自己在多核編程方面的水平,您有什么建議?應(yīng)該怎么學(xué)習(xí)?采用怎樣的步驟?需要掌握哪些工具或技術(shù),應(yīng)注意什么問(wèn)題?
周偉明:要提高多核編程水平,首先要掌握多線程編程基礎(chǔ)技術(shù)和OpenMP編程技術(shù),其次,要掌握多核處理器的一些特殊地方,如Cache方面的偽共享問(wèn)題,原子操作等,這是做多核編程的基礎(chǔ)。
有了上面的基礎(chǔ)后,就可以開始學(xué)習(xí)如何將計(jì)算均攤到各個(gè)CPU核上的方法,這里主要涉及到并行計(jì)算、共享資源分布式計(jì)算、任務(wù)分解與調(diào)度方面的技術(shù)。
由于市面上暫時(shí)還缺乏共享資源分布式計(jì)算、任務(wù)分解與調(diào)度方面的書籍資料,所幸的是Intel的開源項(xiàng)目TBB中有一些共享資源分布式計(jì)算、任務(wù)分解與調(diào)度方面的源代碼。所以這方面的內(nèi)容暫時(shí)可以通過(guò)Intel的開源項(xiàng)目TBB的源代碼去學(xué)習(xí)。當(dāng)然也可以到ACM, IEEE, Elsevier里去找一些相關(guān)的論文看看。
并行計(jì)算方面的內(nèi)容可以通過(guò)許多書籍以及一些這方面的開源項(xiàng)目去學(xué)習(xí)。由于可以通過(guò)任務(wù)調(diào)度的方法進(jìn)行并行計(jì)算,因此對(duì)于普通程序員,這方面的內(nèi)容并不用學(xué)很多,有所了解即可。
當(dāng)然,還需要學(xué)習(xí)多線程調(diào)試測(cè)試方面的技術(shù),這牽涉到代碼靜態(tài)分析方法,如何設(shè)計(jì)測(cè)試用例使程序中的問(wèn)題暴露出來(lái),如何調(diào)試定位問(wèn)題等內(nèi)容。也有些工具可以輔助程序員檢查程序中的錯(cuò)誤,如Intel的C++編譯器里帶有一些檢查多線程程序錯(cuò)誤的輔助工具。同時(shí)Intel的網(wǎng)站上還提供了能耗測(cè)試的工具可以檢查程序的能源消耗情況,可以幫助程序員進(jìn)一步優(yōu)化程序,寫出更環(huán)保的程序來(lái)。
如果要更深入的掌握多核編程技術(shù),Lock-Free編程技術(shù)也是需要有一定了解的,在具有垃圾收集機(jī)制的編程環(huán)境中,Lock-Free編程技術(shù)在某些情況下有它的使用價(jià)值。學(xué)習(xí)Lock-Free編程技術(shù)并一定需要去使用它,而是通過(guò)它可以更好地理解多線程編程方面所面臨的復(fù)雜問(wèn)題,對(duì)于提高程序員對(duì)多線程編程方面的理解和代碼質(zhì)量會(huì)有一定的幫助。
在學(xué)習(xí)多核編程技術(shù)時(shí),最重要的是掌握如何將計(jì)算均勻分?jǐn)偟礁鱾€(gè)CPU核上的原理和方法,并不需要去死記一些算法。
CSDN:您能否介紹推薦一些多核編程方面的書籍?
周偉明:目前市面上專門關(guān)于多核編程的書較少,有大影響力的書籍幾乎沒(méi)有。雖然如此,但是還是有些書籍有很好的參考和借鑒價(jià)值。
《多核程序設(shè)計(jì)技術(shù)——通過(guò)軟件多線程提升性能》一書由Intel公司的工程師寫作而成,講解了Intel處理器相關(guān)的多線程基礎(chǔ)知識(shí),同時(shí)也講解了一些OpenMP方面的編程知識(shí),可以當(dāng)作一本多線程方面的基礎(chǔ)參考書籍。
《Intel Threading Building Blocks》一書由Intel的市場(chǎng)總裁James Reinders寫作而成,由O’Reilly出版,詳細(xì)介紹了Intel的開源項(xiàng)目TBB庫(kù)的使用方法,唯一的不足是這本書沒(méi)有剖析其中的原理,也許是覺(jué)得代碼難度過(guò)高的原因。這本書在國(guó)內(nèi)的購(gòu)書網(wǎng)站上可以買到英文版的,不過(guò)價(jià)格比較高。
《多處理器編程的藝術(shù)》由一位美國(guó)大學(xué)教授和一位Sun實(shí)驗(yàn)室的技術(shù)人員合著。這本書的學(xué)術(shù)性內(nèi)容較強(qiáng),重點(diǎn)內(nèi)容為L(zhǎng)ock-Free方面的編程技術(shù),有較高的難度,對(duì)于想深入學(xué)習(xí)和使用Lock-Free編程技術(shù)的人員(特別是使用Java和C#編程語(yǔ)言的人員),不妨參考一下這本書的一些內(nèi)容。這本書已經(jīng)由國(guó)內(nèi)出版社引進(jìn)了英文版,可以在國(guó)內(nèi)買到。
對(duì)于并行計(jì)算方面的書籍,國(guó)內(nèi)已經(jīng)出版了很多。有很多翻譯過(guò)來(lái)的,如《并行計(jì)算導(dǎo)論》、《并行計(jì)算綜論》、《并行程序設(shè)計(jì)》、《并行編程模式》、《MPI與OpenMP程序設(shè)計(jì)》、《并行處理基本原理》等。也有國(guó)內(nèi)人原創(chuàng)的,如陳國(guó)良編著的《并行計(jì)算——結(jié)構(gòu)?算法?編程》,《并行算法的設(shè)計(jì)與分析》,《并行算法實(shí)踐》等。請(qǐng)恕我不能一一列出,這些書可以作為并行算法方面的參考書籍,美中不足的是這些書都不是專門針對(duì)多核環(huán)境而寫的,所以普通程序員看了之后要把它變成多核環(huán)境中的程序也許會(huì)有一定難度。
對(duì)于多核程序調(diào)試測(cè)試方面的書籍,目前國(guó)內(nèi)還沒(méi)有發(fā)現(xiàn)這方面專門的書籍。前面介紹的書籍中,有些書籍也談到了一些多核程序調(diào)試測(cè)試的方法。對(duì)于多線程程序的調(diào)試,《軟件調(diào)試》這本書中有些內(nèi)容值得參考。對(duì)于如何設(shè)計(jì)測(cè)試用例、寫測(cè)試程序?qū)⒊绦蛑械膯?wèn)題暴露出來(lái),雖有自夸之嫌,但還是要推薦大家不妨參考一下我寫的《軟件測(cè)試實(shí)踐》中的一些方法。
CSDN:聽說(shuō)您最近在撰寫一本有關(guān)多核編程的書,這是怎樣的一本書?請(qǐng)簡(jiǎn)單介紹一下。
周偉明:從去年6月開始,我就在使用全職時(shí)間寫作一本名為《多核計(jì)算與程序設(shè)計(jì)》的多核編程方面的書。
這本書的核心內(nèi)容就是共享資源分布式計(jì)算、任務(wù)分解與調(diào)度方面的內(nèi)容,這些內(nèi)容需要使用今年將在SD大會(huì)上講的各種多核編程模式。同時(shí)也有一部分并行計(jì)算方面的內(nèi)容,不過(guò)與以往的并行計(jì)算方面的書不同的是,這本書的并行計(jì)算方面的內(nèi)容是專門針對(duì)多核環(huán)境的,如并行搜索、并行排序、并行數(shù)值計(jì)算等內(nèi)容都會(huì)涉及到CPU核數(shù)的擴(kuò)展性,CPU Cache的偽共享問(wèn)題等多核相關(guān)的內(nèi)容。
當(dāng)然書中也介紹了一些多線程編程基礎(chǔ)知識(shí)、OpenMP編程基礎(chǔ)知識(shí)、Lock-Free編程基礎(chǔ)知識(shí)等基礎(chǔ)內(nèi)容。
這本書目前正在出版社內(nèi)進(jìn)行編輯加工,如不出意外,明年4月份左右估計(jì)可以上市。
CSDN:對(duì)于今年的SD大會(huì),您有什么期望或者祝福嗎?
周偉明:從去年的SD大會(huì)舉辦情況來(lái)看,它舉辦得非常成功,毫不夸張地說(shuō)它已經(jīng)成為了我國(guó)IT行業(yè)內(nèi)影響力最大的一個(gè)技術(shù)盛會(huì)。非常好地促進(jìn)了先進(jìn)技術(shù)在我國(guó)軟件行業(yè)的交流和推廣,對(duì)提升我國(guó)軟件企業(yè)的技術(shù)水平起了很好的引導(dǎo)作用。
對(duì)于今年的SD大會(huì),自然希望有更多的技術(shù)人員參加,有更多的各個(gè)專業(yè)領(lǐng)域的重量級(jí)的最先進(jìn)技術(shù)在會(huì)上進(jìn)行演講和交流,使之成為影響和提升中國(guó)軟件技術(shù)發(fā)展的一場(chǎng)盛會(huì)。
被采訪者簡(jiǎn)介:
周偉明先生,畢業(yè)于上海交通大學(xué),1994年開始從事專業(yè)軟件開發(fā),曾工作于美國(guó)加州硅谷的DASCOM Inc公司(現(xiàn)為IBM的全資子公司)和華為技術(shù)有限公司等企業(yè)。在網(wǎng)絡(luò)安全軟件、服務(wù)端軟件、機(jī)器翻譯軟件、工具軟件、嵌入式系統(tǒng)等領(lǐng)域都擁有豐富的專業(yè)實(shí)踐經(jīng)驗(yàn)。近年來(lái)周偉明先生潛心研究多核編程技術(shù),于2006年編著出版了國(guó)內(nèi)第一本專門研究多任務(wù)情況下數(shù)據(jù)結(jié)構(gòu)與算法的專著,獲得業(yè)界的好評(píng)。此后周偉明先生再接再厲,更加深入地研究多核程序設(shè)計(jì)中范圍更加廣泛的重要的主題,提出多核程序設(shè)計(jì)的新觀念——“象使用內(nèi)存一樣使用CPU”,并且致力與編寫一本新的多核編程技術(shù)著作,將自己的研究成果和技術(shù)思路總結(jié)出來(lái)。