圖示一:英特爾公司總裁保羅.歐德寧展示80個(gè)內(nèi)核的模型

這聽(tīng)起來(lái)真是個(gè)讓人難以置信的佳訊—從表面上看會(huì)用無(wú)窮無(wú)盡的性能可供日益復(fù)雜的應(yīng)用程序來(lái)運(yùn)用。面對(duì)這個(gè)偉大的進(jìn)步,讓我們想象一下目前的應(yīng)用程序運(yùn)行速度會(huì)快到何種程度!看到這里你會(huì)疑問(wèn)這絕不是件輕而易舉之事。確實(shí)如此。

設(shè)計(jì)一款在多核處理器上運(yùn)行的應(yīng)用程序相比單核處理器要困難的多。要想多重應(yīng)用軟件能輕易的在不同的內(nèi)核上運(yùn)行,你就必須精心設(shè)計(jì)出利用多核技術(shù)的編碼應(yīng)用程序來(lái)。這也意味著現(xiàn)有的應(yīng)用軟件在多核處理器上運(yùn)行時(shí)多數(shù)都未能從性能的提升中獲益。

設(shè)計(jì)并行代碼

并行應(yīng)用軟件的設(shè)計(jì)面臨的首個(gè)關(guān)鍵性挑戰(zhàn)就是鑒別程序中那些部分能夠真正彼此平行運(yùn)行,然后用代碼來(lái)執(zhí)行這些部分。每一個(gè)代碼都能和線程的其他部分并行運(yùn)行。因此,一款完整的并行應(yīng)用程序也就是多線程的運(yùn)用。

過(guò)去,以文本為基礎(chǔ)的程序設(shè)計(jì)者們總是習(xí)慣使用應(yīng)用程序接口諸如OpenMP指令或者可移植操作系統(tǒng)接口(POSIX)來(lái)對(duì)應(yīng)用軟件中的線程加以定義。因?yàn)殚L(zhǎng)期以來(lái)以文本為基礎(chǔ)的程序設(shè)計(jì)者們總是根深蒂固的認(rèn)為在多線程代碼實(shí)現(xiàn)虛擬化并行是非常困難的。而另一方面,通過(guò)NI LabVIEW的圖形化開(kāi)發(fā)環(huán)境,代碼編譯者們就能輕易的實(shí)現(xiàn)并行應(yīng)用程序的虛擬和設(shè)計(jì)。另外,LabVIEW工具還能自動(dòng)為代碼的并行部分產(chǎn)生線程。所以對(duì)這項(xiàng)設(shè)計(jì)的背景知之甚少的工程師和科學(xué)家們,就要把更多的時(shí)間和精力放在如何解決這個(gè)問(wèn)題上,而不是成天為應(yīng)用軟件的低效運(yùn)行而大費(fèi)腦筋。

 

圖示二:文本語(yǔ)言和LabVIEW圖形環(huán)境下的多線程對(duì)比

實(shí)現(xiàn)線程同步

多核程序設(shè)計(jì)面臨的第二個(gè)挑戰(zhàn)就是線程同步。面對(duì)應(yīng)用軟件中無(wú)數(shù)的線程,你必須確保所有的線程都能互相配合。舉例來(lái)說(shuō),如果兩個(gè)或者更多內(nèi)核嘗試同時(shí)訪問(wèn)存儲(chǔ)單元,就會(huì)導(dǎo)致數(shù)據(jù)紊亂。因此,對(duì)一款應(yīng)用軟件中的代碼產(chǎn)生沖突的可能性加以細(xì)致的鑒別是一項(xiàng)艱巨的任務(wù)。

利用LabVIEW的圖形化開(kāi)發(fā)環(huán)境創(chuàng)建一個(gè)結(jié)構(gòu)圖,你就能夠很快完成這個(gè)任務(wù)而無(wú)需考慮線程同步的問(wèn)題。圖示三顯示了一款應(yīng)用軟件中圖形代碼的兩個(gè)并行部分在讀取文件時(shí)要訪問(wèn)同一個(gè)硬盤(pán)空間的情形。LabVIEW就能自動(dòng)運(yùn)行線程同步。

 

圖示三:LabVIEW圖形環(huán)境下線程自動(dòng)同步的簡(jiǎn)單演示

調(diào)試

多數(shù)的應(yīng)用程序在首次執(zhí)行任務(wù)時(shí)都無(wú)法完美的履行職能。無(wú)論是單核還是多核應(yīng)用軟件都存在這樣的問(wèn)題。從邏輯上說(shuō),代碼的任何部分都可能產(chǎn)生功能誤差,這時(shí)你就必須依靠不斷升級(jí)的調(diào)試工具來(lái)糾正這些誤差。

調(diào)試過(guò)程也是多核應(yīng)用軟件面臨的一個(gè)挑戰(zhàn)。你不僅要對(duì)同時(shí)運(yùn)行的兩部分代碼進(jìn)行跟蹤,還要確定這每個(gè)代碼使用的是那個(gè)處理器。除此之外,如果你經(jīng)常設(shè)計(jì)多線程應(yīng)用軟件,你還必須解決線程交叉和枯竭方面的問(wèn)題,這些在調(diào)試過(guò)程中都需要進(jìn)行認(rèn)真的甄別。

LabVIEW包含的幾個(gè)特性能大大簡(jiǎn)化多核應(yīng)用軟件的調(diào)試過(guò)程。特別是你可以運(yùn)用高亮顯示執(zhí)行的特點(diǎn)來(lái)方便快捷的對(duì)程序的并行執(zhí)行虛擬化(LabVIEW本身就是以數(shù)據(jù)流為基礎(chǔ)的)。舉例來(lái)說(shuō),仔細(xì)觀察圖示四中的演示,當(dāng)高亮顯示打開(kāi)時(shí),你就能輕易的對(duì)代碼執(zhí)行的并行部分進(jìn)行虛擬化了。

 

圖示四:LabVIEW開(kāi)發(fā)環(huán)境下制圖高亮顯示

除此之外,LabVIEW的實(shí)時(shí)模塊還能提供多核處理器準(zhǔn)確的執(zhí)行情況和廣泛的調(diào)試信息。目前的最新版本LabVIEW8.5實(shí)時(shí)執(zhí)行跟蹤工具包能對(duì)線程運(yùn)行的處理器虛擬化,還能快速識(shí)別線程枯竭和交叉的問(wèn)題。

 

圖示五:LabVIEW8.5跟蹤工具包

總結(jié)

由此我們可以得出結(jié)論,多核應(yīng)用程序的設(shè)計(jì)者們必須充分重視多線程的挑戰(zhàn)。這些挑戰(zhàn)不僅限于我們上文談及的并行應(yīng)用程序體系架構(gòu),線程同步和調(diào)試這幾個(gè)方面。隨著處理器內(nèi)核數(shù)量的不斷增加,在多線程應(yīng)用軟件中的正確運(yùn)用并行設(shè)計(jì)技術(shù)也越來(lái)越重要了。

分享到

多易

相關(guān)推薦