從雲端加速技術看台灣高階人才培育問題#10:是人而非工具,才能解決複雜困難問題,帶動產業與學界進步/洪士灝
上一篇講到FPGA,事實上台灣很多念過電機電子科系、做硬體設計的工程師,都會用FPGA;但是以傳統硬體設計的思維居多。
大部分以FPGA作為驗證晶片設計的工具,有些以FPGA作為加速產品出貨速度的方法,而學校則使用FPGA作為教學的載具,因此不見得具備上一篇文末所說的關鍵能力:(一)找到適合用FPGA晶片加速的高價值軟體、(二)將軟體轉換成FPGA晶片並且將效能最佳化的技術。
異質計算的關鍵語言:OpenCL
既然多數硬體思維的人不具有軟體能力,那麼Intel併購Altera之後要怎麼推動FPGA作為加速器呢?理想上,最好是有一個Software-to-HDL編譯器,可以將任何軟體程式自動轉換成硬體描述語言(Hardware Description Language, HDL),讓使用者不費吹灰就可以享受FPGA所帶來的好處。
這個理想經過多年的努力,在這幾年進步到實用的階段:Altera研發的OpenCL-to-Verilog編譯器,可將以OpenCL撰寫的原始碼,轉換成Verilog程式語言,讓使用者利用FPGA執行能在多核心處理器和GPU上跑的OpenCL程式。
熟悉異質計算的人,應該知道OpenCL。根據維基百科的解釋,OpenCL(Open Computing Language,開放計算語言)是一個為異構平台編寫程式的框架,此異構平台可由CPU、GPU、DSP、FPGA或其他類型的處理器與硬體加速器所組成。這個由非營利性技術組織Khronos Group掌管的語言,希望成為跨平台的標準,讓大家開發出能夠在各種異質平台上都跑得好的可攜性應用。
支持OpenCL的業界。
從上圖中可以看到不少業界大咖幫OpenCL站台。不過站台歸站台,這些公司願意花多少力氣對OpenCL進行研發與提倡、OpenCL何時能成為主流,還是見仁見智的問題。
其實OpenCL已經存在於很多系統中,例如Apple和Google都採用OpenCL加速手機作業系統內部的運作,但並未開放讓iOS或Android的開發者使用。
原因很多,在此不詳加討論。好比Google從來沒有表態支持OpenCL,但是在前一陣子Google宣布提供GPU Cloud服務的時候,OpenCL就是名列第一的程式語言。
各位從上圖中可以看到台灣的聯發科技(MEDIATEK),所以可能會自行想出「聯發科技的手機晶片應該可以跑OpenCL程式」的推論;我不能說這個推論對不對,因為我們和聯發科合作時簽訂了NDA(保密協定),不能評論雙方正在做的事情。
目前大多數的OpenCL程式都是為了使用GPU加速才寫的,但是如果這些程式也能在FPGA上跑得不錯,那麼Intel/Altera/Xilinx在推廣FPGA加速器的時候,不就事半功倍了嗎?
軟硬整合的效能提昇,光靠編譯器可能做不到,目前還是只有專家才能做到。
我們今年初在FPGA Conference上發表一篇論文[footnote]Shih-Hao Hung, Min-Yu Tsai, Bo-Yi Huang, Chia-Heng Tu: “A Platform-Oblivious Approach for Heterogeneous Computing: A Case Study with Monte Carlo-based Simulation for Medical Applications”. FPGA 2016: 42–47.[/footnote],敘述我們在OpenCL跨平台程式最佳化的小小心得。如下圖,要讓案例中的醫學應用程式Monte Carlo modeling of light transport in multi-layered tissues (MCML)跑得更快,我的研究生們把程式的核心改寫為OpenCL,再不斷想辦法改進其效能。我們想到一些方法,打造出一系列的最佳化版本;發現有些方法對GPU有用,有些對FPGA有用,有些則是共通的。
結論是OpenCL程式結構的最佳化,對效能提昇非常重要;而這些可能是編譯器做不到,只有專家才做得到的工作。FPGA目前的效能雖然比不上GPU,但是可能比較省電。未來誰勝誰敗,仍在未定之天。
我們發表在FPGA 2016會議的實驗數據。
解決困難問題的,永遠是人
然而OpenCL會成為主流嗎? 我想,一般的程式師,或是堅持使用「高高階語言」的軟體開發者,目前大部分不會願意學OpenCL。原因在於OpenCL相當複雜,而且要寫好並不容易。
既然這世界上似乎還有做不完的應用軟體開發工作,何必挑硬柿子來吃?甚至現在還有一種「只要會使用機器學習引擎,就可以當上人工智慧訓練師」的風潮出現,學生樂於學習現成的機器學習套件,或是像R語言這種「高高階語言」,連C語言都嫌太低階。
沒問題的,我從來不敢大聲疾呼,要每個資工系大一學生都學「平行程式設計」,因為資訊工程的發展道路是非常寬廣的,我們沒必要規定那些不想學、不適合學的人,來修一堆大人們認為重要的必修課。
只是學生們應該要知道:人工智慧、先進的應用和高效能計算,在電腦發展歷史上,乃至於未來,有著非常重要的關係。
重要的電腦科學家,多半是軟硬兼通的通材;雖然單單使用工具也能做好工作,但無法光用工具解決複雜困難問題。
我幾天前陪家中的少年看電影《The Imitation Game》(中譯「模仿遊戲」),電影中被後世尊稱為電腦科學與人工智慧之父的Alan Turing,為了破解德軍二戰時使用的Enigma密碼機,受命開發一台破譯用的機器;這台機器需要極高的計算速度,才有辦法破解極度複雜的密碼。
在此,設計者的角色有多重要呢?不光是把機器設計出來就算了,因為機器受到各種限制,還是不夠快,必須找出「竅門」,讓計算更有效率。電影中的竅門,就是把德軍每天早上發出的氣象預報的固定格式,當做突破點用來嘗試破解密碼。劇中的Turing在靈感出現的第一時間跑去調整機器,可說是軟硬整合最佳化的鼻祖。
這部電影的海報中有句耐人尋味的話,點出了這個關鍵:The true Enigma was the man who cracked the code(真正的謎,是破解了密碼的人)。我在Sun的工作是研發密碼加速器(參見第四篇),有類似但微不足道的經驗,所以對這部電影特別有興趣,連這次是第三次觀影了。
工具用得再好,也只是高級技工
不只是Turing,早期很多重要的電腦科學家,都是兼通軟硬體。尤其是人工智慧的通材;因為有太多的例子,得用到高效能計算的技術,來打造人工智慧專用系統。
誠然,對於現今一般的系統設計者、軟體開發者來說,只需要理解專門領域的東西、會使用現成的軟硬體介面(Interface)就可以做好工作;對於資料分析師、理論科學家來說,也只需要專門領域的東西、會使用現成的應用軟體,就可以解決問題;但我認為這樣的分工,只是便於培養和運用高科技產業和學術知識生產所需要的人工,不是前瞻研發和孕育大師的做法。
筆者這麼說,無非只想再次指出,業界要賺錢、學者要出論文,應該是出自個人的目的;政府只要略加鼓勵、樂觀其成即可。真正為了國家未來而進行的前瞻科技發展,應該才是政府投入大量資源鼓勵的對象;而且應該針對產業與學界合作,進行跨領域的、可長期實質合作的前瞻研究項目加以鼓勵。
(未完,待續)