從雲端加速技術看台灣高階人才培育問題#11:摩爾定律極限將至,掌握軟體最佳化技術才能進一步提升運算效能/洪士灝
上一篇談到如何用FPGA加速OpenCL撰寫的程式,這是可能的趨勢之一。另一個作法,是提供開發者「加速器模組庫」(Intellectual Property Library),裡面有各種好用的加速器,讓不會最佳化OpenCL程式、也不懂硬體設計的一般開發者,可以像呼叫軟體程序一般,方便地享受FPGA帶來的好處。
讓程式正確執行是技術,讓程式高效執行是藝術
這好比很多人在實際開發軟體應用的時候,喜歡透過API使用現成的程式庫(Library)或是中介軟體(Middleware),甚至呼叫雲端服務。例如矩陣運算,絕大多數的人寫的程式,不會比Intel最佳化過的Math Kernel Library (MKL)裡面的矩陣運算程序來得快。
又例如手機應用(App)的開發,小學生都可以在幾周內學會,因為軟體開發套件(Software Development Kit,SDK)提供許多的API,讓開發者使用手機豐富的內建功能。
不過,小學生所寫出的手機 App,可能很有趣、有創意,但是效能未必好;以Android為例,以Java撰寫的程式,效能可能比用C撰寫來達成同樣功能的程式要低好幾倍。
因此,很多Android App夾帶著用C撰寫、事先編譯好的Native Code,來加速計算沉重的部分。當然這樣會犧牲可攜性,但可大幅增加效能。一個應用以多種程式語言開發,也是廣義的異質計算。
軟體效能和可攜性難以兩全,一直是程式開發者的難題。
要追求雲端上的可攜性的話,當前最佳的程式語言選擇莫過於HTML5,因為幾乎在任何有瀏覽器的設備上都可以跑;然而HTML5程式進行計算時所採用的Javascript語言,效能比Java更難最佳化,所以在推廣的時候遇到難題。
舉例來說,過去Facebook提供給Android手機的App,是以HTML5撰寫成的,但後來因為效能的問題,只好改寫為Java+Native Code。理論上Javascript也可以夾帶Native Code,但是這樣一來就失去了可攜性的好處。
摩爾定律終將來到瓶頸,軟體效能最佳化更顯重要
要效能就得犧牲可攜性,要可攜性就得犧牲效能,這種魚與熊掌無法兼得的兩難,似乎一直都是軟體開發者的難題;只不過這幾年來CPU速度倚賴「摩爾定律」(Moore’s Law)以指數成長,讓一般的軟體開發者,可以用「等待」的方式解決效能難題。
如今隨便一台廉價筆電,都可以上網、作文書處理;但是運算量甚大的「智慧型」應用,能否繼續搭摩爾定律的順風車呢?
未來軟體開發者的選擇:尋找高價值跨領域應用,或是精通某項專業技能。
我不認為如此,顯然Intel也不表樂觀;這可由Intel近年更積極投注於FPGA加速器的研發上。Intel下一代的處理器,會有將FPGA和CPU封裝在一起的版本,因為維持摩爾定律的技術挑戰愈來愈巨大、成本也愈來愈高。
而且用CPU執行某些運算的效率不彰,不利於節能減碳(當然,GPU的崛起,對Intel也是一大威脅,所以Intel必須有所回應。我們下一篇再來談談GPU);這些年來,單執行緒(Single Thread)的程式已經不會像從前那樣自動以幾何級數變快,前瞻的應用開發者只好認命,來學習用低階語言、平行處理、GPU、FPGA等技巧來加速雲端運算效能。
因此我告訴學生,你們這代或許生不逢時,很多電腦界簡單可大賺其錢的東西(英文稱為Low-Hanging Fruits)都被前輩們撿走了;尤其是摩爾定律的順風車,過去前輩們搭得很愉快,未來可能行不通了。
這個年代,各位同學要學著變通,要嘛就跨領域找有價值的應用,要嘛就把某項專業技能學精。總之,可能要效法我們從小唱到大的軍歌裡頭「莫等待,莫依賴,勝利絕不會天上掉下來」的精神。