基于LabVIEW的多核系統編程技術(shù)
因為NI LabVIEW是數據流編程語(yǔ)言,開(kāi)發(fā)者們可以編寫(xiě)并行的應用程序,這些應用程序可以直接映射到并行的硬件(如多核心處理器和FPGA等)上以獲得最優(yōu)異的性能。這篇白皮書(shū)討論了什么是數據流編程以及為什么說(shuō)NI LabVIEW是多核系統編程的首選。
本文引用地址:http://dyxdggzs.com/article/192057.htm免費午餐結束了
近幾年來(lái),處理器的速度遭遇到了瓶頸。摩爾定律表明,每隔18~24個(gè)月芯片中晶體管的數量就會(huì )增加一倍。這在過(guò)去的40年里始終是適用的,但是芯片性能卻不再保持線(xiàn)性增加了。過(guò)去,芯片生產(chǎn)廠(chǎng)商通過(guò)增加處理器的時(shí)鐘速度來(lái)提高芯片的性能,如從100~200MHz,再到最近的數GHz的范圍。
但是在今天,由于功耗和散熱的限制,通過(guò)提高時(shí)鐘速度來(lái)增加性能的方法行不通了。芯片廠(chǎng)商開(kāi)始轉向另一種全新的芯片構架,就是在單芯片上集成多個(gè)處理器內核。相對于單核處理器,程序員們可以使用多核處理器完成更多的任務(wù)。為了充分利用多核處理器,程序員們需要重新考慮開(kāi)發(fā)應用程序的方法。微軟公司的軟件設計師Herb Sutter曾說(shuō)過(guò),對于那些期望最終用戶(hù)簡(jiǎn)單的將計算機升級到更快的處理器就可以立即看到軟件程序性能提升的開(kāi)發(fā)者而言,“免費午餐結束了”。簡(jiǎn)而言之,在相當長(cháng)的一段時(shí)間里,軟件開(kāi)發(fā)是這樣的,但是現在情況不同了。
圖1:摩爾定律表明處理器速度不能更快了,所以Intel和AMD等芯片廠(chǎng)商正在轉向在單個(gè)處理器上集成多個(gè)核心的方法。
順序執行的程序在處理器的速度提升后將得到性能的改善,將電腦升級到更快的CPU意味著(zhù)一個(gè)序列中每個(gè)單獨的指令都將運行得更快。為了在多核系統中繼續獲得性能提升,你需要設計一個(gè)在內核間分配任務(wù)的應用程序,從本質(zhì)上說(shuō)來(lái)就是開(kāi)發(fā)并行應用程序來(lái)取代順序執行的程序。
LabVIEW――一種圖形化數據流式編程語(yǔ)言
在LabVIEW中開(kāi)發(fā)應用程序的主要優(yōu)勢是這種語(yǔ)言有著(zhù)直觀(guān)、圖形化的特點(diǎn)。在LabVIEW中,用戶(hù)解決工程問(wèn)題就像是在紙上畫(huà)框圖一樣?,F代多核處理器技術(shù)使得LabVIEW成為一種更適合的編程工具,因為它有著(zhù)并行化表達和執行任務(wù)的能力。
LabVIEW的數據流特性使得如果連線(xiàn)中存在著(zhù)分支,或者是框圖中存在并行序列,那么LabVIEW執行機構會(huì )嘗試著(zhù)并行的執行程序。在計算機科學(xué)術(shù)語(yǔ)中,這稱(chēng)為“潛在的并行化”,因為你不需要根據并行運行的需要明確地編寫(xiě)并行代碼,編程語(yǔ)言自己會(huì )進(jìn)行一定程度的并行化。
從單核到雙核計算機,理論上講,獲得的性能應該是原來(lái)的兩倍。但是,與這個(gè)極限接近的程度取決于用戶(hù)應用程序運行的并行化程度。LabVIEW程序員們可以很方便的以并行方式來(lái)表示他們的解決方案。對于普通的LabVIEW應用程序而言,如果不考慮多核心編程技術(shù),在不改寫(xiě)代碼的情況下,與最初的程序相比,可以獲得25%到35%的性能提升,這都是緣于普通LabVIEW程序所具有的并行特性。
圖2是一個(gè)簡(jiǎn)單的應用程序的例子。其中,LabVIEW代碼中的分支簡(jiǎn)化了兩個(gè)分析任務(wù)――一個(gè)濾波器操作和一個(gè)快速傅立葉變換(FFT),使它們可以在雙核機器上并行執行。在圖表中沒(méi)有顯示的性能測試代碼,它首先在單核模式下(關(guān)掉其中的一個(gè)核)運行“for loop”一次,然后在雙核的模式下運行。因為這兩項任務(wù)都是計算量很高的,利用任務(wù)并行化獲得的性能改進(jìn)為原來(lái)的1.8倍。
圖2:典型的LabVIEW應用程序,它展示了數據流編程所具有的與生俱來(lái)的并行特性。
基于文本的編程語(yǔ)言如C語(yǔ)言等,在代碼中利用特殊標記來(lái)表示并行化代碼,創(chuàng )建并行任務(wù)(也就是創(chuàng )建獨立的線(xiàn)程)。管理這些多線(xiàn)程的應用程序將是一個(gè)挑戰。
在C語(yǔ)言中,用戶(hù)必須使用鎖操作、互斥量、原子操作和其他高級編程技術(shù)來(lái)管理同步。當多線(xiàn)程變得難于跟蹤調試,通常的編程缺陷便出現了,如下所示:
1. 由于線(xiàn)程太多而導致效率低下。
2. 死鎖――線(xiàn)程一直在等待某些而不能進(jìn)行處理。
3. 競爭狀況- 代碼運行的時(shí)序沒(méi)有被正確管理,在需要數據時(shí),數據不是沒(méi)有準備好就是已經(jīng)被覆蓋掉了。
4. 存儲器沖突――與代碼中存儲器管理相關(guān)的問(wèn)題。
由于使用C語(yǔ)言進(jìn)行開(kāi)發(fā)面臨的這些挑戰,LabVIEW程序員們可以獲得比以往更高的效率。
LabVIEW是利用實(shí)時(shí)SMP支持,處于“Multicore Ready”軟件層的最上層Intel公司定義了用戶(hù)需要評估的四個(gè)軟件層次來(lái)確定多核系統的可用程度。如果所用的應用程序庫和設備驅動(dòng)不是為多核而設計的,或者操作系統不能夠在多個(gè)核心上進(jìn)行負載均衡,那么并行程序在多核心系統上并不會(huì )運行得更快。
評論