利用圖形化平臺開發(fā)多核嵌入式系統
多核、多線程是嵌入式設計的未來趨向
近幾年來,處理器的速度遭遇到了瓶頸。在過去40年里摩爾定律表明,每隔18到24個月半導體芯片中晶體管的數量就會增加一倍,而芯片性能也隨之線性增長。過去,芯片生產廠商通過增加處理器的時鐘速度來提高芯片的性能,如從100MHz到200MHz,再到最近的幾GHz。但是在今天,由于功耗和散熱的限制,提高時鐘速度來增加性能的方法是行不通的了。芯片廠商開始轉向另一種全新的芯片構架,就是使單個芯片具有多個處理器器核心。使用多核處理器,程序員們可以完成比使用單核心更多的任務。
嵌入式系統不可避免的也同樣會遇到在功耗和散熱方面的問題,與PC設計領域的同行一樣,嵌入式系統工程師也開始考慮轉向多核處理器,以求獲得處理能力、功耗和產品體積等方面的潛在優(yōu)勢。Intel嵌入式和通信集團總經理Doug Davis指出,在高端通信和醫(yī)療成像等計算密集型應用領域,嵌入式系統客戶們已經紛紛要求芯片廠商提供具有更長生命周期的多核器件。Intel不久前宣稱,將面向嵌入式計算市場提供四核處理器。一些數碼產品廠商亦指出,他們公司轉向多核是因為“需要更強的處理能力和多線程”。
對于嵌入式系統而言,多核技術可以提供更高的處理器性能、更有效的電源利用率,并且占用更小的物理空間,因而具有許多單核處理器無法具備的優(yōu)勢。MIPS科技公司亞太區(qū)副總裁Mark Pittman指出,在嵌入式產品的市場上,許多應用可以從多線程流水線執(zhí)行當中獲益,整個系統的性能,由此提高的百分比從60%到300%不等。
多核、多線程需要全新的編程方法
要想充分發(fā)揮多核以及多處理器解決方案的潛能,僅僅依靠強有力的芯片是不夠的,還需要采用新的編程方法。微軟公司的軟件設計師Herb Sutter說過,對于那些期望最終用戶簡單地將計算機升級到更快的處理器,或期望立即看到軟件程序性能提升的開發(fā)者而言,“免費午餐結束了”。簡而言之,在相當長的一段時間里,軟件性能可以輕易地得益于處理器的性能提升,但是現在情況不同了。
利用多核處理器的編程應用是一個巨大的編程挑戰(zhàn),這是廣為接受的。比爾蓋茨有這樣一段話:“要想充分利用并行工作的處理器的威力,…軟件必須能夠處理并發(fā)性問題。但正如任何一位編寫過多線程代碼的開發(fā)者告訴你的那樣,這是編程領域最艱巨的任務之一?!?/P>
多核處理器編程,尤其是多線程編程中存在好幾個難點:首先是并行的思考方式,比如要分辨出哪些任務是可以同時執(zhí)行的,這并不是一件容易的事情。
其次是線程的創(chuàng)建和管理。開發(fā)人員把任務劃分成多個并行步驟之后,就要通過線程的方式來實現。多線程編程是相當困難的,很多傳統的編程語言都需要一組新的函數或結構來創(chuàng)建、同步、加解鎖線程,這意味著工作量的增加。
與此同時,開發(fā)人員還需要考慮并行代碼段之間哪些資源是不能共享的,比如文件、內存、硬件等等,否則會導致資源的沖突和競爭,使得并行線程因等待資源而暫停。此外,如何對復雜的多線程編程進行調試,以及如何在多核的實時系統中保持確定性,都是值得考慮的問題。
通過圖形化平臺開發(fā)多核嵌入式系統
由于多線程編程的復雜性,很多計算機方面的專家都在進行探索,希望讓編譯器來幫助開發(fā)人員處理并行性問題。如果沒有這種編譯系統,開發(fā)人員必須自己來處理并行編程。雙核處理器的多線程編程已經是相當的復雜,如果以后發(fā)展到80個核,其復雜度將令開發(fā)人員無法應付。對于學習計算機編程或軟件工程的開發(fā)人員來說,或許文本編程的并行編程機制并不足以難倒他們,可是對于其他領域的專業(yè)人員,如果他們并不擅長編程,又要使用多核處理器帶來的高性能,那么圖形化的開發(fā)環(huán)境LabVIEW可能是他們的理想之選。
LabVIEW是一種圖形化數據流式編程語言,在嵌入式系統中實現圖形化,已經成為大勢所趨?,F在市場所需的是一種完全的圖形化編程語言,提供足夠的靈活性和功能,以滿足更廣泛應用的需求。因此,圖形化系統設計的關鍵因素是圖形化編程。
LabVIEW是一個基于數據流的圖形化開發(fā)平臺,它提供了直觀、符合工程師思維習慣的圖形化編程方式和用戶界面。在LabVIEW中,用戶解決工程問題就像是在設計他們所熟悉的流程圖一樣?,F代多核處理器使得LabVIEW成為一種更合適的編程工具選擇,因為它有著并行化表示和執(zhí)行任務的能力。
LabVIEW本質上是一種并行結構的編程語言?;贚abVIEW的數據流特性,如果連線中存在著分支,或者是框圖中有著并行序列,那么后臺的LabVIEW執(zhí)行器將自動地實現并行化運行。當我們在程序框圖中通過連線的分岔創(chuàng)建另一個程序分支時,就可能產生另一個線程。如果我們創(chuàng)建了多個循環(huán),那相對應的也就創(chuàng)建了數個新的執(zhí)行線程。在LabVIEW中,多個并行循環(huán)會自動分配成多個線程并分配到多個處理核上,因而LabVIEW用戶無需對代碼做任何改動,也不需要花時間學習新的編程方式,即可利用多核處理器的性能優(yōu)勢。
LabVIEW提升多核應用程序的性能,從單核到雙核計算機,理論上講,獲得的性能應該是原來的兩倍。但是,與這個極限的接近程度取決于用戶應用程序并行化運行的程度。LabVIEW程序員們可以很方便的以并行方式來表示他們的解決方案。在多核處理器上,我們可以方便地實現應用程序的性能改進,因為LabVIEW動態(tài)地分配每一個線程。事實上,用戶不需要創(chuàng)建特殊的代碼以支持多線程,而是通過最少的編程調整,并行應用便可以獲益于多核處理器。對于普通的LabVIEW應用程序而言,如果不考慮多核編程技巧,在不改寫代碼的情況下,與最初的基準程序相比,可以獲得25%到35%的性能提升。
{{分頁}}
圖1是一個簡單應用程序的例子。其中,LabVIEW代碼分支簡化了兩個分析任務,一個濾波器操作和一個快速傅立葉變換(FFT),使它們可以在雙核機器上并行化執(zhí)行。它首先在單核的模式下(關掉其中的一個核)運行,然后在雙核的模式下運行。因為這兩項任務都是計算量很高的,利用任務并行化獲得的性能改進為原來的1.8倍。
圖1 典型的LabVIEW應用程序,展示了數據流編程的并行特性
LabVIEW支持嵌入式實時系統,前面大部分討論都是針對如何平衡多核、多線程編程的復雜性,從而提高程序的性能和吞吐量。對于要求更加嚴格的嵌入式實時系統,這些考慮同樣適用。在典型的實時系統中,通常有一段代碼對執(zhí)行時間有嚴格要求,必須以指定速率持續(xù)而可靠地運行。同時也有一些對執(zhí)行時間沒有嚴格要求的代碼段,比如用戶界面的數據傳輸、數據存儲等等。顯然,對于執(zhí)行時間有嚴格要求的代碼或循環(huán),應用程序必須對它們特別關照,保證沒有沖突等問題。
表面上看來,這個要求對于多核系統是一件非常簡單的事情。只要將對于執(zhí)行時間有嚴格要求的代碼與其他代碼隔離,分配到獨占的處理器核上,就可以保證它不受影響地運行。但是,許多實時或嵌入式操作系統并不支持在多個處理核之間的線程負載均衡,這是因為在實時和嵌入式領域的工具往往更關注性能和確定性,而減緩了對于多核的支持。
Intel定義了用戶需要評估的軟件四層次來確定多核系統的可用程度。如果所用的應用程序庫和設備驅動不是為多核而設計的,或者操作系統不能夠在多個處理核上進行負載均衡,那么并行化程序在多核系統上是不能夠運行得更快的。
操作系統,作為軟件層次的底層,許多實時的操作系統(RTOS)廠商現在還不支持在多個處理器核間進行自動的線程負載均衡。但是,從表1的表述可以看到,為了讓多核處理器在嵌入式實時系統中發(fā)揮出性能優(yōu)勢,在實時或嵌入式操作系統中必須支持多核處理器的任務分配。
LabVIEW的最新版本將針對多核處理器的自動線程負載平衡功能引入到實時系統之中。
如果需要更進一步的控制或微調實時程序的性能,在 LabVIEW 中, 可以使用定時循環(huán)結構將各部分代碼分配到指定的處理器核上。這意味著開發(fā)人員可以把執(zhí)行時間有嚴格要求的代碼直接映射到專用的處理器核,從而保證這部分代碼不會被中斷,保持其實時性。
結語
LabVIEW為多核處理器提供了一個理想的編程環(huán)境,其數據流編程概念能夠更直接地將并行應用可視化。LabVIEW自動將并行的程序多線程化,而且它可以指派線程到指定的處理器核,也可以自動平衡線程負載,從而利用多核架構的優(yōu)勢以獲得更好的系統性能。LabVIEW 實時模塊可以在實時或嵌入式系統中支持多核處理器的任務分配,幫助開發(fā)人員從真正意義上進入嵌入式系統的多核時代。
評論